mybatis默认为一级缓存
@Test
public void findOrdersWithProduct(){
SqlSession sqlSession = MybatisUtils.getSession();
OrdersMapper mapper = sqlSession.getMapper(OrdersMapper.class);
List<Orders> ordersWithProduct = mapper.findOrdersWithProduct(1);
for (Orders orders : ordersWithProduct) {
System.out.println(orders);
}
System.out.println("=============================");
List<Orders> ordersWithProduct2 = mapper.findOrdersWithProduct(1);
for (Orders orders : ordersWithProduct2) {
System.out.println(orders);
}
System.out.println(ordersWithProduct == ordersWithProduct2);
sqlSession.close();
}
两次查询只调用了一次查询的SQL
二级缓存:
首先在配置文件中开启全局缓存
<settings>
<!--显示的开启全局缓存-->
<setting name="cacheEnabled" value="true"/>
</settings>
然后在要使用二级缓存的Mapper中开启
<!--在当前mapper.xml中使用二级缓存-->
<cache eviction="FIFO"
flushInterval="60000"
size="512"
readOnly="true"/>
测试:
@Test
public void findOrdersWithProduct(){
SqlSession sqlSession1 = MybatisUtils.getSession();
SqlSession sqlSession2 = MybatisUtils.getSession();
OrdersMapper mapper = sqlSession1.getMapper(OrdersMapper.class);
List<Orders> ordersWithProduct = mapper.findOrdersWithProduct(1);
for (Orders orders : ordersWithProduct) {
System.out.println(orders);
}
sqlSession1.close();
System.out.println("=============================");
OrdersMapper mapper2 = sqlSession2.getMapper(OrdersMapper.class);
List<Orders> ordersWithProduct2 = mapper2.findOrdersWithProduct(1);
for (Orders orders : ordersWithProduct2) {
System.out.println(orders);
}
System.out.println(ordersWithProduct == ordersWithProduct2);
sqlSession2.close();
}
会发现SQL语句只执行了一次