通用mapper 使用过程的bug记录 selectByExample 的查询问题
1因为使用
selectByExample 引发的事故
具体问题:
我在使用 selectByExample查询时 明确的写了 哪些条件,可是当某个条件的参数为null时,该条件却没有执行
问题重现:
Example example = new Example(NinjaUser.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("userId", user.getUserId());
criteria.andEqualTo("userName", user.getUserName());
return ninjaUserMapper.selectByExample(example);
如上面的代码 我们写了两个条件 userId userName
如果连个条件都传值的话 正常是这样的sql:
但是!! 如果某个参数为null 比如我们把user的 userId参数设置为null
执行的sql为:
userId的 sql条件被吃了
不应该是 user_id = null 吗?
因为这个问题导致了生产勿删了很多数据,以此记录
因为这个问题导致了生产勿删了很多数据,以此记录
因为这个问题导致了生产勿删了很多数据,以此记录
这个应该是设计如此,不能怪别人,都怪自己太菜了...好好学习
解决方案:
if (null == user.getUserId() || null == user.getUserName()) {
return null;
}
Example example = new Example(NinjaUser.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("userId", user.getUserId());
criteria.andEqualTo("userName", user.getUserName());
return ninjaUserMapper.selectByExample(example);
1如果你的条件是必须的,在查询前判断
2自己写sql 不使用 通用mapper