MyBatis 緩存
MyBatis緩存分為一級緩存和二級緩存
一級緩存
MyBatis的一級緩存指的是在一個Session域內,session為關閉的時候執行的查詢會根據SQL為key被緩存(跟mysql緩存一樣,修改任何參數的值都會導致緩存失效)
1)單獨使用MyBatis而不繼承Spring,使用原生的MyBatis的SqlSessionFactory來構造sqlSession查詢,是可以使用以及緩存的,示例代碼如下
public class Test { public static void main(String[] args) throws IOException { String config = "mybatis-config.xml"; InputStream is = Resources.getResourceAsStream(config); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); SqlSession session = factory.openSession(); System.out.println(session.selectOne("selectUserByID", 1)); // 同一個session的相同sql查詢,將會使用一級緩存 System.out.println(session.selectOne("selectUserByID", 1)); // 參數改變,需要重新查詢 System.out.println(session.selectOne("selectUserByID", 2)); // 清空緩存後需要重新查詢 session.clearCache(); System.out.println(session.selectOne("selectUserByID", 1)); // session close以後,仍然使用同一個db connection session.close(); session = factory.openSession(); System.out.println(session.selectOne("selectUserByID", 1)); } }
輸出如下
DEBUG - Openning JDBC Connection
DEBUG - Created connection 10044878.
DEBUG - ooo Using Connection [[email protected]]
DEBUG - ==> Preparing: SELECT * FROM user WHERE id = ?
DEBUG - ==> Parameters: 1(Integer)
1|test1|19|beijing
1|test1|19|beijing
DEBUG - ooo Using Connection [[email protected]
DEBUG - ==> Preparing: SELECT * FROM user WHERE id = ?
DEBUG - ==> Parameters: 2(Integer)
2|test2|18|guangzhou
DEBUG - ooo Using Connection [[email protected]]
DEBUG - ==> Preparing: SELECT * FROM user WHERE id = ?
DEBUG - ==> Parameters: 1(Integer)
1|test1|19|beijing
DEBUG - Resetting autocommit to true on JDBC Connection [[email protected]