性能优化

  1. 在大数据量遍历时(比如查找消息敏感词),须要手动使用clear方法释放缓存中的数据,防止缓存中数据过多浪费内存。
  2. 1+N问题:将Fetch设为LAZY能够在须要时才发出sql语句,或者设置BatchSize指定一条sql语句查询多个对象。
  3. list方法会把全部对象都取出,而iterate方法会先取出全部对象的主键,须要时再依据主键取出对象。

    另外iterate会查询二级缓存。list不会。

缓存
  1. Hibernate中的缓存分为一级缓存和二级缓存,缓存能够有效降低查询数据库的次数,提高程序性能。
  2. 一级缓存指的是Session中的缓存,因为Session的生存周期较短所以一级缓存能带来的性能提升非常有限。
  3. 二级缓存指的是SessionFactory中的缓存。能够跨Session存在。

  4. 适合二级缓存数据的特点:常常被訪问、不会常常修改以及数量有限。
  5. 打开缓存的方法:在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) 
  6. load和iterate方法默认使用二级缓存,list会往二级缓存中加入数据,可是不会从二级缓存中查找数据。
  7. 假设须要Query使用二级缓存,须要打开查询缓存:
    <property name="cache.use_query_cache">true</property>
  8. 常见缓存算法分为LRU(近期最少被使用)、LFU(最不常常使用)和FIFO(先进先出)。

事务并发处理
  1. 事务并发可能出现的问题分为:第一类丢失更新、脏读、不可反复读、第二类丢失更新(不可反复读的特殊情况)、幻读。

  2. 数据库的事务隔离机制:1:read-uncommitted  2:read-committed  4:repeatable read  8:serializable(数字代表相应值)。
  3. 仅仅要支持事务的数据库,就不可能发生第一类更新丢失。
  4. read-uncommitted(同意读取未提交的数据)会发生脏读、不可反复读和幻读。

  5. read-committed(读取已提交的数据)不会出现脏读,仍会出现不可反复读和幻读。
  6. repeatable read (事务运行中其它事务无法运行改动或插入)较安全。
  7. serializable(全部事务顺序运行)很少用。
  8. hibernate.connection.isolation能够设置事务隔离级别,分别相应1、2、4、8(假设不设使用数据库默认的级别)。
  9. 悲观锁:使用select ...for update。或者使用load(class, id, LockMode.Upgrade)。
  10. 乐观锁:使用@Version注解会添加一个字段存放改动次数,事务提交前会对照改动次数是否同样决定是否提交。

[Java Web]Hibernate基础总结(四)的更多相关文章

  1. 编程语言十万个为什么之java web的基础概念

    1.什么是JAVA Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, Ja ...

  2. 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) 二. ...

  3. java Web开发基础(一)工程项目文档结构

    2013年毕业后,在深圳工作开始是用.NET ASP.NET MVC做的项目,后来公司用java来做.于是就从.NET转java了.从.NET转java不是那么的难.今天刚好是清明节放假三天,整理了j ...

  4. Java Web入门学习(四)Eclipse与Maven、Tomcat整合配置 (重整版并解决问题)

    Java Web学习(四)Eclipse与Maven整合配置 (重整版) 一.准备工作 1.Tomcat 8.5.15 2.Maven3.5 3.Eclipse Neon.3 Release (4.6 ...

  5. Java Web系列:Java Web 项目基础

    1.Java Web 模块结构 JSP文件和AXPX文件类似,路径和URL一一对应,都会被动态编译为单独class.Java Web和ASP.NET的核心是分别是Servlet和IHttpHandle ...

  6. Java Web开发基础(1)-Servlet

    概述 Servlet技术是对webserver的扩展,要理解这个,可能先了解一下什么是Webserver以及它的功能,特别是它的不足是非常有帮助的,可參考:点击打开链接.另外.Servlet也是一个用 ...

  7. Spring MVC + Spring + Mybitis开发Java Web程序基础

    Spring MVC + Spring + Mybitis是除了SSH外的另外一种常见的web框架组合. Java web开发和普通的Java应用程序开发是不太一样的,下面是一个Java web开发在 ...

  8. JAVA EE Hibernate基础一之环境配置

    对于JAVA开发高级,hibernate是java三大框架之一,足以见得它的重要性,那么对于hibernate的使用大家有了解多少呢?从今天开始我将带领大家一道共同探讨一下hibernate的知识,h ...

  9. Hibernate基础学习(四)—对象-关系映射(上)

    一.映射对象标识符      Java语言按内存地址来识别或区分同一个类的不同对象,而关系数据库按主键值来识别或区分同一个表的不同记录.Hibernate使用对象标识符(OID)来建立内存中的对象和数 ...

随机推荐

  1. Unity3D 手游开发中所有特殊的文件夹

    这里列举出手游开发中用到了所有特殊文件夹. 1.Editor Editor文件夹可以在根目录下,也可以在子目录里,只要名子叫Editor就可以.比如目录:/xxx/xxx/Editor  和 /Edi ...

  2. JAVA HDFS API Client 连接HA

    如果Hadoop开启HA,那么用Java Client连接Hive的时候,需要指定一些额外的参数 package cn.itacst.hadoop.hdfs; import java.io.FileI ...

  3. logback中打印sql语句

    To log SQL statements for particular mybatis mapper set DEBUG (TRACE to see query parameters and res ...

  4. iOS: 使用故事板和xib设置按钮圆角方法

    使用storyboard如何设置圆角或边框? 通过storyboard的 运行时属性runtime attribute,可以对Button设置圆角或者边框 1.很多人都知道,通常设置一个 Button ...

  5. 完美解决“find: 路径必须在表达式之前:”

    使用find命令查找文件的时候会有如题的提示,只需略作修改即可.两种方法: ①可cd到其它目录再查找(当前目录下存在要查找的目标文件时会出现此类错误,换到其它目录下再执行相同的命令即可): ②如果目标 ...

  6. 如何打造一款可靠的WAF

    之前写了一篇<WAF防御能力评测及工具>,是站在安全运维人员选型WAF产品的角度来考虑的(优先从测试角度考虑是前职业病,毕竟当过3年游戏测试?!).本篇文章从WAF产品研发的角度来YY如何 ...

  7. linux(虚拟机中)与windows共享文件两种方法

      Windows 下用 SourceInsight 与 Linux 协作编码     习惯了用SourceInsight 读写代码,在Linux下一时没找到类似的工具,vi的操作也不熟,偶尔看看或小 ...

  8. 第七章:JAVA引用ESWCF及部分方法说明

    WCF搭建地址: http://127.0.0.1:8081/Search.svc?wsdl 操作如下: 引用webservice 2.输入webservice访问地址,点击下一步 3.点击Finis ...

  9. Converter -> public static int ToInt32(double value) 你用对了么?

    Convert.ToInt32()  是我们经常使用的方法,但如果我们写如下的代码,能确定它的输出值么? var x = 7.5; Console.WriteLine(7.5 + ": &q ...

  10. EffectiveJava(30) -- 全面解析enum类型

    --在大多数项目中,我们会经常使用int类型来声明final类型的常量,它在不考虑安全的情况下确实能满足我们绝大多数的需求.但是在JDK1.5版本发布之后,声明一组固定的常量组成合法值的类型就建议使用 ...