Mybatis-Plus,LambdaQueryChainWrapper使用and or让sql执行无误
在sql中,我们知道and的优先级比or高,and语句会先执行。我在做登录的时候,用户可以用户名或邮箱登录,正确的写法是这样的:User user = new LambdaQueryChainWrapper<>(userService.getBaseMapper()).eq(User::getPsd,psd).eq(User::getUsername,userName).
·
在sql中,我们知道and的优先级比or高,and语句会先执行。
我在做登录的时候,用户可以用户名或邮箱登录,正确的写法是这样的:
User user = new LambdaQueryChainWrapper<>(userService.getBaseMapper())
.eq(User::getPsd,psd)
.eq(User::getUsername,userName)
.or()
.eq(User::getMail,userName)
.eq(User::getPsd,psd)
.one();
它执行的sql语句是这样的:
我之前是这样写的:
User user = new LambdaQueryChainWrapper<>(userService.getBaseMapper())
.eq(User::getUsername,userName)
.or()
.eq(User::getMail,userName)
.eq(User::getPsd,psd)
.one();
但是or是最后执行所以结果肯定不对,
这里面也没有加括号的方法,所以要么手写sql,要么向上面那样写
更多推荐
已为社区贡献3条内容
所有评论(0)