1、mybatis-plus缓存
使用mybatis-plus的时候没有关闭一级缓存,一级缓存是默认开启的,这样当一条sql一模一样的时候就会去从缓存里面去获取数据而不会再去数据库查,这样在编程的时候,如果你对查询的结果集做了更改,就会将最后的结果集缓存到缓存中,下次你以相同的sql去查询,会发现查询结果和你拿sql去数据库查询出来是不一致的,这就是走了缓存,导致数据不一致,比如这样写代码:
List<Attendance> rtnList = new ArrayList<>();
rtnList= attendanceService.listByAccountUnitId(cycle, accountUnitId);
rtnList.addAll(tsAttendanceList);
rtnList.removeAll(bjAttendanceList);
return rtnList;
对查询的结果集做了更改,最后缓存的结果集是处理过的。
mybatis的缓存最好还是关闭比较好,如果确实需要使用缓存,就要在写代码的时候有意识的去规避这样的写法。关闭缓存可以在配置文件配置如下,mybatis也是一致:
mybatis-plus:
configuration:
cache-enabled: false #禁用二级缓存
local-cache-scope: statement #一级缓存指定为statement级别
2、使用mybatis-plus传参数据类型不一致的问题,就是在查询的时候我入参一个Long类型的id,但是这个id在这个库里是String类型的,实际查询的sql是这样的:
select * from table where id = 1234
但是这样查询出来会多出很多数据,正确的sql语句应该是
select * from table where id = '1234'
这样查出来的数据才是准确的,所以在查询的时候要保证字段类型的一致,类型不一致不仅会导致数据不准的问题,还会导致索引失效的问题,这是需要重视的。