hibernate优化
session控制
为了避免session创建的开销,需要对session的创建进行控制
当前行为:
使用ThreadLocal的方式控制session的创建
使用filter的方式创建和关闭session
尚未配置filter
此行为仅仅使用web开发中应用。
事务控制
针对hibernate由三种dao操作 find save flush
find即查询不需要开事务,所以可以考虑针对查询不使用事务控制
针对saveOrUpdate使用事务
现在事务提交是在filter结束的时候去做
但有一些action中是不需要事务的,频繁开关事务可能会带来一定的系统开销
当前测试使用和不使用事务进行查询测试结果(根据ID查询记录100次时间比较)
不开事务 421ms
打开事务 516ms
事务的开关最好限定在方法内部,可以考虑在service方法中开关事务,可以避免这个问题
session关闭和事务提交的时候,hibernate会主动调用flush方法进行数据库同步
所以在当前项目中不需要关心flush方法
事务实现选用和配置
使用jdbc事务控制
不选用jta作为事务的实现
放弃理由
当前测试服务器tomcat本身仅仅是个web server,并不支持jta
配置hibernate属性信息
hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory
net.sf.hibernate.transaction.JDBCTransactionFactory
jta的好处
JTA提供了跨Session的事务管理能力
为以后扩展留下了选择空间
实现
单一的增删改操作不需要调用session.beginTransaction()等方法
针对多条记录的修改使用下面的方式调用api
UserTransaction ut = (UserTransaction)(new InitialContext().lookup("java:comp/UserTransaction"));
ut.begin();
//.....
ut.commit();
使用下面的方式也可以同样实现事务控制,但因为hibernate内部同样调用上面的api实现
处于节省资源的想法,不建议使用
Transaction tx = session.beginTransaction();
tx.commit();
以后可以考虑使用spring的aop实现替换当前实现
在tomcat中的配置
<Resource name="UserTransaction" auth="Container" type="javax.transaction.UserTransaction"/>
<ResourceParams name="UserTransaction">
<parameter>
<name>factory</name>
<value>org.objectweb.jotm.UserTransactionFactory</value>
</parameter>
<parameter>
<name>jotm.timeout</name>
<value>60</value>
</parameter>
</ResourceParams>
分页控制
通过criteria. setFirstResult/setMaxResults方法可以限制一次查询返回的记录范围
延迟加载
lazy_load
所有有关数据关联(一对多,多对多等)的映射都需要指定延迟加载
因为当前系统的session关闭是在filter里面做的,所以不需要控制关联对象的加载
在特殊的情况下,比如session关闭后获取关联对象
可以在session关闭前调用Hibernate.initialize()API获取关联对象
缓存选用及配置管理
当前选用EHCache作为第二层的缓存(第一层为数据库缓存)
由于EHCache不支持分布式,所以将来可以考虑使用jgroup实现分布式
针对系统内大部分的dao操作使用只读(read)
分享到:
相关推荐
目录 课程内容 1 HelloWorld 2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么... 4 一级缓存和二级缓存和査询缓存(面试题)(详见hibernate_3000_Hibernate_3KindsOf_Cache) 5 事务并发处理(面试的意义更大)
你将直接深入到Hibernate的富编程模型之中,贯穿映射、查询、抓取策略、事务、会话、缓存以及更多其他内容。书中图文并茂地介绍了数据库设计和优化技术的实践。在本书中,作者详尽介绍了具有Java持久化2.1标准的...
Hibernate入门 OR映射技术 通过Hibernate API操纵数据库 检索策略和方式 数据库事务、并发、缓存与性能优化 高级配置。
20.5 Java应用通过Hibernate API声明JDBC事务 20.5.1 处理异常 20.5.2 Session与事务的关系 20.5.3 设定事务超时 20.6 Java应用通过Hibernate API声明JTA事务 20.7 Java应用通过JTA API声明JTA事务 ...
10.3.2 使用Hibernate非事务地工作 10.3.3 使用JTA的可选事务 10.4 小结 第11章 实现对话 11.1 传播Hibernate Session 11.1.1 Session传播的用例 11.1.2 通过线程局部传播 11.1.3 ...
文档内容包括:Hibernate入门、OR映射技术、通过Hibernate API操纵数据库、检索策略和方式、数据库事务、并发、缓存与性能优化、高级配置
Hibernate入门 OR映射技术 通过Hibernate API操纵数据库 检索策略和方式 数据库事务、并发、缓存与性能优化 高级配置
(2)运用struts1.2+hibernate+spring 框架,数据库连接池,事务管理; (3)Struts 应用国际化,Struts 标签库与Tiles框架, JSTL标签库,Spring IOC; (4)采用优化性能技术,采用oscache缓存,freemarker静态页面生成; (5)...
20.5 Java应用通过Hibernate API声明JDBC事务 20.5.1 处理异常 20.5.2 Session与事务的关系 20.5.3 设定事务超时 20.6 Java应用通过Hibernate API声明JTA事务 20.7 Java应用通过JTA API声明JTA事务 ...
20.5 Java应用通过Hibernate API声明JDBC事务 20.5.1 处理异常 20.5.2 Session与事务的关系 20.5.3 设定事务超时 20.6 Java应用通过Hibernate API声明JTA事务 20.7 Java应用通过JTA API声明JTA事务 ...
20.5 Java应用通过Hibernate API声明JDBC事务 20.5.1 处理异常 20.5.2 Session与事务的关系 20.5.3 设定事务超时 20.6 Java应用通过Hibernate API声明JTA事务 20.7 Java应用通过JTA API声明JTA事务 ...
手把手教会你使用hibernate Hibernate入门 OR映射技术 通过Hibernate API操纵数据库 检索策略和方式 数据库事务、并发、缓存与性能优化 高级配置
第5章 hibernate 3持久化技术实践与性能优化 271 5.1 操作持久化对象的常用方法介绍 271 5.1.1 使用session的begintransaction()方法 272 5.1.2 使用session的close()方法 273 5.1.3 使用session的connection()...
一个J2EE购物网站的实现 运用struts1.2+hibernate+spring 框架,数据库连接池,事务管理;Struts 应用国际化,Struts 标签库与Tiles框架, JSTL标签库,Spring IOC。 采用优化性能技术,采用oscache缓存,freemarker静态...
10.1hibernate事务与并发 208 10.1.1什么是事务 208 10.1.2hibernate中的事务处理 209 10.1.3在hibernate中使用jta事务 210 10.1.4并发控制 211 10.2hibernate缓存 213 10.2.1缓存的工作原理 213 10.2.2应用...
1.9. hibernate如何管理缓存 4 1.10. 使用Hibernate的优点: 6 1.11. Hibernate是如何延迟加载? 6 1.12. Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 6 1.13. Hibernate的查询方式 7 1.14. 如何...
支持缓存融入事务,业务异常不提交缓存数据 *.支持通用分布式锁 *.支持全服务热更新配置 *.支持服务运行状态和日志查询,便于快速定位问题 -->SpringCloudConfigServer高可用成本较高,运维成本提升 -->本功能...
2. 性能问题:MyBatis的性能问题较多,需要开发者对SQL语句和缓存进行优化。 MyBatis框架适用场合 1. 复杂的数据库操作:MyBatis适合复杂的数据库操作,例如多表关联、子查询等。 2. 高性能要求:MyBatis适合高...