在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

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐