[Java Web]Hibernate基础总结(四)
性能优化
- 在大数据量遍历时(比如查找消息敏感词),须要手动使用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注解会添加一个字段存放改动次数,事务提交前会对照改动次数是否同样决定是否提交。
[Java Web]Hibernate基础总结(四)的更多相关文章
- 编程语言十万个为什么之java web的基础概念
1.什么是JAVA Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, Ja ...
- Java Web入门学习(四)Eclipse与Maven、Tomcat整合配置
Java Web学习(四)Eclipse与Maven整合配置 一.准备工作 1.Tomcat 8.5.15 2.Maven3.5 3.Eclipse Neon.3 Release (4.6.3) 二. ...
- java Web开发基础(一)工程项目文档结构
2013年毕业后,在深圳工作开始是用.NET ASP.NET MVC做的项目,后来公司用java来做.于是就从.NET转java了.从.NET转java不是那么的难.今天刚好是清明节放假三天,整理了j ...
- Java Web入门学习(四)Eclipse与Maven、Tomcat整合配置 (重整版并解决问题)
Java Web学习(四)Eclipse与Maven整合配置 (重整版) 一.准备工作 1.Tomcat 8.5.15 2.Maven3.5 3.Eclipse Neon.3 Release (4.6 ...
- Java Web系列:Java Web 项目基础
1.Java Web 模块结构 JSP文件和AXPX文件类似,路径和URL一一对应,都会被动态编译为单独class.Java Web和ASP.NET的核心是分别是Servlet和IHttpHandle ...
- Java Web开发基础(1)-Servlet
概述 Servlet技术是对webserver的扩展,要理解这个,可能先了解一下什么是Webserver以及它的功能,特别是它的不足是非常有帮助的,可參考:点击打开链接.另外.Servlet也是一个用 ...
- Spring MVC + Spring + Mybitis开发Java Web程序基础
Spring MVC + Spring + Mybitis是除了SSH外的另外一种常见的web框架组合. Java web开发和普通的Java应用程序开发是不太一样的,下面是一个Java web开发在 ...
- JAVA EE Hibernate基础一之环境配置
对于JAVA开发高级,hibernate是java三大框架之一,足以见得它的重要性,那么对于hibernate的使用大家有了解多少呢?从今天开始我将带领大家一道共同探讨一下hibernate的知识,h ...
- Hibernate基础学习(四)—对象-关系映射(上)
一.映射对象标识符 Java语言按内存地址来识别或区分同一个类的不同对象,而关系数据库按主键值来识别或区分同一个表的不同记录.Hibernate使用对象标识符(OID)来建立内存中的对象和数 ...
随机推荐
- http请求及缓存框架 GalHttprequest
GalHttprequest 是一个android平台上一个轻量级的http网络请求及缓存框架.当前GalHttpRequest支持以下功能: 同步请求Stirng.InputStream.Bitma ...
- seajs实例
点击文本改变: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- @MySQL为表字段添加索引
删除索引~ DROP INDEX `idx_dict_type` ON `article` 1.添加PRIMARY KEY(主键索引): ALTER TABLE `table_name` ADD PR ...
- px、em、rem的区别
一.PX: px像素(Pixel):相对长度单位.像素px是相对于显示器屏幕分辨率而言的. PX特点 1. IE无法调整那些使用px作为单位的字体大小: 2. 国外的大部分网站能够调整的原因在于其使用 ...
- HDU4667(有错)
正规的做法是找切点.三角形三个顶点分别对圆作切线,然后求切点(2个).两圆之间也要求切点(4个). 扯淡了这就..麻烦的要命.. 下面是写了一半的代码.. void process_circle(po ...
- g++动态库静态库混合链接
今天编译一个程序时报错: g++ -static -o echo.fcgi echo_adaptor.o echo.o -L/usr/local/lib/ -lfastcgipp -L/usr/lib ...
- Groovy(java)+Spock+IDEA+maven+Jenkins+SVN+maven-surefire-plugin+maven-surefire-report-plugin/maven-antrun-extended-plugin集成接口测试框架
文章为原创,未经本人授权禁止转载. 一.spock框架环境搭建. 二.基于spock框架的脚本开发. 三.基于spock框架的用例执行并生成HTML报告. 四.集成jenkins生成HTML报告. 五 ...
- 求x>0时,y=x^3-6x^2+15的极值
解: 当x→∞时,y也→∞,所以y没有最大值. y=x3-6x2+15=-4*(x/2)*(x/2)*(6-x)+15 而根据几何平均数小于等于算术平均数的定理,(x/2)*(x/2)*(6-x)在x ...
- PHP实现程序单例执行
原创文章,转载请注明出处:http://huyanping.sinaapp.com/?p=222 作者:Jenner 一.场景描写叙述: 近期我们一块业务.须要不断的监听一个文件夹的变化.假设文件夹中 ...
- 并发编程系列小结(线程安全,synchronized,脏读,线程间的通信wait/notify,线程的三种实现方式Demo,可替代wait/notify的方法)
线程安全: 当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为,那么这个类(对象或方法就是线程安全的) synchronized: 可以在任意对象或方法上加锁,而加锁的这段代码称为 ...