【Spring Boot】Mybatis Plus 3.X 条件查询

【引言】

前面写过一篇博客《【Spring Boot】Mybatis Plus 2.X 条件查询》,我们知道Mybatis Plus 2.X 和 3.X 实现查询的方式不太一样,本篇博客将总结一下3.X版本各种查询方法的应用。

【实例】

下面以文章表的查询为例,展示几种不同的查询方法的使用:

1. 按文章栏目编号查询对应栏目下所有文章

public List<Article> searchByCatId(Integer catId) {
    QueryWrapper<Article> queryWrapper = new QueryWrapper<>();
    queryWrapper.lambda().eq(Article::getCatId,catId);
    List<Article> articles = articleMapper.selectList(queryWrapper);
    articles.forEach(x-> System.out.println("文章栏目编号:" + x.getCatId() + ",文章标题:" + x.getTitle()));
    return articles;
}

此处用到的是QueryWrapper构造查询条件,使用eq实现对应栏目编号条件,selectList方法返回所有满足条件的文章集合。

2. 通过文章主键id查询特定文章

public Article searchOne(Integer id) {
    LambdaQueryWrapper<Article> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.eq(Article::getId,id);
    Article article = articleMapper.selectOne(queryWrapper);
    return article;
}

上述代码直接使用LambdaQueryWrapper构造查询条件,使用eq实现对应编号查询,selectOne方法返回特定的文章记录。

使用selectOne查询需要注意的是结果必须是只有一条,多条的情况下会报错。

3. 按文章关键字模糊查询所有符合条件的文章

public List<Article> searchMore(String keywords) {
   LambdaQueryWrapper<Article> queryWrapper = new LambdaQueryWrapper<>();
   queryWrapper.like(Article::getKeywords,keywords);
   List<Article> articles = articleMapper.selectList(queryWrapper);
   articles.forEach(x-> System.out.println("文章关键字:" + x.getKeywords() + ",文章标题:" + x.getTitle()));
   return articles;
}

上述代码使用LambdaQueryWrapper构造查询条件,使用like实现前后模糊条件,selectList方法返回所有符合条件的文章结果。

4. 使用Map构造查询条件,根据查询文章编码精确查询

public List<Article> searchMoreByMap(String code) {
    Map<String,Object> queryMap = new HashMap<>();
    queryMap.put("code",code);
    List<Article> articles = articleMapper.selectByMap(queryMap);
    articles.forEach(x-> System.out.println("文章编码:" + x.getCode() + ",文章标题:" + x.getTitle()));
    return articles;
}

我们可以使用map构造条件,key对应的数据库列名,value对应的是数据库字段的值,注意此处查询条件相当于等于,selectMap方法实现精确查询。

5. 分页查询所有未被删除的文章

public PageResult<Article> searchArticlePage(Integer page, Integer size) {
    IPage<Article> articleIPage = new Page<>(page,size);
    QueryWrapper<Article> articleQueryWrapper = new QueryWrapper<>();
    articleQueryWrapper.lambda().eq(Article::getIsDeleted,0);
    IPage<Article> iPage = articleMapper.selectPage(articleIPage, articleQueryWrapper);
    PageResult<Article> pageResult = new PageResult<>();
    pageResult.setItems(iPage.getRecords());
    pageResult.setTotal(iPage.getTotal());
    System.out.println("文章总数:" + pageResult.getTotal());
    return pageResult;
}

构造IPage对象,传入当前页及每页数量,QueryWrapper构造查询条件,selectPage方法实现分页查询。

使用分页的时候,遇到一个问题,返回的Total数量为0,解决方案是如果引用了pagehelper,移除该引用,增加一个mybatis-plus分页插件配置

代码如下:

@Configuration
public class MybatisPlusConfig {
     /**
     *   mybatis-plus分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor page = new PaginationInterceptor();
        page.setDialectType("mysql");
        return page;
    } 
}

以上代码在之前集成好的3.X版本的生成代码配置工程下,地址: Mybatis Plus 3.X 查询应用

猜你喜欢

转载自blog.csdn.net/u013034223/article/details/104923533