夜光带你走进Hibernate(四)

版权声明:Genius https://blog.csdn.net/weixin_41987706/article/details/89239973

夜光序言:

孤独放生春风

窗外全是寂寞

拍拍肩头前尘

奔跑依旧继续。

 

 

 

 

正文:

1. hibernate对象状态

session.save(对象);

 

  • 临时状态

1 . 直接new出来的对象

2. 不处于session的管理(即没有与任何一个session关联)

3. 对象在数据库中没有对应的记录

Employee  e  = new Employee();

e.setId(2);  只要主键在数据库中存在,就说这个对象在数据库中有对应记录

在数据库中叫主键~~么么

OID, object identified 对象的唯一标识 (对应数据库中的主键)

  • 持久化状态

1. 处于session的管理范围

当执行session的方法如:save/update/saveOrUpdate/get/load

对象就会自动转变为持久化状态

2. 在数据库中有对应的记录

3. 处于持久化状态的对象,当对对象属性进行更改的时候,提交事务更改会反映到数据库中

  • 游离状态

1. 对象不处于session的管理范围;  通常指session关闭后对象的状态

2. 对象在数据库中有对应的记录

 

2. Session缓存

概念:

Session缓存,也叫做一级缓存

当执行session的相关方法,如: save()/update()/get()/load()等方法的时候,对象会自动放入一级缓存中。

当Session关闭后,一级缓存内容失效

特点:

1)缓存有效范围,只在当前session范围内有效~~,帅气~缓存时间很短、作用范围小

2)一级缓存,可以在短时间内多次操作数据库的时候,才会明显提升效率

一级缓存的结构:Ma<主键,对象>

3)在提交事务时候,

  Hibernate会同步缓存数据到数据库中,会对比缓存数据与数据库数据是否一致,如果不一致,才提交更改到数据库(生成update)

4) hibernate提供的一级缓存有hibernate自身维护,如果想操作一级缓存内容,必须通过hibernate提供的方法;

session.flush();       手动让让一级缓存内容与数据库同步

session.evict(emp1);   清空一级缓存中对象:  清除指定的对象

session.clear();       清空一级缓存中对象:  清除所有的对象

 

list()与iterator()查询区别

list:  (通常使用频率较高)

Query接口定义的list查询方法,

一次查询所有满足需要的数据

 

iterator:

Query接口定义的iterator查询方法,

1. 先查询所有满足条件记录的主键   (查询1次)

2. 再根据每一个id,进行主键查询,有多少记录,查询多少次  (查询n次)

3. iterator查询:  N + 1

4. iterator查询,迭代数据的时候,只有用到数据的时候,才会查找数据库(懒加载)

区别:

1. 查询数据方式不同: 查询全部与查询N+1

2. 一级缓存

List查询,查询的结果会放入一级缓存,但不会从一级缓存中获取

Iteraotro查询,会放入一级缓存,同时也会从一级缓存中获取

猜你喜欢

转载自blog.csdn.net/weixin_41987706/article/details/89239973