【引言】
前面写过一篇博客《【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 查询应用