您的位置:

Mybatisplus多条件查询详解

一、Mybatisplus多条件查询and

Mybatisplus是一款优秀的ORM框架,能够极大的提高开发效率,其中多条件查询是非常常见的需求。而and运算符(使用and关键字)是最常见的多条件查询方式之一。以下是一个示例代码:

/**
 * 多条件查询示例
 */
public List queryUsers(String name, Integer age, String email) {
    QueryWrapper
    queryWrapper = new QueryWrapper<>();

    if (StringUtils.isNotBlank(name)) {
        queryWrapper.lambda().eq(User::getName, name);
    }

    if (age != null) {
        queryWrapper.lambda().eq(User::getAge, age);
    }

    if (StringUtils.isNotBlank(email)) {
        queryWrapper.lambda().eq(User::getEmail, email);
    }

    return userDao.selectList(queryWrapper);
}

   
  

在上面的示例中,我们利用了QueryWrapper来实现多条件查询,关键代码就是构建QueryWrapper。首先我们创建了一个空的QueryWrapper,随后再判断是否传入了对应的参数,如果有则加入相关的查询条件。

二、Mybatisplus查询方法

除了使用and关键字以外,Mybatisplus还提供了诸如or,eq,ne,gt,lt等各种查询方法。以下是一些常见的查询方法:

  • eq : 等于
  • ne : 不等于
  • gt : 大于
  • ge : 大于等于
  • lt : 小于
  • le : 小于等于
  • like : 模糊匹配
  • in : 包含
  • not in : 不包含

示例代码:

queryWrapper.lambda().eq(User::getName, "张三");
queryWrapper.lambda().ne(User::getGender, "男");
queryWrapper.lambda().gt(User::getAge, 18);
queryWrapper.lambda().ge(User::getSalary, 10000);
queryWrapper.lambda().lt(User::getAge, 30);
queryWrapper.lambda().le(User::getSalary, 20000);
queryWrapper.lambda().like(User::getName, "张%"); //查询名字以“张”开头的用户
queryWrapper.lambda().in(User::getId, 1, 2, 3);
queryWrapper.lambda().notIn(User::getId, 1, 2, 3);

三、Mybatisplus查询

除了利用QueryWrapper进行多条件查询以外,Mybatisplus还提供了一些其他的查询方法,例如:selectByMap,selectById等等。以下是一些常见的查询方法:

  • selectById : 根据id查询记录
  • selectBatchIds : 根据id批量查询记录
  • selectByMap : 根据Map条件查询记录
  • selectOne : 根据条件查询唯一一条记录
  • selectList : 根据条件查询多条记录
  • selectMaps : 根据条件查询多条记录,以Map形式返回
  • selectObjs : 根据条件查询单个属性,例如selectObjs("select name,age from user where id=1")

示例代码:

//根据id查询记录
User user = userDao.selectById(1);

//根据id批量查询记录
List userList = userDao.selectBatchIds(Arrays.asList(1, 2, 3));

//根据Map条件查询记录
Map
    columnMap = new HashMap();
columnMap.put("name", "张三");
columnMap.put("age", 18);
List
     userList = userDao.selectByMap(columnMap);

//根据条件查询唯一一条记录
QueryWrapper
      queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(User::getAge, 18);
User user = userDao.selectOne(queryWrapper);

//根据条件查询多条记录
QueryWrapper
       queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(User::getGender, "男");
List
       
        userList = userDao.selectList(queryWrapper); //根据条件查询多条记录,以Map形式返回 QueryWrapper
        
         queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().ge(User::getAge, 18); List
         
          
           > mapList = userDao.selectMaps(queryWrapper); //根据条件查询单个属性,例如查询姓名 List
            nameList = userDao.selectObjs("select name from user where age>18");  

四、Mybatisplus条件查询分页

很多时候,我们需要进行条件查询并且分页展示结果。Mybatisplus提供了一个非常方便的分页查询工具类Page以及对应的方法selectPage。

示例代码:

Pagination pagination = new Pagination();
pagination.setPageNum(1); //当前第一页
pagination.setPageSize(10); //一页10条记录

QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(User::getGender, "男");

Page
               userPage = new Page<>(pagination.getPageNum(), pagination.getPageSize());
userPage = userDao.selectPage(userPage, queryWrapper);

List
                userList = userPage.getRecords(); //当前页的记录列表
long total = userPage.getTotal(); //总记录数
int pages = userPage.getPages(); //总共多少页

               
              
             

五、总结

Mybatisplus提供了非常便捷的多条件查询工具,帮助我们快速地实现各种复杂的查询操作。掌握Mybatisplus的多条件查询功能将为我们的开发工作带来极大的便利。

文章目录
顶部