Mybatis 預設的一級快取 與二級快取
阿新 • • 發佈:2018-12-22
一級快取
同一個session 呼叫多次查詢相同的的主鍵獲取資料 發起一次SQL語句
/** * 1級快取 * 同一個session 呼叫多次查詢相同的的主鍵獲取資料 發起一次SQL語句 */ @Test public void text() { ActionSQL mapper = getSession().getMapper(ActionSQL.class); StuBean query = mapper.query("42"); StuBean query1 = mapper.query("42"); System.out.println(query==query1);//獲取總條數 }
二級快取
同一個sqlSessionFactory 不同的session 必須要把session關閉後 才會把資料放在sqlSessionFactory中;
要是不關閉 會預設一級快取
/** * * 2級快取 * 同一個sqlSessionFactory 不同的session 必須要把session關閉後 才會把資料放在sqlSessionFactory中; * 要是不關閉 會預設一級快取 * */ @Test public void text1() { String resource = "config.xml"; InputStream inputStream = ActionSQLShow.class.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //獲取兩個session SqlSession openSession = sqlSessionFactory.openSession(); SqlSession openSession1 = sqlSessionFactory.openSession(); ActionSQL mapper = openSession.getMapper(ActionSQL.class); ActionSQL mapper1 = openSession1.getMapper(ActionSQL.class); StuBean query = mapper.query("42"); //關閉第一個session openSession.close(); StuBean query1 = mapper1.query("42"); System.out.println(query==query1);//獲取總條數 }
並且要在XML中設定cache
eviction=“FIFO” //回收策略為先進先出
flushInterval=“60000” //自動重新整理時間60s
size=“512” //最多快取512個引用物件
readOnly=“true” //只讀
<mapper namespace="lesson_mybatis_redis.ActionSQL"> <!-- eviction="FIFO" //回收策略為先進先出 flushInterval="60000" //自動重新整理時間60s size=“512” //最多快取512個引用物件 readOnly="true" //只讀 --> <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/> <select id="query" resultType="lesson_mybatis_redis.StuBean"> SELECT * FROM student where id = #{0} </select> </mapper>