• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
dielianhua
博客园    首页    新随笔    联系   管理    订阅  订阅

Hibernate5.x缓存机制和事务处理

一、Hibernate一级缓存

1、什么是缓存

 数据存到数据库里面,数据库本身是文件系统,使用流方式操作文件效率不是很高。

(1)把数据存到内存里面,不需要使用流方式,可以直接读取内存中数据

(2)把数据放到内存中,提供读取效率

 2、Hibernate一级缓存特点

(1)hibernate的一级缓存默认打开的

(2)hibernate的一级缓存使用范围,是session范围,从session创建到session关闭范围

(3)hibernate的一级缓存中,存储数据必须持久态数据

 3、Hibernate一级缓存特性和作用

  特性:持久态自动更新数据库

  作用:减少对数据库的访问次数

 4、验证一级缓存

1 验证方式

(1)首先根据uid=1查询,返回对象

(2)其次再根据uid=1查询,返回对象

第一步执行get方法之后,发送sql语句查询数据库

第二个执行get方法之后,没有发送sql语句,查询一级缓存内容

5、一级缓存执行过程

二、Hibernate二级缓存

(1)目前已经不使用了,替代技术 Redis

(2)二级缓存默认不是打开的,需要配置

(3)二级缓存使用范围,是sessionFactory范围

三、Hibernate事务处理

1、事务的4个特性:原子性、一致性、隔离性、持久性

 ① 原子性:对事务的增删改查操作,要么全部执行,要么全部不执行。 

 ② 一致性:事务完成时,必须使所有的数据都保持一致状态。 

 ③ 隔离性:一个事务的执行不能被其他事务干扰。

 ④ 持久性:一个事务一旦提交,数据库中的数据改变是永久的。

 2、事务的并发问题:脏读、不可重复读、虚读/幻读(insert)

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

 ② 不可重复读:一个事务读到了另一个事务已经提交的update的数据,导致在同一个事务中的多次查询结果不一致。

3、事务的隔离级别

 MySQL:READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ(默认)、SERIALIZABLE

 ORACLE:READ_COMMITTED(默认)、REPEATABLE_READ、SERIALIZABLE

4、事务代码规范

   @Test
	public void testTx() {
		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction tx = null;
		try {
			sessionFactory = DUtils.getSessionFactory();
			session = sessionFactory.openSession();
			//开启事务
			tx = session.beginTransaction();
			//增删改查方法编写的位置
			//添加
			User user = new User();
			user.setUsername("王五");
			user.setPassword("1234");
			user.setAddress("中国");
			session.save(user);
			//提交事务
			tx.commit();
		}catch(Exception e) {
			e.printStackTrace();
			//回滚事务
			tx.rollback();
		} finally {
			session.close();
			sessionFactory.close();
		}
	}
posted @ 2017-09-24 11:20  dielianhua  阅读(523)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3