Hibernate学习小结
2016-05-28 00:00
344 查看
1. get()和load()方法的区别 ?
get()和load()方法:从数据库中取得都是持久化对象,即已经记载在一级缓存session中,但是如果调用session.close(),就
会导致get()和load()的对象变为游离态, 即它们不在session的缓存中.
get()方法: 调用这个方法,hibernate回去确认ID(主键标示符-OID)在数据库中是否存在, 首先会去session中查找,也就是
一级缓存中去查找! 如果没有, 再去二级缓存(SessionFactory缓存,也称应用缓存)中查找, 如果再次没有,就去数据库中查
找, 如果接连查找都没有, 就会返回一个NULL.
load()方法: 调用这个方法,hibernate就会认为咱们所查找的ID一定存在! 首先回去session中查找, 如果没有找到,
hibernate会根据xxx.hbm.xml文件中的<class name=”类名” lazy=”true/false”>lazy的属性值判断是否使用延迟加载,
如果是true, 就返回该对象的代理, 如果在session中没找到, 再去二级缓存SessionFactory中查找, 如果二级缓存没找到,
再去数据库中去查找, 如果还是没有, 就会抱ObjectNotFoundException异常.
load()方法要和get()方法一样效果, 就需修改xxx.hbm.xml文件中的<class name=”类名” lazy=”false”>就可.
2. Hibernate中java对象的三种状态
3. Hibernate中java对象的三种状态之间的转化
其中, delete()方法是唯一使得持久状态或游离态变为临时状态的方法.
4. update() 、saveOrUpdate()以及merge()的区别 ?
01. update(): 直接更新数据库中数据, 只有一条SQL语句, 无论数据库是否存在该数据, 并且会把游离状态的对象转换为持久化状态!
02. saveOrUpdate(): ① 数据库存在数据时, 先查询, 后修改! 两条SQL语句; ② 数据库不存在该数据时, 先查询, 后新增! 两条SQL语句.
上述两种情况主要是通过主键标示符(OID)来判断是调用save()还是update(), 当对象是临时状态时,执行save();
当对象时游离状态的时候, 执行update()方法;
03. merge(): ① 数据库存在数据时, 先查询, 后修改! 两条SQL语句; ② 数据库不存在该数据时, 先查询, 后新增! 两条SQL语句.
当对象是临时状态的时候, 将对象复制一份到session的缓存中, 而原有传进去的对象仍然是临时状态, 执行save(), 返回
session缓存中的对象引用, 对象变为持久状态, 可以通过一个变量接收该返回值, 就可以获得该持久状态对象.
5. 脏检查和缓存清理
脏对象: 与之前session中存在的快照进行比对, 发现对象的属性发生变化时, 那么该比对的对象就成为脏对象.
脏检查: 就是获得对象与快照比对的过程.
脏检查何时发生: ①当清理缓存(调用session的flush()方法)时, Hibernate会对session中持久状态的对象进行检测, 判断对象的数据是否发生
改变, 即这是进行脏检查.
②当调用commit()方法时, 其会默认调用flush()方法, 这过程中也会发生脏检查.
6. Hibernate中通过query接口方法查询中list() 和iterator()方法的区别 ?
list()查询所有对象, 只有一条sql查询语句
iterator()方法查询是所有对象的OID, 当要遍历查询的结果时, 如果缓存session中存在数据库对应的持久化对象时, 整个查询只有一条sql语句, 遍历结果的过程中不会出现sql语句, 当缓存中不存在时,会执行n+1条sql语句, n代表OID的个数, 其中第一条sql语句查的是所有对象的OID(主键标示符).
7. String、StringBuffer和StringBuilder的区别 ?
从执行速度上来说, StringBuilder是最快的,;String是最慢的,每次都是新开辟一个空间; StringBuffer居中.
从线程安全角度来说, StringBuffer是线程不安全的;StringBuilder是线程不安全的.
get()和load()方法:从数据库中取得都是持久化对象,即已经记载在一级缓存session中,但是如果调用session.close(),就
会导致get()和load()的对象变为游离态, 即它们不在session的缓存中.
get()方法: 调用这个方法,hibernate回去确认ID(主键标示符-OID)在数据库中是否存在, 首先会去session中查找,也就是
一级缓存中去查找! 如果没有, 再去二级缓存(SessionFactory缓存,也称应用缓存)中查找, 如果再次没有,就去数据库中查
找, 如果接连查找都没有, 就会返回一个NULL.
load()方法: 调用这个方法,hibernate就会认为咱们所查找的ID一定存在! 首先回去session中查找, 如果没有找到,
hibernate会根据xxx.hbm.xml文件中的<class name=”类名” lazy=”true/false”>lazy的属性值判断是否使用延迟加载,
如果是true, 就返回该对象的代理, 如果在session中没找到, 再去二级缓存SessionFactory中查找, 如果二级缓存没找到,
再去数据库中去查找, 如果还是没有, 就会抱ObjectNotFoundException异常.
load()方法要和get()方法一样效果, 就需修改xxx.hbm.xml文件中的<class name=”类名” lazy=”false”>就可.
2. Hibernate中java对象的三种状态
3. Hibernate中java对象的三种状态之间的转化
其中, delete()方法是唯一使得持久状态或游离态变为临时状态的方法.
4. update() 、saveOrUpdate()以及merge()的区别 ?
01. update(): 直接更新数据库中数据, 只有一条SQL语句, 无论数据库是否存在该数据, 并且会把游离状态的对象转换为持久化状态!
02. saveOrUpdate(): ① 数据库存在数据时, 先查询, 后修改! 两条SQL语句; ② 数据库不存在该数据时, 先查询, 后新增! 两条SQL语句.
上述两种情况主要是通过主键标示符(OID)来判断是调用save()还是update(), 当对象是临时状态时,执行save();
当对象时游离状态的时候, 执行update()方法;
03. merge(): ① 数据库存在数据时, 先查询, 后修改! 两条SQL语句; ② 数据库不存在该数据时, 先查询, 后新增! 两条SQL语句.
当对象是临时状态的时候, 将对象复制一份到session的缓存中, 而原有传进去的对象仍然是临时状态, 执行save(), 返回
session缓存中的对象引用, 对象变为持久状态, 可以通过一个变量接收该返回值, 就可以获得该持久状态对象.
5. 脏检查和缓存清理
脏对象: 与之前session中存在的快照进行比对, 发现对象的属性发生变化时, 那么该比对的对象就成为脏对象.
脏检查: 就是获得对象与快照比对的过程.
脏检查何时发生: ①当清理缓存(调用session的flush()方法)时, Hibernate会对session中持久状态的对象进行检测, 判断对象的数据是否发生
改变, 即这是进行脏检查.
②当调用commit()方法时, 其会默认调用flush()方法, 这过程中也会发生脏检查.
6. Hibernate中通过query接口方法查询中list() 和iterator()方法的区别 ?
list()查询所有对象, 只有一条sql查询语句
iterator()方法查询是所有对象的OID, 当要遍历查询的结果时, 如果缓存session中存在数据库对应的持久化对象时, 整个查询只有一条sql语句, 遍历结果的过程中不会出现sql语句, 当缓存中不存在时,会执行n+1条sql语句, n代表OID的个数, 其中第一条sql语句查的是所有对象的OID(主键标示符).
7. String、StringBuffer和StringBuilder的区别 ?
从执行速度上来说, StringBuilder是最快的,;String是最慢的,每次都是新开辟一个空间; StringBuffer居中.
从线程安全角度来说, StringBuffer是线程不安全的;StringBuilder是线程不安全的.
相关文章推荐
- Intelij idea 不能解析jsp内置对象
- ThinkPHP 表单令牌验证功能
- Sublime Text 3 关闭自动提示
- Eclipse 快捷键
- 数据库笔记
- 关于分享
- C语言修炼日记——extern
- 桶排序和冒泡排序比较
- 河南网中网微信三级分销系统软件的优势是什么
- CSS之Transform
- GET和POST的比较
- HDOJ 1236 with three methods using C++
- 163_快速索引
- iOS之百度云推送
- iOS RunLoop 自己的理解
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- 20160527关于工作
- 顶尖程序员不同于常人的 5 个区别
- 知乎上一个问题的回答集锦
- Ajax