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

【引言】

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

【实例】

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

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

public List
searchByCatId(Integer catId) { QueryWrapper
queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(Article::getCatId,catId); List
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
queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Article::getId,id); Article article = articleMapper.selectOne(queryWrapper); return article; }

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

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

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

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

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

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

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

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

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

public PageResult
searchArticlePage(Integer page, Integer size) { IPage
articleIPage = new Page<>(page,size); QueryWrapper
articleQueryWrapper = new QueryWrapper<>(); articleQueryWrapper.lambda().eq(Article::getIsDeleted,0); IPage
iPage = articleMapper.selectPage(articleIPage, articleQueryWrapper); PageResult
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 查询应用

你可能感兴趣的:(【架构设计】,#)