hibernate性能优化策

悲观锁与乐观锁

使用乐观锁在表中加一个version的字段来解决并发性问题

悲观锁:就是多个人同时想修改某个数据,
乐观锁:乐观锁需要在表中加一version(版本)字段,并要在对应的类中配置
 

一级缓存1、一级缓存很短,和session的生命周期一致,随着session的关闭而消失
   *load/get/iterate(查询实体对象)可以使用缓存数据
2、一级缓存它缓存的是实体对象   
3、如果管理缓存,如session.clear()/session.evict()
4、如何避免一次性大批量实体数据插入内存溢出的问题?
 

*先执行flush,在用clear清除缓存

//发出两次load()第一次发一条sql第二次不发,说明它是先在一级缓存找数据,如果没有再到数据库找。

 /**
  * 发出两次load查询
  *
  */ 

   Student student = (Student)session.load(Student.class, 1);
   System.out.println("学生姓名:" + student.getName());
   
 //因为有一级缓存,load方法使用一级缓存,所以本次查询不再发出sql
   student = (Student)session.load(Student.class, 1);
   System.out.println("学生姓名:" + student.getName());

-------------------------------------------------------------------------------------------

//发出两次get() 同上

 /**
  * 发出两次get查询
  *
  */ 
   Student student = (Student)session.get(Student.class, 1);
   System.out.println("学生姓名:" + student.getName());
   
   //因为有一级缓存,get方法使用一级缓存,所以本次查询不再发出sql
   student = (Student)session.get(Student.class, 1);
   System.out.println("学生姓名:" + student.getName());
--------------------------------------------------------------------------------------------
 /**
  * 发出两次iterate查询实体对象
  *
  */
 public void testCache3() {
  Session session = null;
  try {
   session = HibernateUtils.getSession();
   Student student = (Student)session.createQuery("from Student where id=1").iterate().next();
   System.out.println("学生姓名:" + student.getName());
   
   //因为有一级缓存,iterate方法使用一级缓存,发出查询id的sql,不再发出查询实体对象的sql
   student = (Student)session.createQuery("from Student where id=1").iterate().next();
   System.out.println("学生姓名:" + student.getName());

//发出两次iterate查询实体对象
(iterate 会有n+1问题,如果缓存有发查id那1条)
先从数据库查出所有id,再根据ID查数据,所以会有n+1问题,但查实体对象会先在一级缓存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值