Hibernate的一级缓存以及事务操作

2017-01-13 15:04:57来源:csdn作者:leaf_130人点击

第七城市
Hibernate的一级缓存什么是缓存

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


Hibernate缓存

1 hibernate框架中提供很多优化方式,hibernate的缓存就是一个优化方式 2 hibernate缓存特点: 第一类 hibernate的一级缓存 (1)hibernate的一级缓存默认打开的 (2)hibernate的一级缓存使用范围,是session范围,从session创建到session关闭范围 (3)hibernate的一级缓存中,存储数据必须 持久态数据 第二类 hibernate的二级缓存 (1)目前已经不使用了,替代技术 redis (2)二级缓存默认不是打开的,需要配置 (3)二级缓存使用范围,是sessionFactory范围


验证一级缓存存在

1 验证方式 (1)首先根据uid=1查询,返回对象 (2)其次再根据uid=1查询,返回对象


容易看出,第一步执行get方法之后,发送sql语句查询数据库 第二个执行get方法之后,没有发送sql语句,查询一级缓存内容


Hibernate一级缓存执行过程


Hibernate一级缓存特性

1 持久态自动更新数据库



Hibernate事务操作事务相关概念

1 什么是事务


事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。


2 事务特性

原子性(atomicity) 一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency) 事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation) 一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability) 持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

3 不考虑隔离性产生问题


(1)脏读 (2)不可重复读 (3)虚读


4 设置事务隔离级别 (1)mysql默认隔离级别 repeatable read

Hibernate事务代码规范写法

1 代码结构 try { 开启事务 提交事务 }catch() { 回滚事务 }finally { 关闭 }


@Test
public void testTx() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
//开启事务
tx = session.beginTransaction();//添加
User user = new User();
user.setUsername("小叶子");
user.setPassword("150");
user.setAddress("中国");session.save(user);int i = 10/0;
//提交事务
tx.commit();
}catch(Exception e) {
e.printStackTrace();
//回滚事务
tx.rollback();
}finally {
//关闭操作
session.close();
sessionFactory.close();
}
}Hibernate绑定session

1 session类似于jdbc的connection,之前web阶段学过 ThreadLocal 2 帮实现与本地线程绑定session


3 获取与本地线程session (1)在hibernate核心配置文件中配置



(2)调用sessionFactory里面的方法得到



4 获取与本地线程绑定session时候,关闭session报错,不需要手动关闭了


第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台