mybatis 的两级缓存(示例)

1.创建 Mapper

@Mapper
public interface UserMapper {

    @Select("SELECT * FROM user WHERE name = #{name} limit 1")
    User selectOne(@Param("name") String name);

    @Select("SELECT * FROM user WHERE age = #{age}")
    List<User> selectList(@Param("age") Integer age);

    @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")
    int insert(@Param("name") String name, @Param("age") Integer age);
}

测试数据

userMapper.insert("贝贝", 23);
userMapper.insert("琪琪", 23);
userMapper.insert("二狗", 23);

示例1:

userMapper.selectOne("贝贝");
userMapper.selectOne("贝贝");
userMapper.selectList(23);

总共发出了 3条请求,并且每个请求都会创建一个新的 sqlSession

示例2:

try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
    UserMapper userMapper2 = sqlSession.getMapper(UserMapper.class);
    userMapper2.selectOne("贝贝");
    userMapper2.selectOne("贝贝");
    userMapper2.selectList(23);
    sqlSession.commit();
}

公用一个 sqlSession,只发了 2条请求,其中第2个语句没有发请求(利用了 mybatis 一级缓存)

 示例3:

@Transactional
public void query() {
    userMapper.selectOne("贝贝");
    userMapper.selectOne("贝贝");
    userMapper.selectList(23);
}

类似于示例2,只创建一个 sqlSession,并且第 2个语句依然直接使用了缓存

233

猜你喜欢

转载自www.cnblogs.com/lemos/p/12099227.html