4.17日报

news/2024/11/25 19:39:28/

 get()和 load()的区别?
数据查询时,没有 OID 指定的对象,get() 返回 null;load() 返回一个代理对象。
load()支持延迟加载;get() 不支持延迟加载。
121. 说一下 hibernate 的缓存机制?
hibernate 常用的缓存有一级缓存和二级缓存:

一级缓存:也叫 Session 缓存,只在 Session 作用范围内有效,不需要用户干涉,由 hibernate 自身维护,可以通过:evict(object)清除 object 的缓存;clear()清除一级缓存中的所有缓存;flush()刷出缓存;

二级缓存:应用级别的缓存,在所有 Session 中都有效,支持配置第三方的缓存,如:EhCache。

122. hibernate 对象有哪些状态?
临时/瞬时状态:直接 new 出来的对象,该对象还没被持久化(没保存在数据库中),不受 Session 管理。
持久化状态:当调用 Session 的 save/saveOrupdate/get/load/list 等方法的时候,对象就是持久化状态。
游离状态:Session 关闭之后对象就是游离状态。
123. 在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?
getCurrentSession 会绑定当前线程,而 openSession 则不会。
getCurrentSession 事务是 Spring 控制的,并且不需要手动关闭,而 openSession 需要我们自己手动开启和提交事务。


124. hibernate 实体类必须要有无参构造函数吗?为什么?
hibernate 中每个实体类必须提供一个无参构造函数,因为 hibernate 框架要使用 reflection api,通过调用 ClassnewInstance() 来创建实体类的实例,如果没有无参的构造函数就会抛出异常。

MyBatis
125. MyBatis 中 #{}和 ${}的区别是什么?
\#{}是预编译处理,${}是字符替换。在使用 #{}时,MyBatis 会将 SQL 中的 #{}替换成“?”,配合 PreparedStatement 的 set 方法赋值,这样可以有效的防止 SQL 注入,保证程序的运行安全。

126. MyBatis 有几种分页方式?
分页方式:逻辑分页和物理分页。

「逻辑分页:」 使用 MyBatis 自带的 RowBounds 进行分页,它是一次性查询很多数据,然后在数据中再进行检索。

「物理分页:」 自己手写 SQL 分页或使用分页插件 PageHelper,去数据库查询指定条数的分页数据的形式。

127. RowBounds 是一次性查询全部结果吗?为什么?
RowBounds 表面是在“所有”数据中检索数据,其实并非是一次性查询出所有数据,因为 MyBatis 是对 jdbc 的封装,在 jdbc 驱动中有一个 Fetch Size 的配置,它规定了每次最多从数据库查询多少条数据,假如你要查询更多数据,它会在你执行 next()的时候,去查询更多的数据。就好比你去自动取款机取 10000 元,但取款机每次最多能取 2500 元,所以你要取 4 次才能把钱取完。只是对于 jdbc 来说,当你调用 next()的时候会自动帮你完成查询工作。这样做的好处可以有效的防止内存溢出。

128. MyBatis 逻辑分页和物理分页的区别是什么?
逻辑分页是一次性查询很多数据,然后再在结果中检索分页的数据。这样做弊端是需要消耗大量的内存、有内存溢出的风险、对数据库压力较大。
物理分页是从数据库查询指定条数的数据,弥补了一次性全部查出的所有数据的种种缺点,比如需要大量的内存,对数据库查询压力较大等问题。
129. MyBatis 是否支持延迟加载?延迟加载的原理是什么?
MyBatis 支持延迟加载,设置 lazyLoadingEnabled=true 即可。

延迟加载的原理的是调用的时候触发加载,而不是在初始化的时候就加载信息。比如调用 a. getB(). getName(),这个时候发现 a. getB() 的值为 null,此时会单独触发事先保存好的关联 B 对象的 SQL,先查询出来 B,然后再调用 a. setB(b),而这时候再调用 a. getB(). getName() 就有值了,这就是延迟加载的基本原理。


http://www.ppmy.cn/news/47015.html

相关文章

MIT6.824 Lecture18 Fork Consistency

Background 拜占庭问题(Byzantine Generals Problem)得名于一个古老的传说,讲述了拜占庭帝国在战争中的一个失败策略。在这个故事中,多名拜占庭将军要协调进攻或撤退的行动,但是其中一些将军可能会向其他帝国泄露假消…

【MySQL | 进阶篇】09、MySQL 管理及常用工具(mysqladmin、mysqlbinlog、mysqldump 等)的使用

目录 一、系统数据库 二、常用工具 2.1 mysql 示例 2.2 mysqladmin 示例 2.3 mysqlbinlog 示例 2.4 mysqlshow 示例 2.5 mysqldump(数据备份) 示例 2.6 mysqlimport/source(数据恢复) 2.6.1 mysqlimport 2.6.2 …

企业绩效管理怎么做?

阅读本文您将了解:1.企业绩效管理是什么;2.企业绩效管理怎么做;3.绩效管理系统的优势所在。 一、绩效管理是什么 绩效考核和绩效管理是企业管理中必须了解和掌握的概念。绩效考核是企业对主要经济和技术指标完成情况按照既定方案进行的考核…

浅谈日出日落的计算方法以及替代工具 - 日出日落 API

引言 如果你想知道精确的日落日出时间,又或者你想设计一个日出日落时间查询的应用,又或者你只是好奇点进来了,还是可以过来围观一下涨涨知识,今天想跟大家聊一聊的是日出日落的计算方法以及替代工具 - 日出日落 API 。 日出日落…

产品说明书应该如何制作?

在当今互联网时代,产品说明书无疑是一种展示产品特性、引导用户使用和解决用户问题的重要方式。一份精心制作的产品说明书,能够让用户更快地了解和掌握产品的使用方法,让用户充分享受产品带来的便利。不过要做出一份高质量的产品说明书&#…

[java基础]面向对象(四)

多态:多种形态 向上造型/自动类型转换: 超类型的引用指向派生类的对象 能点出来什么,看引用的类型--------------这是规定,记住它 向下转型/强制类型转换,成功的条件只有如下两种: 引用所指向的对象&am…

【FTP服务】

目录 一、FTP服务二、FTP服务器安装配置FTP服务的安装匿名访问开启防火墙设置本地用户修改配置文件 以图形化的格式来写入文件 三、设置白名单,黑名单用户 一、FTP服务 作用: 是用来传输文件的协议 端口: FTP服务器默认使用TCP协议的20、21端口与客户端进行通信 2…

从零学习SDK(7)如何打包SDK

打包SDK的目的是为了方便将SDK提供给其他开发者或用户使用,以及保证SDK的兼容性和安全性。打包SDK可以有以下几个好处: 减少依赖:打包SDK可以将SDK所需的库、资源、文档等打包成一个文件或者一个目录,这样就不需要用户再去安装或…