hibernate中的一级缓存及常见面试题解析

为什么要用缓存?

         目的:减少对数据库的访问次数!从而提升hibernate的执行效率!

Hibernate中缓存分类:

         一级缓存

         二级缓存

 

  概念

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

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

3)Session的缓存由hibernate维护,用户不能操作缓存内容; 如果想操作缓存内容,必须通过hibernate提供的evict/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(‘newName’);

 

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

 

面试题2: list与iterator查询的区别?

     list()

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

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

    Iterator

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

                   即会先发送一条语句查询所有记录的主键(1),再根据每一个主键再去数据库查询(N)!

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值