mybatis 一级缓存导致查询结果与预期结果不一致

示例sql:

@Transactional  
public RebateContract getInfo(RebateContract contract) {  
   RebateContract rebContractInfo = rebateContractDao.getInfo(contract);  
   logger.info("agentId:" + rebContractInfo.getAgentId());  
   rebContractInfo.setAgentId(10000L);  
   // 不会再查询 而是从缓存中获取rebContractInfo的值  
 RebateContract rebContractInfo1 = rebateContractDao.getInfo(contract);  
   logger.info("agentId1:" + rebContractInfo1.getAgentId());  
   return rebContractInfo1;  
}

执行结果:
image
注意:必须同一个事物中
同一个事务中查询一次后,直接修复查询后结果,再次相同sql查询,实际不会再查询,而是从缓存中获取上次的查询结果。
但上次查询结果已经被修改,所以后面查询获取到的值已与实际查询该获取的值不一样了。

阅读 72

推荐阅读