【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 查詢應用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章