多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
二级缓存是多个session间的数据共享 1. 修改SqlMapConfig.xml配置文件 ~~~ <settings> <!-- 开启二级缓存 --> <setting name="cacheEnabled" value="true"/> </settings> ~~~ 2. 修改mapper映射文件 ~~~ 2. Mapper.xml <cache></cache> ~~~ 3. 对象必须实现Serializable接口 4. 测试样例 ~~~ SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); SqlSession sqlSession2 = sqlSessionFactory.openSession(); SuserMapper suserMapper = sqlSession.getMapper(SuserMapper.class); SuserMapper suserMapper2 = sqlSession2.getMapper(SuserMapper.class); suserMapper.getAllUsers();//发送SQL语句 suserMapper2.getAllUsers();//不发送SQL语句 sqlSession.commit();//必须commit, 其他session才能共享数据 suserMapper2.getAllUsers();//不发送SQL语句 ~~~ useCache 配置 在 statement 中设置 useCache=false 可以禁用当前 select 语句的二级缓存,即每次查询都会发出sql去查询,默认情况是true,即该sql使用二级缓存。 ~~~ <select id="findUserById" parameterType="int" resultType="user" useCache="false"> ~~~ 总结:针对每次查询都需要最新的数据sql,要设置成useCache=false,禁用二级缓存。 刷新缓存(清空缓存) 在mapper的同一个namespace中,如果有其它insert、update、delete操作数据后需要刷新缓存,如果不执行刷新缓存会出现脏读。 设置statement配置中的flushCache=”true” 属性,默认情况下为true即刷新缓存,如果改成false则不会刷新。使用缓存时如果手动修改数据库表中的查询数据会出现脏读。 如下: ~~~ <insert id="insetrUser" parameterType="cn.zhisheng.mybatis.po.User" flushCache="true"> ~~~ 一般下执行完commit操作都需要刷新缓存,flushCache=true表示刷新缓存,这样可以避免数据库脏读。