在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语句是这样的:

image-20211018103854541

我之前是这样写的:

User user = new LambdaQueryChainWrapper<>(userService.getBaseMapper())
                        .eq(User::getUsername,userName)
                        .or()
                        .eq(User::getMail,userName)
                        .eq(User::getPsd,psd)
                        .one();

但是or是最后执行所以结果肯定不对,

这里面也没有加括号的方法,所以要么手写sql,要么向上面那样写

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐