123.Hibernate一级缓存

研究一级缓存需要理解的问题:

/**

 * 1.一级缓存的生命周期

 *       一级缓存在Session中存放,只要创建session,一级缓存就存在了。

 *             当关闭Session的时候,一级缓存就不存在了。

 * 2.一级缓存依赖于谁存在

 *       依赖于session存在。

 * 3.怎么样把数据存放到一级缓存中

 *       利用session.get updatesave方法

 * 4.怎么样从一级缓存中获取数据

 *       利用session.get方法

 * 5.怎么样将一级缓存的数据同步到数据库

 *       只要是一个持久化状态的数据,那它一定在一级缓存中

 *       利用session.flush方法

 * 6.怎么样将数据库中的数据同步到一级缓存

 *       session.refresh方法:只能同步一个对象

 * 7.一级缓存的特性

 *       也叫session级别的缓存。

 *       session中存放私有数据。

 *       可以通过新建session和从当前线程中获取session来保证数据的安全性。

 * 8.从一级缓存中清除某个对象

 *       session.evcit方法、并且将一个对象从持久化状态转换成脱管状态。

 * 9.清空一级缓存中所以的数据

 *       session.clear方法

 */

 

session.save()方法

  1. 可以将一个对象变成持久化对象
  2. 将该对象保存在一级缓存中。

session.update()方法

  1. 能把一个对象转化为持久化状态
  2. 能把一个对象存放到一级缓存中。

session.flush()方法

  1. Hibernate内部会去检查session缓存中的所有对象
  1. 如果该对象是持久化对象,并且该对象的ID在数据库中有对应的记录,并且该对象的属性发生变化,则会自动发出update语句。如果对象属性没有发生变化,则不会发出update语句。
  2. 检查持久化对象中是否有关联的对象,如果有关联对象,并且设置了级联(cascade)操作,就会检查级联对象的id在数据库里有没有对应的记录,如果有则发出update语句,如果没有则发出insert语句
  3. 如果有维护关系的代码,则还会改变关系。
  4. 全部检查完成以后,就会发出sql语句,把一级缓存中的数据同步到数据库中。

session.refresh()方法

1.将一个对象对应的数据库数据重新更新到一级缓存中去

session.clear()方法

  1. 清空一级缓存中的所有数据

注意:存在一种情况,就是大量插入数据的时候,比如同时插入几十万行数据到Session的一级缓存中,就有可能会出现一个问题:缓存被占满了,提交数据的时候需要定时清空再提交。例子:

经过测试,当循环是10万的时候没问题,当循环变成100万的时候就会报错。

超出缓存了。

所以我们需要分段清理缓存。因为10万条能正常进行,所以我们就以10万条为一个单位,满了就先提交,再清除缓存,再加入10万条,再提交再清空,以此类推。所以如果是100万行数据的插入的代码如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值