【引言】
前面寫過一篇博客《【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 查詢應用