一级缓存
Mybatis的一级缓存在session里
只要通过session查过的数据,都会放在session上,下一次再查询相同id的数据,都直接从缓存中取出来
Category c1 = session.selectOne("getCategory", 1);
System.out.println(c1);
Category c2 = session.selectOne("getCategory", 1);
System.out.println(c2);
由于都是同一个session,只执行一次查询
二级缓存
Mybatis二级缓存是SessionFactory,如果两次查询基于同一个SessionFactory,那么就从二级缓存中取数据
Category c1 = session.selectOne("getCategory", 1);
System.out.println(c1);
Category c2 = session.selectOne("getCategory", 1);
System.out.println(c2);
session.commit();
session.close();
SqlSession session2 = sqlSessionFactory.openSession();
Category c3 = session2.selectOne("getCategory", 1);
System.out.println(c3);
session2.commit();
session2.close();
两次查询基于同一个SessionFactory,执行一次查询
注意要实现二级缓存
在xml中添加<cache/>
<mapper namespace="xxx">
<cache/>
并且类要实现序列化接口
public class Category implements Serializable