mybatis缓存导致的返回结果差异问题

最近有一个方法返回的结果与预想的不一致。

原因:mybatis的一级缓存导致的问题

该方法内部重复调用同一个mybatis的方法,因为入参相同触发一级缓存。

举个例子:

@Transactional

 
    // 执行查询,结果将被缓存
    YourObject object1 = mapper.selectByPrimaryKey(id);
    
    // 再次执行相同的查询,可能从缓存中获取结果
    YourObject object2 = mapper.selectByPrimaryKey(id);
    
    // 检查缓存中的对象是否与数据库中的对象相同
    // 如果object1和object2是同一个对象,则表示使用了一级缓存
    System.out.println(object1 == object2);

因为object1和object2是同一个对象,修改了object1导致 object2也进行修改。 所以获取的结果有差异。

解决方法:去掉@Transactional。或者对object1进行copy生成新的对象,不对object1进行更改。

你可能感兴趣的:(缓存)