hibernate缓存到JDBC底层实现的操作的性能问题

看到有一个实训的大四学生做hibernate缓存处理,出现不能及时显示数据的问题。我在他下面这样回复他的日志---------》!
太多了,基本没看。不过,我解决一般采用2次刷新。对于数据库的原子事物操作,fulsh ,clear之下。每次请求之前。第二次是自动执行的js页面获取最新的数据。这样,基本可以解决hibernate缓存问题。如果你测试2个不同的账号执行操作或者不同权限账号的操作,一定要小心,hibernate的缓存,主要是session缓存,因为你有的session中存在几个不同账号的来回覆盖。建议每次测试单个账号请,重新登录。不要交替来操作。。或者你在局域网其他的地方登录另一个账号测试。以上都是我解决这类问题的看法。
------
然后回头看看他的日志,转帖过来的很多常用代码。和性能的优化策略。我来写日志为了这个顺便拉过来总结下 。以前日志已经涉及到过一次了。。。

(假设我们user表的age有5000条大于0的记录,)
Session session =SessionFactory.openSession();
Transaction tx =session.beginTransaction();
Itertaor users=session.find("from User u where u.age>0").itertaor();//HSL语句就不做解释了
while(user.hasNext()){
User user =(User)users.next();
user.setAge(user.getAge()+1);
//将本批插入的对象立即写入数据库并释放内存
session.flush();
session.clear();
}
tx.commit();
session.close();


性能与空间的问题时,,,要以性能为主..这也就是说要牺牲空间
所以程序最好跳过Hibernate API  而直接通过JDBC API来执来


Session session=SessionFactory.openSession();
Transaction tx =session.beginTransaction();
Connection conn =session.connection();
PreparedStatement  pstmt = conn.prepareStatement("update users set age=age+1 "+"where age >0");
pstmt.executeUpdate();
tx.commit();


以创建存储过程,,用底层的数据库运行..这样性能好,速度快....


UserUpdate的存储过程代码:
                     
 create or  replace procadure UserUpdate(u_age in number) as 
                      begin
                                   update users set age=age+1 where age>u_age;
                        end;
    
  下面的是在程序中如何调用我们命名的存储过程 
                      
Session session =SessionFactory.openSession();
                     Transaction tx =session.beginTransaction();
                     Connection conn=session.connection();
                   String str="{call UserUpdate(?)}";
                   CallableStatement cstmt= conn.prepareCall(str);
                   cstmt.setInt(1,0);
                  cstmt.executeUpdate();
                  tx.commit();
   注意.开源的MySQL中不支持存储过程的..


这样以上的3次性能优化,从hibernate到jdbc再到本地化数据库存储过程。逐步优化。
执行的更快。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值