MyBatis-Plus条件查询

MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合。

本文练习数据采用MyBatis-Plus官网快速开始中的User表:

idnameageemail
1Jone18test1@baomidou.com
2Jack20test2@baomidou.com
3Tom28test3@baomidou.com
4Sandy21test4@baomidou.com
5Billie24test5@baomidou.com

测试代码如下:

@SpringBootTest
class ApplicationTests {
    @Autowired
    UserMapper userMapper;

    @Test
    public void testSelectCondition() {
        //方式一 字符串
        //QueryWrapper qw = new QueryWrapper();
        //qw.gt("age", 20);

        //方式二 lambda
        //QueryWrapper<User> qw = new QueryWrapper<>();
        //qw.lambda().gt(User::getAge, 20);

        //方式三 LambdaQueryWrapper
        LambdaQueryWrapper<User> qw = new LambdaQueryWrapper<>();
        //多条件查询 and
        //qw.gt(User::getAge, 20).lt(User::getAge, 25);
        //多条件查询 or
        qw.gt(User::getAge, 25).or().lt(User::getAge, 20);
        List<User> userList = userMapper.selectList(qw);
        userList.forEach(System.out::println);
    }
}

MyBatis使用if等标签实现动态SQL,MP中类似功能如何实现呢?gt(greater than)等方法提供了带拼接条件的重载形式。

//模拟参数获取
User user = new User();
//age为空时的SQL语句: SELECT id,name,age,email FROM user
//age不为空时的SQL语句: SELECT id,name,age,email FROM user WHERE (age > ?)
//user.setAge(20);
//封装查询条件
LambdaQueryWrapper<User> qw = new LambdaQueryWrapper<>();
qw.gt(null != user.getAge(), User::getAge, user.getAge());
//执行查询
List<User> userList = userMapper.selectList(qw);
userList.forEach(System.out::println);
Logo

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

更多推荐