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. .Net Core 部署IIS

    我相信很多人看了其他的贴子,都没有成功部署,因为里面有很多暗坑.接下来博主就一步一步给大家讲明白,带领大家部署 先基本的发布 操作:右击web项目的<发布>按钮.选文件 配置发布属性    ...

  2. 自动化搭建专属 AI 绘图服务

    通义万相AIGC技术已经比较成熟,结合阿里云的计算和存储产品可以方便的搭建自己专属的 AI 绘图服务.例如<创意加速器:AI 绘画创作>这个解决方案,利用阿里自研的通义万相AIGC技术在  ...

  3. 解决java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone

    错误描述: 使用JDBC连接数据库是产生错误 应该是数据库时区问题,在url配置时设置serverTimezone = GMT即可 url = "jdbc:mysql://localhost ...

  4. SonarQube代码质量扫描工具

    1.什么是SonarQube 既然是学习devops 运维流水线构建 开发 ↓ 测试 ↓ 运维 华为devops软件开发流水线文档 https://support.huaweicloud.com/re ...

  5. MySQL数据库开发(2)

    单表查询 单表查询即对单个表进行查询. 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY fie ...

  6. mysql ON DUPLICATE KEY UPDATE 演示

    <e>查询:INSERT INTO member_test(mem_no,flag)VALUE('111','1') 错误代码: 1062Duplicate entry '111' for ...

  7. redisTemplate缓存方法template code

    import com.alibaba.fastjson.JSONObject; @Autowired private RedisTemplate redisTemplate; String PREFI ...

  8. discuz论坛个人空间自定义css样式

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` discuz论坛个人空间自定义css样式 日期:2020- ...

  9. electron 安装遇到的各种奇怪问题解决

    在国内,electron经常遇到各种问题,导致无法安装 在安装electron官网的快速入门步骤,到npx electron-forge import的时候,遇到了各种问题 npm install - ...

  10. echarts 各种特效图

    饼图标签展示数值 配置项: option = { title: { text: '项目时间分布', left: 'center' }, tooltip: { trigger: 'item', form ...