版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012796085/article/details/85693862
Dao接口
@Mapper
public interface Ky_s_ship_miss_dtlDao {
List<Map<String,Object>> list(Map<String,Object> map);
}
mapper.xml
<?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.bootdo.witdbct.miss.dao.Ky_s_ship_miss_dtlDao">
<!--该xml文件下所有select都使用缓存-->
<cache/>
<!--结果集如果返回实体,model 类要实现 java Serializable 接口-->
<select id="list" resultType="Map">
....
</select>
<!--个别不用缓存的另外备注useCache-->
<select id="list2" resultType="Map" useCache="false">
....
</select>
</mapper>
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
flushInterval(刷新间隔) 可以被设置为任意的正整数,而且它们代表一个合理的毫秒 形式的时间段。默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新。
size(引用数目) 可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的可用内存资源数目。默认值是 1024。
readOnly(只读) 属性可以被设置为true或false。只读的缓存会给所有调用者返回缓 存对象的相同实例。因此这些对象不能被修改。这提供了很重要的性能优势。可读写的缓存 会返回缓存对象的拷贝(通过序列化) 。这会慢一些,但是安全,因此默认是 false。
eviction(收回策略)有:
LRU – 最近最少使用的:移除最长时间不被使用的对象。(默认)
FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。
单元测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestDemo {
@Autowired
private Ky_s_ship_miss_dtlDao dataDao;
@Autowired
private SqlSessionFactory sqlSessionFactory;
/**
* 测试mybatis一级缓存,一个session共享一份缓存
*/
@Test
public void TestDaoMethod(){
//查询条件
Map<String,Object> param = new HashMap<>();
param.put("offset",0);
param.put("limit",20);
param.put("areaId",1);
param.put("start_time","2018-07-01 10:30:00");
param.put("end_time","2018-07-31 10:29:59");
Long start = System.currentTimeMillis();
List<Map<String,Object>> aa = dataDao.list(param);
Long end = System.currentTimeMillis();
System.out.println("首次查询数:"+(end-start));
start = System.currentTimeMillis();
List<Map<String,Object>> bb = dataDao.list(param);
end = System.currentTimeMillis();
System.out.println("再次查询数:"+(end-start));
}
/**
* 测试mybatis二级缓存,多个session共享一份缓存
*/
@Test
public void TestDaoMethod2(){
//查询条件
Map<String,Object> param = new HashMap<>();
param.put("offset",0);
param.put("limit",50);
param.put("areaId",1);
param.put("start_time","2018-07-01 10:30:00");
param.put("end_time","2018-07-31 10:29:59");
SqlSession sqlSession1=null;
SqlSession sqlSession2=null;
sqlSession1=sqlSessionFactory.openSession();
sqlSession2=sqlSessionFactory.openSession();
//生成代理类
Ky_s_ship_miss_dtlDao orderMapper=sqlSession1.getMapper(Ky_s_ship_miss_dtlDao.class);
Ky_s_ship_miss_dtlDao orderMapper2=sqlSession2.getMapper(Ky_s_ship_miss_dtlDao.class);
Long start = System.currentTimeMillis();
List<Map<String,Object>> aa = orderMapper.list(param);
Long end = System.currentTimeMillis();
sqlSession1.close();
System.out.println("首次查询:"+(end-start));
start = System.currentTimeMillis();
List<Map<String,Object>> bb = orderMapper2.list(param);
sqlSession2.close();
end = System.currentTimeMillis();
System.out.println("再次查询:"+(end-start));
}
}