1. 程式人生 > >Mybatis一級快取 去除

Mybatis一級快取 去除

專案中使用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);
	}