Mybatis-Plus|实例(MyBatis-Plus自定义分页查询)

系列文章目录 第一篇:实例:MyBatis-Plus自定义分页查询
第二篇:实例:MyBatis-Plus自定义连表分页查询
第三篇:实例:MyBatis-Plus自定义连表分页查询-动态sql实现

MP分页相关博文:
MyBatis-Plus 分页查询以及自定义sql分页
MyBatis-Plus 分页插件使用,自带分页及xml分页的使用
条件构造器:利用MP的条件构造器可以自由添加、组合各种基本查询。

文章目录
  • 系列文章目录
  • 一、需求
  • 二、条件参数类
  • 三、关键代码
  • 四、总结

一、需求 要求实现一个多条件查询接口:
Mybatis-Plus|实例(MyBatis-Plus自定义分页查询)
文章图片

二、条件参数类 定义一个POST类型的请求,查询条件及分页参数都包含在条件参数类中。
package com.xxxxx.xxx.xxxx; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.EqualsAndHashCode; import java.time.LocalDateTime; @Data @EqualsAndHashCode(callSuper = false) @ApiModel(value = "https://www.it610.com/article/伙伴检索条件", description = "") public class PartnerQueryItems {private Integer page = 1; // 页数 private Integer pagesize = 20; // 页容量 private String code; // 编号 private String name; // 名称 private Boolean isOrgan; // 分类 private String state; // 状态 private String relation; // 关系 @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8") private LocalDateTime startTime; // 开始时间 @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8") private LocalDateTime endTime; // 结束时间 }

三、关键代码
  • PartnerController.java
@RequestMapping(value = "https://www.it610.com/query", method = RequestMethod.POST) public IPage queryPartner(@RequestBody @Valid PartnerQueryItems items) { return iPartnerService.queryPartner(items); }

  • PartnerServiceImpl.java
@Override public IPage queryPartner(PartnerQueryItems items) { Page page1 = new Page<>(items.getPage(), items.getPagesize()); QueryWrapper wrapper = new QueryWrapper(); // MP条件构造器 if(items.getCode() != null && items.getCode().trim() != "") wrapper.like("code", items.getCode()); if(items.getName() != null && items.getName().trim() != "") wrapper.like("name", items.getName()); if(items.getIsOrgan() != null) wrapper.eq("is_organ", items.getIsOrgan()); if(items.getState() != null && items.getState().trim() != "") wrapper.eq("state", items.getState()); if(items.getRelation() != null && items.getRelation().trim() != "") wrapper.eq("relation", items.getRelation()); if(items.getStartTime() != null && items.getEndTime() != null) { wrapper.between("create_time", items.getStartTime(), items.getEndTime()); } return partnerMapper.selectPagePartner(page1, wrapper); }

  • PartnerMapper.java
public interface PartnerMapper extends BaseMapper { IPage selectPagePartner(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); }

  • PartnerMapper.xml

四、总结 上述例子仅仅只是单表查询,MP的封装方法selectPage()完全可以胜任,也就不需要去自定义分页查询了。但当sql并非简单的单表查询,或者需要做映射处理时(resultMap),selectPage就不够用了。
或者,像下面这样,映射到bean:
// PartnerMapper.java: IPage selectPagedPartnerParam(IPage page, @Param(Constants.WRAPPER) Wrapper wrapper); // PartnerMapper.xml: ="selectPagedPartnerParam" resultType="com.xxxxxx.api.model.PartnerParam"> SELECT * FROM org.org_partner ${ew.customSqlSegment}

如有多表查询等复杂需求,可自行在mapper.xml中编写对应sql语句。
【Mybatis-Plus|实例(MyBatis-Plus自定义分页查询)】MyBatis相关教程:
MyBatis教程
MyBatis-Plus官方文档

    推荐阅读