[Java Web]Hibernate基础总结(四)
来源:互联网 发布:淘宝补差价链接怎么弄 编辑:程序博客网 时间:2024/06/05 15:03
性能优化
- 在大数据量遍历时(例如查找消息敏感词),需要手动使用clear方法释放缓存中的数据,防止缓存中数据过多浪费内存。
- 1+N问题:将Fetch设为LAZY可以在需要时才发出sql语句,或者设置BatchSize指定一条sql语句查询多个对象。
- list方法会把所有对象都取出,而iterate方法会先取出所有对象的主键,需要时再根据主键取出对象。另外iterate会查询二级缓存,list不会。
缓存
- Hibernate中的缓存分为一级缓存和二级缓存,缓存可以有效减少查询数据库的次数,提高程序性能。
- 一级缓存指的是Session中的缓存,由于Session的生存周期较短所以一级缓存能带来的性能提升很有限。
- 二级缓存指的是SessionFactory中的缓存,可以跨Session存在。
- 适合二级缓存数据的特点:经常被访问、不会经常改动以及数量有限。
- 打开缓存的方法:在Hibernate.cfg.xml中设定:
<property name="cache.use_second_level_cache">true</property><property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
或使用@Cache注解:@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
- load和iterate方法默认使用二级缓存,list会往二级缓存中添加数据,但是不会从二级缓存中查找数据。
- 如果需要Query使用二级缓存,需要打开查询缓存:
<property name="cache.use_query_cache">true</property>
- 常见缓存算法分为LRU(最近最少被使用)、LFU(最不经常使用)和FIFO(先进先出)。
事务并发处理
- 事务并发可能出现的问题分为:第一类丢失更新、脏读、不可重复读、第二类丢失更新(不可重复读的特殊情况)、幻读。
- 数据库的事务隔离机制:1:read-uncommitted 2:read-committed 4:repeatable read 8:serializable(数字代表对应值)。
- 只要支持事务的数据库,就不可能发生第一类更新丢失。
- read-uncommitted(允许读取未提交的数据)会发生脏读、不可重复读和幻读。
- read-committed(读取已提交的数据)不会出现脏读,仍会出现不可重复读和幻读。
- repeatable read (事务执行中其他事务无法执行修改或插入)较安全。
- serializable(所有事务顺序执行)非常少用。
- hibernate.connection.isolation可以设置事务隔离级别,分别对应1、2、4、8(如果不设使用数据库默认的级别)。
- 悲观锁:使用select ...for update,或者使用load(class, id, LockMode.Upgrade)。
- 乐观锁:使用@Version注解会增加一个字段存放修改次数,事务提交前会对比修改次数是否相同决定是否提交。
0 0
- [Java Web]Hibernate基础总结(四)
- [Java Web]Hibernate基础总结(一)
- [Java Web]Hibernate基础总结(二)
- [Java Web]Hibernate基础总结(三)
- Java web基础总结四之—— Servlet基础
- java基础总结 四
- java基础总结四
- Java基础知识点总结四
- java基础总结(四)
- java基础知识点总结(四)
- java web基础大总结
- JAVA web四种属性范围总结
- Hibernate基础之给java web工程加入Hibernate支持
- Java SE基础知识点总结(四)
- java基础总结四(数组、switch语句)
- Java基础四:String操作总结
- java web基础 小测验 知识点总结
- [Java Web]Struts2基础总结(一)
- C语言listen()函数:等待连接
- IT忍者神龟之使用 PowerDesigner
- 如何快速学会嵌入式?
- 2014ACMICPC亚洲区域赛牡丹江现场赛之旅
- 点筹金融合作指南
- [Java Web]Hibernate基础总结(四)
- C. Design Tutorial: Make It Nondeterministic
- 使用控件时提示"未声明标识符"的解决方法
- android常用命令
- C++中的引用符号“&”
- 路由器广告过滤设置
- 国内外知名互联网公司的口号你知道几个?
- Android中View的绘制过程 onMeasure方法简述 附有自定义View例子
- .net获取系统当前时间