Hibernate的缓存_一级缓存

什么是缓存

数据存到数据库里面,数据库本身是文件系统,使用流方式操作文件效率不是很高。把数据库存放到内存里面,不需要流方式,可以直接读取内存中的数据,提高了读取效率。

Hibernate缓存

hibernate缓存是一种优化方式。

1、hibernate缓存的一级缓存:

①hibernate一级缓存是默认打开的。

②hibernate一级缓存有使用范围,session范围(session的创建和关闭范围)。

③hibernate一级缓存中存储数据必须是持久态数据。

2、根据id=6查询,第二次再根据id=6查询。

User user1 = session.get(User.class,6);

User user2 = session.get(User.class,6);

第一次执行查询向数据库发出sql语句,若第二次执行和第一次查询相同的内容,第二次没有发出sql,查询的是一级缓存的内容。

首先,查询一级缓存:

  ①一级缓存发现没有数据,才去查数据库,返回user对象(持久态)。其次,把user对象放到一级缓存中(把user的对象的所有值存放到缓存中,给这个存放user对象值的空间称为id=6)。

  ②一级缓存发现相同数据,直接返回(缓存中发现有id=6,直接返回)。

3、一级缓存的特性:

①持久态会自动更新数据库。例如:user为持久态,没有session.update(user)时也可以在数据库修改。

User user = session.get(User.class,6);
user.setUsername("sam");
//session.update(user);
ts.commit();

原理:

a.当创建session时会有一级缓存,对应一级缓存创建个快照区(副本),把返回的user持久态对象放到一级缓存中,同时把user对象放到一级缓存对应的快照区里面。

b.当修改user持久态对象里面的值时,同时修改一级缓存中的内容,但是不会修改一级缓存快照区的内容。

c.提交事务的时候,比较以及缓存和对应快照区内容是否相同,

   若不同,把一级缓存内容更新到数据库里面。

   若相同,不会更新到数据库里面

4、hibernate绑定session

session类似于jdbc的connection,实现了与本地线程绑定的session。

获取与本地线程绑定的session,(获取与本地线程绑定的session时,关闭session不会报错,线程结束,session会自动关闭,不需要手动关闭):

①在hibernate核心配置文件中配置:thread:session对象的生命周期与本地线程绑定。

<property name="hibernate.crrent_session_context_class">thread</property>

②用sessionFactory得到:
sessionFactory.getCurrentSess();

5、hibernate事务操作

一组操作,要么一起成功,要么一起失败。

事务的特性:

原子性Atomic:表示将事务中所做的操作捆绑成一个不可分割的单元,即对事务所进行的操作,要么全部执行,要么全部不执行。
一致性Consistency:表示事物完成时,必须使所有的数据都保存一致状态。
隔离性Isolation:指一个事务执行不能被其它事务干扰,各个事务之间互不干扰。
持久性Durability:一个事务一旦提交,对数据库中数据的改变是永久性的。提交后的其它操作或故障不会对其有影响。

事务代码书写规范:

try{

  开启事务;

  提交事务

}catch(){

  回滚事务;

}finally{

  关闭;

}

不考虑隔离性产生的问题脏读、不可重复读、虚读。

脏读:一个事务读到另一事务未提交的更新数据。

虚读:一个事务读到另一事务已提交的新插入的数据。

不可重复读:一个事务读到另一事务已提交的更新数据。

设置事务隔离级别mysql默认隔离级别:repeatable read。

<session-factory>

<!-- 设置数据库的事务隔离级别 -->

<property name="hibernate.connection.isolation">2</property>

</session-factory>

数据库隔离级别(由低到高)

读未提交(Read Uncommitted)对应hibernate配置值 1

读已提交(Read Committed)对应hibernate配置值 2

可重复读(Repeatable Read)对应hibernate配置值 4

可串行化(Serializable)对应hibernate配置值 8




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值