通用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

 

热门相关:傲天弃少   九星毒奶   重生童养媳:枭宠不乖娇妻   医道至尊   勇闯天涯