[Java Web]Hibernate基础总结(四)
2024-10-21 17:32:02
性能优化
- 在大数据量遍历时(比如查找消息敏感词),须要手动使用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注解会添加一个字段存放改动次数,事务提交前会对照改动次数是否同样决定是否提交。
最新文章
- Statement对象的executeUpdate返回信息
- intellij idea Maven 创建项目时出现的一些问题
- SQL基础之基本操作
- 【11-01】Sublime text 学习笔记
- listener.ora/sqlnet.ora/tnsnames.ora配置文件详解
- MATLAB学习笔记(三)&mdash;&mdash;程序设计
- Emily姨妈家的猫
- [TYVJ] P1044 数字三角形
- Dubbo2.6.5+Nacos注册中心(代替Zookeeper)
- python 链接数据库错误
- Navicat连接MySQL8.0亲测有效
- Linux chpasswd (批量或单一修改用户密码)和passwd(直接修改用户密码)
- BCGcontrolBar(六) RibbonBar编辑
- 小学四则运算APP 第一个冲刺 第二天
- Spring Boot 菜鸟入门(持续更新)
- Jupyter notebook用法
- Prism 4 文档 ---第8章 导航
- linux之sed基础命令详解
- new placement 的使用
- GitFlow在命令行的使用
热门文章
- SpringMVC中拦截器的使用
- openresty记录响应body乱码问题
- 支持向量机(SVM)介绍
- 智普教育Python视频教程之入门基础篇,python笔记
- centos7 keepalived以及防火墙配置
- c/c++在windows下获取时间和计算时间差的几种方法总结 【转】
- hadoop运行报错Wrong FS: hdfs:/, expected: file:///
- 将本地jar包添加到maven中
- Linux C高级编程——网络编程之以太网(2)
- rails执行sidekiq任务的时候报错“can&#39;t connect to local mysql server through socket &#39;/var/run/mysqld/mysqld.sock&#39;”