当前位置: 首页 > >

Mybatis缓存(一级缓存、二级缓存和自定义缓存)

发布时间:

简要说明:


1、Mybatis缓存分为一级缓存和二级缓存。在没有配置的情况下,默认开启一级缓存,不开启二级缓存。


2、如果配置开启二级缓存,会先查询二级缓存,没有的话再查询一级缓存。(原理)


(如果是springboot项目,默认mybatis.configuration.cache-enabled的值是true,也就是默认开启Mybatis的二级缓存的,但也需要相应的配置才能使用二级缓存)


?


一级缓存(同一个SqlSession)


一级缓存具有和sqlsession一样的生命周期,SqlSession相当于一个JDBC的Connection对象,在一次请求事务会话后,我们将其关闭。


import com.boot.mybatis.dao.UserMapper;
import com.boot.mybatis.po.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;


/**
* @author river
* 2020/2/11
*/
@SpringBootTest
class MybatisCacheTest {

@Autowired
SqlSessionFactory sqlSessionFactory;

@Test
void theSameSqlSession() {
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {//在try()中的资源会自动释放
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//查询结果会缓存起来,如果不希望缓存这个查询结果,可以在