spring+mybatis中两次相同条件查询时 session一级缓存与数据库隔离级别需要注意的点

Posted hsq666666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring+mybatis中两次相同条件查询时 session一级缓存与数据库隔离级别需要注意的点相关的知识,希望对你有一定的参考价值。

@Override
@Transactional(propagation = Propagation.REQUIRED,isolation= Isolation.REPEATABLE_READ)
public User1 hsq_test_read(Integer id) {
User1 user1 = user1Mapper.selectByPrimaryKey(id);

User1 update =new User1();
update.setId(id);
update.setName("uuuuuuu");
int k=9;
//两次查询是否有更新
user1Mapper.updateByPrimaryKey(update);
//update ing debug
int i=9;

User1 user2 = user1Mapper.selectByPrimaryKey(id);
return user2;

//spring + mybatis 中
// 不开启flushCache="true"时, 第二次查询 直接用第一次查的缓存,mybatis session会话 (两次之间没更新操作) isolation= Isolation.READ_COMMITTED,isolation= Isolation.REPEATABLE_READ 一样
// 特别注意 https://blog.csdn.net/oqq0147/article/details/83149117
// 不开启flushCache="true"时, 当2次查询中间有更新操作时,查询的结果是更新后的结果 isolation= Isolation.READ_COMMITTED,isolation= Isolation.REPEATABLE_READ 一样


// 开启 flushCache="true"时, 第二次查询与第一次查询(两次之间没更新操作) isolation= Isolation.REPEATABLE_READ 读取的内容一样因为可重读,
// isolation= Isolation.READ_COMMITTED 读取的内容不一样,读已提交
// 开启 flushCache="true"时, 当2次查询中间有更新操作时,查询的结果是更新后的结果
// isolation= Isolation.READ_COMMITTED,isolation= Isolation.REPEATABLE_READ 一样
// isolation= Isolation.REPEATABLE_READ 读取的是更新后的结果 事务1 read-》update ing-->read 这时候事务2
                                                                                                                                            更新同一条sql是不能更新的 是阻塞的 
}

 

以上是关于spring+mybatis中两次相同条件查询时 session一级缓存与数据库隔离级别需要注意的点的主要内容,如果未能解决你的问题,请参考以下文章

SQL 查询优化:在事实表中两次使用相同指标的最佳方法是啥?

Spring Mongo 条件查询两次相同的字段

mybatis缓存

MyBatis缓存通俗易懂

如何在同一列或不同列的一个sql语句中两次使用'BETWEEN'条件

如何防止在node.js中两次调用相同URL的获取