程序笔记   发布时间:2022-07-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了mybatis-测试一级缓存大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

1.在mybatis-config.xml中加入日志

<settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

2.在UserMapper接口中添加方法

//根据id查询用户
User queryUserById(@Param("id") int id);

3.编写对应的 UserMapper.xml

<mapper namespace="com.lv.dao.UserMapper">
    <select id="queryUserById" resultType="user">
        select * from user where id=#{id}
    </select>
</mapper>

4.测试

@Test
public void test(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = mapper.queryUserById(1);
    System.out.println(user);
    System.out.println("==================================================");
    User user2 = mapper.queryUserById(1);
    System.out.println(user2);
    System.out.println(user == user2);
    sqlSession.close();
}

5.结果分析

mybatis-测试一级缓存

在同一个sqlSession中,查询两次相同的数据,却只查询了一次数据库,并且返回的两个User对象完全相同,证明第二次查询是查询了缓存中的数据.

6.一级缓存失效的四种情况

6.1sqlSession不同

6.1.1测试

@Test
public void test(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    SqlSession sqlSession1 = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    UserMapper mapper1 = sqlSession1.getMapper(UserMapper.class);
    User user = mapper.queryUserById(1);
    System.out.println(user);
    System.out.println("==================================================");
    User user1 = mapper1.queryUserById(1);
    System.out.println(user1);
    System.out.println(user == user1);
    sqlSession.close();
}

6.1.2结果分析

mybatis-测试一级缓存

查询了两次数据库,说明缓存失效了.

6.2查询条件不同

6.2.1测试

@Test
public void test(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = mapper.queryUserById(1);
    System.out.println(user);
    System.out.println("==================================================");
    User user1 = mapper.queryUserById(2);
    System.out.println(user1);
    System.out.println(user == user1);
    sqlSession.close();
}

6.2.2结果分析

mybatis-测试一级缓存

查询的两次数据是不同的,第二次要查询的数据缓存中并不存在,所以查询了两次数据库,并且返回的对象也是不同

6.3两次查询之间执行了增删改操作

6.3.1在UserMapper接口中添加一个修改方法

//修改用户
int updateUser(User user);

6.3.2编写对应的UserMapper.xml

<update id="updateUser" parameterType="user">
    update user set name = #{name},pwd = #{pwd} where id = #{id}
</update>

6.3.3测试

@Test
public void test(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = mapper.queryUserById(1);
    System.out.println(user);
    mapper.updateUser(new User(5,"11","22"));
    System.out.println("==================================================");
    User user1 = mapper.queryUserById(2);
    System.out.println(user1);
    System.out.println(user == user1);
    sqlSession.close();
}

6.3.4结果分析

mybatis-测试一级缓存

在两次查询的中间,对数据库进行了更新操作,导致第二次查询不使用缓存,而是重新查询了数据库,因为更新之后数据库的数据可能有变化

6.4手动清除一级缓存

6.4.1测试

@Test
public void test(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = mapper.queryUserById(1);
    System.out.println(user);
    //手动清除缓存
    sqlSession.clearCache();
    System.out.println("==================================================");
    User user1 = mapper.queryUserById(2);
    System.out.println(user1);
    System.out.println(user == user1);
    sqlSession.close();
}

6.4.2结果分析

mybatis-测试一级缓存

手动清除缓存之后,第二次查询要重新从数据库中查询

大佬总结

以上是大佬教程为你收集整理的mybatis-测试一级缓存全部内容,希望文章能够帮你解决mybatis-测试一级缓存所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:sql