Hibernate之一级缓存

来源:互联网 发布:java工程师简历模板 编辑:程序博客网 时间:2024/06/02 07:34

为什么要使用缓存?

减少对数据库的访问次数,提升Hibernate的效率。

Hibernate的一级缓存,又称为session的缓存它可以在session范围内减少数据库的访问次数只在session范围有效! 

当Session关闭,一级缓存失效


1.当调用session的save/saveOrUpdate/get/load/list/iterate方法的时候,都会把对象放入session的缓存中。

2.Session的缓存由hibernate维护, 用户不能操作缓存内容

如果想操作缓存内容,必须通过hibernate提供的evit/clear方法操作。

特点:

         只在(当前)session范围有效,作用时间短,效果不是特别明显!

         在短时间内多次操作数据库,效果比较明显!


缓存的几个相关的方法:

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

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

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

使用场景:

一般在批量操作的时候使用,先使用session.flush()与数据库同步,然后再清空一级缓存的内容session.clear()


不同的session是否会共享缓存数据 ?

不会。

User  user1 = session1.get(User.class,1);   把u1对象放入session1的缓存

session2.update(user1);     把u1放入session2的缓存

 

user1.setName(‘newName’);

如果生成2条update的sql语句, 说明不同的session使用不同的缓存区,不能共享。


list与iterator查询的区别?

list()

一次把所有的记录都查询出来,

会放入缓存,但不会从缓存中获取数据

Iterator

N+1查询; N表示所有的记录总数

即会先发送一条语句查询所有记录的主键(1),

再根据每一个主键再去数据库查询(N)!

会放入缓存,也会从缓存中取数据!