了解:
- 数据库中若执行了单个增删改操作,会自动为其开始事务;若在service层为了某个方法开始了事务管理,(通过Spring的声明式事务管理),则数据库中不再为操作开启事务,因为业务层的事务管理就是数据库中的事务管理。
- 持久层访问数据库时,每次访问均需要sqlSession对象,有了该对象才能访问数据库,而sqlSession对象是由mybatis中的sqlSessionFactory来提供的,这里使用了工厂模式,每次访问数据时,都会从该工厂获取一个sqlSession对象
myBatis一级缓存:
一级缓存是sqlsession级别的缓存,同一个事务共享一个sqlsession对象,在事务中若执行查询操作,会将查询到的数据缓存到以及缓存中,后续若再次查询相同的数据,直接从缓存中获取;
查询的操作顺序:
先去一级缓存中查,若有,直接返回,若无,再去数据库中查
注:若事务在查询后执行了update(delete,inster)操作,此时清空一级缓存
一级缓存的意义:
提高了查询效率;
(对数据库IO操作ms级别;对内存IO操作ns级别)
二级缓存:
是mapper/namespace级别的缓存(默认关闭的)
必须通过设置来开启:
1.在mybatis的配置文件中添加属性:cachable:true
2.在想开启二级缓存的mapper的xml文件中添加一组标签(添加为mapper的子标签),
<cache></cache>
<mapper namespace="">
<cache/>
</mapper>
二级缓存可以实现跨sqlsession的数据共享,但是若操作该mapper的多个sqlsession中,有一个执行update操作,则立即清空二级缓存
一级二级都存在时,事务中的查询顺序:二级缓存--------.>一级缓存-------------->数据库
本文详细介绍了MyBatis的事务管理和缓存机制。在Spring的声明式事务管理下,数据库操作由业务层事务管理。MyBatis的一级缓存是SqlSession级别的,提高查询效率,同一事务中多次查询相同数据会从缓存获取。一级缓存会在更新操作后清除。二级缓存则是mapper级别的,可跨SqlSession共享数据,但在更新操作后会被清空。查询时,会先查找二级缓存,再查找一级缓存,最后才查询数据库。二级缓存需在配置文件和mapper中开启。
1万+

被折叠的 条评论
为什么被折叠?



