hibernate缓存理解

1Hibenate中一级缓存,也叫做session的缓存,它可以在session范围内减少数据库的访问次数!  只在session范围有效! Session关闭,一级缓存失效!

2)当调用sessionsave/saveOrUpdate/get/load/list/iterator方法的时候,都会把对象放入session的缓存中。

3Session的缓存由hibernate维护, 用户不能操作缓存内容; 如果想操作缓存内容,必须通过hibernate提供的evit/clear方法操作。

特点:

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

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

 

 

  • 缓存相关几个方法的作用

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

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

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

 

在什么情况用上面方法?

                 批量操作使用使用:

                          Session.flush();   // 先与数据库同步

                          Session.clear();   // 再清空一级缓存内容

                        

 

 

  • 面试题1 不同的session是否会共享缓存数据?

不会。

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

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

 

U1.setName(‘new Name’);

 

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

 

  • 面试题2 listiterator查询的区别?

list()

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

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

        Iterator

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

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

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

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

你可能感兴趣的:(hibernate缓存理解)