package com.cy.test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.cy.pj.goods.dao.GoodsDao;
import com.cy.pj.goods.pojo.Goods;
public class MyTestCache01 extends TestBaseWithJava{
@Test
public void testFirstLevelCache() {
SqlSession session=sqlSessionFactory.openSession();
GoodsDao dao=session.getMapper(GoodsDao.class);
List<Goods> list=dao.findPageObjects(0, 3);
session.commit();
list=dao.findPageObjects(0,3);
System.out.println("list.size="+list.size());
for(Goods g:list) {
System.out.println(g);
}
session.close();
}
@Test
public void testFirstLevelCache1() {
SqlSession session=sqlSessionFactory.openSession();
GoodsDao dao=session.getMapper(GoodsDao.class);
List<Goods> list=dao.findPageObjects(0, 3);
list=dao.findPageObjects(0,3);
System.out.println("list.size="+list.size());
for(Goods g:list) {
System.out.println(g);
}
session.commit();
session.close();
}
@Test
public void testSecondLevelCache() {
SqlSession session1=sqlSessionFactory.openSession();
SqlSession session2=sqlSessionFactory.openSession();
GoodsDao dao1=session1.getMapper(GoodsDao.class);
GoodsDao dao2=session2.getMapper(GoodsDao.class);
List<Goods> list1=dao1.findPageObjects(0, 3);
session1.commit();
List<Goods> list2=dao2.findPageObjects(0, 3);
session2.commit();
session1.close();
session2.close();
}
}
断点跟踪可以清晰的显示出cache缓存的运行顺序
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cy.pj.goods.dao.GoodsDao">
<cache eviction="fifo" readOnly="true" > </cache>
<!-- readonly是设置是否要存储序列化的对象,因为cache也是内存所以也可以存非序列化的对象-->
<!--eviction可设置算法选项为FIFO和LRU-->
<!--flushInterval=""设置刷新时间-->
<!--size=""设置可以存的引用(对象)的数量-->
<!-- 基于多个id进行删除操作 方法1 -->
<!--
<delete id="deleteObjects">
delete from tb_goods
where id in
<foreach collection="array"
open="("
close=")"
item="id"
separator=",">
#{id}
</foreach>
</delete>
-->
<!-- 基于多个id进行删除操作:方法2 -->
<delete id="deleteObjects">
delete from tb_goods
<where>
<foreach collection="array"
item="id">
or id=#{id}
</foreach>
</where>
</delete>
<select id="findPageObjects"
resultType="com.cy.pj.goods.pojo.Goods">
select id,name,remark,createdTime
from tb_goods
limit #{startIndex},#{pageSize}
</select>
<select id="selectById"
resultType="com.cy.pj.goods.pojo.Goods">
select id,name,remark,createdTime
from tb_goods
where id=#{id}
</select>
<delete id="deleteObject">
delete from tb_goods
where id=#{id}
</delete>
<!-- 映射文件中每个元素都会封装一个MappedStatement对象 -->
<insert id="insertObject"
parameterType="com.cy.pj.goods.pojo.Goods">
insert into tb_goods
(id,name,remark,createdTime)
values
(#{id},#{name},#{remark},now())
</insert>
<!-- 映射文件中每个元素都会封装一个MappedStatement对象 -->
<update id="updateObject">
update tb_goods
set name=#{name},
remark=#{remark}
where id=#{id}
</update>
</mapper>