debug:查询数据库没有返回值但是数据库里有值怎么肥四
是这样的,写了一些简单的代码到数据库查询用户信息。
controller是这样的:
@GetMapping("{page}/{limit}")
public Result list(@PathVariable Long page,
@PathVariable Long limit,
UserInfoQueryVo userInfoQueryVo) {
Page<UserInfo> pageParam = new Page<>(page, limit);
IPage<UserInfo> pageModel = userInfoService.selectPage(pageParam, userInfoQueryVo);
return Result.ok(pageModel);
service的实现类是这样的:
@Override
public IPage<UserInfo> selectPage(Page<UserInfo> pageParam, UserInfoQueryVo userInfoQueryVo) {
/** UserInfoQueryVo获取条件值 */
String name = userInfoQueryVo.getKeyword(); /** 用户名称 */
Integer status = userInfoQueryVo.getStatus(); /** 用户状态 */
Integer authStatus = userInfoQueryVo.getAuthStatus(); /** 认证状态 */
String createTimeBegin = userInfoQueryVo.getCreateTimeBegin();
String createTimeEnd = userInfoQueryVo.getCreateTimeEnd();
/** 对条件值进行非空判断 */
QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
if (!StringUtils.isEmpty("name")) {
wrapper.like("name", name);
}
if (!StringUtils.isEmpty(status)) {
wrapper.eq("status", status);
}
if (!StringUtils.isEmpty(authStatus)) {
wrapper.eq("auth_status", authStatus);
}
if (!StringUtils.isEmpty(createTimeBegin)) {
wrapper.ge("create_time", createTimeBegin);
}
if (!StringUtils.isEmpty(createTimeEnd)) {
wrapper.le("create_time", createTimeEnd);
}
/** 调用mapper的方法 */
Page<UserInfo> pages = baseMapper.selectPage(pageParam, wrapper);
pages.getRecords().stream().forEach(item -> {
this.packageUserInfo(item);
});
return pages;
}
但是返回的数据是空。
但是我自己看数据库,明明是有三个值。
我这个其实查询代码非常简单,基本上都是用mybatis-plus做的。
那到底哪里出错了呢。
我决定先看实际执行的sql语句是啥。那怎么看呢?一开始我开着debug模式,点进去看,不太行。后来就百度,百度到添加日志的方法,在配置文件里添加:
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
果然就可以打印日志了

我一开始还觉得这条语句里带着括号百分号啥的莫非还有什么玄机,于是还特意下载了一个翻译插件,翻译结果是:

然后我就研究这个name like是哪里来的,最终找到了出错的代码:
if (!StringUtils.isEmpty("name")) {
wrapper.like("name", name);
}
判断是否为空的不应该是“name”而应该是name,我加了个引号当然永远为真了。
破案了。
浙公网安备 33010602011771号