ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

二级缓存

2022-01-30 21:31:49  阅读:135  来源: 互联网

标签:缓存 userMapper sqlSession 二级缓存 user println


二级缓存作用域在Mapper中。当一级缓存失效后,一级缓存中的数据会转移到二级缓存中

1.在Mybatis中开启二级缓存

<setting name="cacheEnabled" value="true"/><!--开启二级缓存-->

2.在Mapper.xml中

<cache/><!--在Mapper中开启二级缓存-->

3.测试

    public void getUserById (){
        SqlSession sqlSession = sqlSessionFactory.getsqlSession();

        userMapper mapper = sqlSession.getMapper(userMapper.class);


        user user1 = mapper.getUserById(2);//查找用户
        System.out.println(user1);
        sqlSession.close();
        System.out.println("=========");
        SqlSession sqlSession1 = sqlSessionFactory.getsqlSession();

        userMapper mapper1 = sqlSession1.getMapper(userMapper.class);
        user user2 = mapper1.getUserById(2);
        System.out.println(user2);
        sqlSession1.close();

    }

4.结果

Caused by: java.io.NotSerializableException: com.Google.pojo.user

解决方法
在实体类中继承序列化

public class user implements Serializable {
    private int id;
    private String name;
    private String pwd;
}

结果

Opening JDBC Connection
Created connection 1304589447.
Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@4dc27487]
==>  Preparing: select * from user where id=? 
==> Parameters: 2(Integer)
<==    Columns: id, name, pwd
<==        Row: 2, aaa, bbb
<==      Total: 1
user(id=2, name=aaa, pwd=bbb)
Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@4dc27487]
Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@4dc27487]
Returned connection 1304589447 to pool.
=========
Cache Hit Ratio [com.Google.mapper.userMapper]: 0.5
user(id=2, name=aaa, pwd=bbb)

这里可以看到,第一个sqlSession关闭后,缓存给了二级缓存,然后第二个sqlSession直接得到了来自缓存中的数据。这就是二级缓存(补充了一级缓存的缺点)

标签:缓存,userMapper,sqlSession,二级缓存,user,println
来源: https://www.cnblogs.com/luoking/p/15857625.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有