Mybatis一級快取 去除
阿新 • • 發佈:2019-02-03
專案中使用Mybatis時,由於其一級快取SqlSession預設開啟,使得相同SELECT語句查詢Oracle資料庫時會直接取出快取中的結果,導致需要實時更新的結果獲取不到.
這裡簡要說明一下使用和關閉Mybatis的SqlSession方法:
對於一些不需要動態重新整理,需要查詢的資料在資料庫中不會短時間內出現變化的,單獨使用一個Sqlsession
對於需要獲取實時資料的,需要在Dao層的類中獲取SqlSession,並使用該SqlSession獲取對應的mapper對映介面物件,在獲取實時資料之前使用sqlSession.clearChche()方法清除快取即可.
需要快取的資料:
private TestTypeMapper mapper = null; public TestTypeDao() { mapper = DBConnUtil.getDbConnUtil().getTestTypeMapper(); } /** * * @return 所有的testType * @throws SQLException */ public List<TestType> findAllTestTypes1() { return mapper.getTestTypes(); }
需要實時獲取的資料:
private TaskInfoMapper mapper = null; private SqlSession session = null; public TaskInfoDao() { this.session = new MybatisUtil().getSqlSession(true); this.mapper = session.getMapper(TaskInfoMapper.class); } public List<TaskQuery> findTaskInfo(TaskQuery taskQuery) { session.clearCache(); return mapper.findTaskInfo(taskQuery); }