一、一级缓存
通过Mybatis自带缓存,且默认开启一级缓存,不开启二级,当使用同样的sqlsession对象查询相同数据时,只有第一次查询会向数据库发送查询语句,并将查询结果放入session缓存中,之后查询相同数据时,直接在缓存中取用即可。
commit可以清除缓存。
二、当二个或多个sqlsession对象查询相同数据时,那么可以开启二级缓存。
在conf.xml文件中的开启日志setting标签下,添加标签<setting name="cacheEnabled" value="true">
并在想要查询的数据库操作语句的mapper.xml文件中添加声明开启二级缓存。
<cache/>即可。
然后运行,会出现序列化问题。
然后我们将会涉及到的实体类全部序列化,在实体类添加接口。
implements Serializable。
之后在测试类中:
public static void queryPerson2_yijihuancun2() throws IOException{ //加载配置文件 Reader reader = Resources.getResourceAsReader("conf.xml"); //SqlsessionFactory -- conection SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader); SqlSession session = sessionFactory.openSession(); personMapper personmapper = session.getMapper(personMapper.class); Person person = personmapper.queryPersonById(1); session.close(); //第二次查询 SqlSession session2 = sessionFactory.openSession(); personMapper personmapper2 = session2.getMapper(personMapper.class); Person person2 = personmapper2.queryPersonById(1); System.out.println(person.toString()+","+person2.toString()); session2.close(); }
只查了一次。再次减少了对数据库的蹂躏。- .-
注意:二级缓存的适用范围是同一个namespace。