mybatis在直接查数据库的时候,参数与数据库直接查询的结果不一致。这是什么原因导致的?是数据库有缓存吗?
doQuery是你自己实现的吗?能不能看一下
doQuery是mybatis的源码
public <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
Statement stmt = null;
try {
Configuration configuration = ms.getConfiguration();
StatementHandler handler = configuration.newStatementHandler(this, ms, parameter, rowBounds, resultHandler, boundSql);
stmt = prepareStatement(handler, ms.getStatementLog());
return handler.<E>query(stmt, resultHandler);
} finally {
closeStatement(stmt);
}
}
麻烦将doQuery里的代码 粘出来下呗
public <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
Statement stmt = null;
try {
Configuration configuration = ms.getConfiguration();
StatementHandler handler = configuration.newStatementHandler(this, ms, parameter, rowBounds, resultHandler, boundSql);
stmt = prepareStatement(handler, ms.getStatementLog());
return handler.<E>query(stmt, resultHandler);
} finally {
closeStatement(stmt);
}
}
@昵称被喵掉了: 感觉没啥问题,你看看你sql 是不是查的大于4月1号的数据
@^keepHungry$: 我也看了好久。也是没问题。sql是“=”号。我查别的用户的就是正确的,只有N0000000的才是这样。
@昵称被喵掉了: 你看看 是不是数据的问题
@^keepHungry$: 使用控制台打印的sql和参数到数据库查询是正确的。
原因在于mybatis和kylin驱动不对应。实际上在kylin的预编译下会抛出异常,导致kylin返回缓存结果。不使用预编译完全没有问题。即使用mybatis的${},但是如此容易造成安全问题,最后修改了kylin驱动包。