一级缓存java
public static SqlSession getSqlSession() { String resource = "mybatis-config.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream(resource); } catch (IOException e) { e.printStackTrace(); } SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); return sqlSession; }
建立一个SqlSession对象,经过这个对象执行数据库操做,调用clearCache,close 方法会清空Cache缓存,执行insert,update,delete方法也会清空缓存sql
二级缓存数据库
对应的bean实例须要实现Serializable接口,实例必须是可序列化的缓存
须要在对于的xml文件里面配置<cache/>mybatis
config.xml文件setting标签中使用cacheEnabled value 设置为true(默认开启)app
select标签 加上 useCache="true"(默认开启)ui
若是使用注解方式,在Dao的类名上添加@CacheNamespace (blocking=true)注解spa
properties文件中添加配置开启sql日志 logging.level.com.example.demo=debugdebug
启动项目,执行查询操做,日志中只显示一次查询记录日志
[nio-8079-exec-1] com.example.demo.mapper.CategoryMapper : Cache Hit Ratio [com.example.demo.mapper.CategoryMapper]: 0.0 [nio-8079-exec-1] c.e.d.m.CategoryMapper.getAllCategories : ==> Preparing: select * from category [nio-8079-exec-1] c.e.d.m.CategoryMapper.getAllCategories : ==> Parameters: [nio-8079-exec-1] c.e.d.m.CategoryMapper.getAllCategories : <== Total: 2 [nio-8079-exec-2] com.example.demo.mapper.CategoryMapper : Cache Hit Ratio [com.example.demo.mapper.CategoryMapper]: 0.5