1. 程式人生 > >Mybatis 預設的一級快取 與二級快取

Mybatis 預設的一級快取 與二級快取

一級快取
同一個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>