Cache 什么是缓存?

数据存储到数据库,是从内存中以流的方式写进【输出】到数据库,其效率并不是很高

- 所以在内存中暂存一部分数据,可以不以流的方式读取,效率是非常高的【相对于流来说】

Hibernate的缓存特点:

- 一级缓存是默认开启的

- 使用范围在一个Session的作用域中【即:Session存在,缓存存在,Session释放,缓存释放】

- 一级缓存所存储的数据只能是持久状态的的【Java对象】数据

- 二级缓存目前已经技术淘汰,更好的解决方案是使用Redis【其实Mybatis也是差不多】

- 二级缓存需要手动配置,其作用域是整个工程的全局配置 【SessionFactory】


如何验证一级缓存的存在?

    @Test
public void query03(){
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); User user = session.get(User.class, 3);
System.out.println(user);
User user2 = session.get(User.class, 3);
System.out.println(user2); System.out.println(user == user2); transaction.commit();
session.close();
sessionFactory.close();
}

测试的结果可以看到,我们的SQL语句只输出了一遍,

但是我们两次返回的结果的对象是一样的,也就是说确实存在缓存,

两次获取的对象的地址才会是一样


一级缓存的执行过程

- 持久态会自动更新数据?

原理:


Hibernate 对 MySQL 的事务隔离配置:

MySQL默认的隔离级别:Repeatable Read 可重复读

我们可以在Hibernate的核心配置中设置事物的隔离级别

它们分别以状态码的形式设置:

- Status 1 读未提交

- Status 2 读已提交

- Status 4 可重复读

- Status 8 序列化


事务代码的规范

    @Test
public void transactionSpecs(){
SessionFactory sessionFactory = null;
Session session = null;
Transaction transaction = null; try{
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.openSession();
transaction = session.beginTransaction(); // 执行CRUD操作 ... transaction.commit();
} catch (Exception exception){
transaction.rollback(); // 发生异常,回滚事务
exception.printStackTrace(); // 打印异常信息
} finally {
// 资源释放 按先进后出的顺序释放,不要乱顺序释放 // 如果再妥善一点,就再加个非空判断
if (session != null) session.close(); // session是工厂获取的,所以先释放
if (sessionFactory != null )sessionFactory.close(); // 然后释放工厂对象
}
}

Hibernate绑定Session实例

保证在多线程的状态下,Session实例的唯一性

- Session类似JDBC中的Connection

- Web阶段的ThreadLocal

Hibernate已经帮助我们实现了Session实例和本地线程的绑定

如何配置?

1、在hibernate核心配置文件中设置

2、调用会话工厂实例的方法得到

配置:

获取Session实例调用会话工厂的getCurrentSession方法

    public static Session getCurrentSession(){
return sessionFactory.getCurrentSession();
}

使用本地线程绑定的Session不需要我们释放资源,线程结束自动释放Session

【Hibernate】05 缓存与MySQL事务隔离的更多相关文章

  1. [51CTO]新说MySQL事务隔离级别!

    新说MySQL事务隔离级别! 事务隔离级别这个问题,无论是校招还是社招,面试官都爱问!然而目前网上很多文章,说句实在话啊,我看了后我都怀疑作者弄懂没!本文所讲大部分内容,皆有官网作为佐证,因此对本文内 ...

  2. 查询mysql事务隔离级别

    查询mysql事务隔离级别 查询mysql事务隔离级别 分类: DB2011-11-26 13:12 2517人阅读 评论(0) 收藏 举报 mysqlsessionjava   1.查看当前会话隔离 ...

  3. MySQL事务隔离级别测试实例

    https://www.cnblogs.com/huanongying/p/7021555.html MySQL事务隔离级别 事务隔离级别 脏读 不可重复读 幻读 读未提交(read-uncommit ...

  4. Mysql事务-隔离级别

    MYSQL事务-隔离级别 事务是什么? 事务简言之就是一组SQL执行要么全部成功,要么全部失败.MYSQL的事务在存储引擎层实现. 事务都有ACID特性: 原子性(Atomicity):一个事务必须被 ...

  5. MySQL事务隔离级别 解决并发问题

    MySQL事务隔离级别 1. 脏读: 骗钱的手段, 两个窗口或线程分别调用数据库转账表,转账后未提交,对方查看到账后,rollback,实际钱没转. 演示方法: mysql默认的事务隔离级别为repe ...

  6. mysql事务隔离级别、脏读、幻读

    Mysql事务隔离级别本身很重要,再加上可能是因为各大公司面试必问的缘故,在博客中出现的概率非常高,但不幸的是,中国的技术博客要么是转载,要么是照抄,质量参差不齐,好多结论都是错的,对于心怀好奇之心想 ...

  7. mysql事务隔离级别与设置

    mysql数据库,当且仅当引擎是InnoDB,才支持事务: 1.隔离级别 事务的隔离级别分为:未提交读(read uncommitted).已提交读(read committed).可重复读(repe ...

  8. MySQL事务隔离级别(二)

    搞清楚MySQL事务隔离级别 首先创建一个表 account.创建表的过程略过(由于 InnoDB 存储引擎支持事务,所以将表的存储引擎设置为 InnoDB).表的结构如下: 为了说明问题,我们打开两 ...

  9. MySQL事务隔离级别(一)

    本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做 ...

  10. Mysql 事务隔离级别分析

    Mysql默认事务隔离级别是:REPEATABLE-READ --查询当前会话事务隔离级别mysql> select @@tx_isolation; +-----------------+ | ...

随机推荐

  1. wireshark常见使用技巧

    (1)wireshark根据报文不同字段排序 举例说明:现在有50000个1588 sync报文,我想根据报文的originalTimestamp(seconds)字段进行排序,该如何操作呢? 操作过 ...

  2. python中使用time.pref_counter()精确计时

    time.pref_counter()返回一个CPU级别的精确时间值,以秒为单位. 它通常用于测量某段程序的运行时间,因此取两次调用pref_counter()的差值才有意义. import time ...

  3. 如何简单实现suno-api账号保活

    本文由 ChatMoney团队出品 简介 之前的一个简易的项目suno-api.是使用cookie来获取suno-token发起请求的,之前写的简单,并没有做cookie保活,在运行一段时间后cook ...

  4. 内部网关协议RIP-路由选择协议

    路由信息协议RIP(Routing Information Protocol)是内部网关协议IGP中最先得到广泛使用的协议,其相关标准文档为RFC1058. 一.RIP基本工作原理 RIP要求自治系统 ...

  5. 如何解决Win10删除文件慢的办法

    问题:最近使用KMS激活了一些工具,今天删除不需要的文件时发现删除文件很慢很慢,删除一个几百k的文件都很慢. 解决办法通过控制面板→管理工具→服务→找到该进程并设为禁用就OK了.

  6. Externalizable接口实现序列化与反序列化

    Externalizable接口实现序列化与反序列化 package com.example.core.mydemo.java; import com.example.core.mydemo.json ...

  7. Java对称加解密算法AES

    Java对称加解密算法AES import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.String ...

  8. IDEA生成类和方法注释模板详细说明 绝对好用

    吐槽 今天心血来潮,将使用了很久的IDEA旗舰版卸载了,想换社区版用一段时间,毕竟社区版开源免费.精简不卡顿,如果够用的话以后就省去了破解的烦恼,而且可以紧跟官网使用最新版 旧的IDEA配置忘记保存了 ...

  9. Prometheus监控系统(二)Prometheus部署与使用

    1. Prometheus安装 官网:https://prometheus.io/ 下载地址:https://prometheus.io/download/ Prometheus基于Golang编写, ...

  10. Linux 内核:设备树 学习总结

    背景 之前写过设备树DTS 学习:学习总结(应用篇)的学习,但是是偏向于应用:这次针对了设备树的架构以及在驱动中的使用流程做了补充. 基于 Linux 内核 v4.14. 目录 标题 说明 设备树:d ...