一 MyBatis缓存
/*
1. MyBatis缓存的分类
2. 一级缓存: 一级缓存缓存的是SQL语句
3. 二级缓存:二级缓存缓存的是结果集对象
*/
1. MyBatis缓存的分类
1>一级缓存:一级缓存缓存的是SQL语句
2>二级缓存:二级缓存缓存的是结果集对象
2. 一级缓存: 一级缓存缓存的是SQL语句
/*
1>概念的内涵
2>获得jack的List<User> users:应用举例
3>获得jack的List<User> users:解释说明
*/
1>概念的内涵
一级缓存缓存的是SQL语句.只有第一个语句提交才能缓存。当条件内容发生
变化,仍然可以使用缓存。
2>获得jack的List<User> users:应用举例
List<User> users = sqlSession.selectList("com.my.mapper.UserMapper.getUser",
"jack");
System.out.println(users);
//sqlSession.commit(); //①
List<User> users2 = sqlSession.selectList("com.my.mapper.UserMapper.getUser",
"jack");//② 更换为admin,仍然可以缓存
System.out.println(users);
3>获得jack的List<User> users:解释说明
输出只发起一次SQL语句,如果我们把②出的参数jack改为admin,发现还是只发
起一次SQL语句,但是会设置不同参数,如果把①处去掉注释(语句提交),会发现
不会有缓存。
3. 二级缓存:二级缓存缓存的是结果集对象
/*
1>概念的内涵
2>启用二级缓存的配置
3>获得jack的List<User> users:应用举例
4>获得jack的List<User> users:解释说明
*/
1>概念的内涵
二级缓存缓存的是结果集对象。
2>启用二级缓存的配置
/*
<1>MyBatis的全局cache配置
<2>在Mapper XML文件中设置缓存,默认情况下是没有开启缓存的
<3>在Mapper XML文件配置支持cache后,如果需要对个别查询进行调整,
可以单独设置cache
*/
<1>MyBatis的全局cache配置
<settings>
<setting name="cacheEnabled" value="true"/>
<2>在Mapper XML文件中设置缓存,默认情况下是没有开启缓存的
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
注意事项:readOnly设为true,默认是false,表示结果集对象需要被序列化
<3>在Mapper XML文件配置支持cache后,如果需要对个别查询进行调整,
可以单独设置cache
<select id="selectAll" resultType="Emp" useCache="true">
3>获得jack的List<User> users:应用举例
List<User> users = sqlSession.selectList("com.my.mapper.UserMapper.getUser",
"jack");
System.out.println(users);
//sqlSession.commit(); //①
List<User> users2 = sqlSession.selectList("com.my.mapper.UserMapper.getUser",
"jack");//② 更换为admin,仍然可以缓存
System.out.println(users);
4>获得jack的List<User> users:解释说明
<1>打开①处注释(执行提交),②处仍然使用jack,发现结果只执行了一次SQL语句
<2>打开①处注释(执行提交), 如果把②处改为admin,执行了2次SQL语句,这说明
二级缓存是缓存结果集对象的