mybatis快取單元測試
阿新 • • 發佈:2019-01-11
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)); } }