前言
最近还是在弄片刻的二次版本,在写后端服务的时候,因为考虑的比较多,一是想多学习学习其他的技术,二是想巩固现在已经会的技术,所以在写的时候束手束脚的,对于很多以前用的东西理解的都不是很透彻,导致了原本有简便的方法解决问题,现在却用了一种很麻烦的解决办法来解决问题。
所以我又给自己挖了一个坑。
简介
MyBatis 在内部提供了查询缓存的机制,用于减轻数据库压力,提高数据库性能。
MyBatis 可以提供一级缓存和二级缓存,一级缓存的主要作用域在Sqlsession,而二级缓存的作用域在Mapper 。
一级缓存的作用域在SqlSession,在操作数据库时需要构造SqlSession 对象,在对象中有一个数据结构用于存储缓存数据,不同的SqlSession 之间的缓存数据区域是互不影响。
Mybatis 默认开启一级缓存。
一级缓存在同一个SqlSession 下执行两次相同的sql 语句,第一次执行sql 语句会将从数据库查询到的数据写入到缓存中去,而第二次会直接从缓存中去取数据,不再去数据库查询数据,从而提高查询效率。
从上述德尔描述中,大致能明白在SqlSession 中进行sql 语句执行,遇到插入、更新、删除操作时,一级缓存中的数据会被删除,直到下一次查询,数据才会重新被放到缓存中。
二级缓存的作用域在Mapper ,多个SqlSession 去操作同一个Mapper 中的sql 语句,多个SqlSession 操作数据库会获得二级缓存,而SqlSession 之间是可以共享二级缓存的,也就是说二级缓存是跨SqlSession的。
MyBatis 默认不开启二级缓存。