系列文章目录 第一篇:实例:MyBatis-Plus自定义分页查询
第二篇:实例:MyBatis-Plus自定义连表分页查询
第三篇:实例:MyBatis-Plus自定义连表分页查询-动态sql实现
MP分页相关博文:
MyBatis-Plus 分页查询以及自定义sql分页
MyBatis-Plus 分页插件使用,自带分页及xml分页的使用
条件构造器:利用MP的条件构造器可以自由添加、组合各种基本查询。
文章目录
- 系列文章目录
- 一、需求
- 二、条件参数类
- 三、关键代码
- 四、总结
一、需求 要求实现一个多条件查询接口:
文章图片
二、条件参数类 定义一个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官方文档
推荐阅读
- 代码生成器|代码生成器(MyBatis-Plus代码生成自定义模版)
- Mybatis-Plus|实例(MyBatis-Plus自定义联表分页查询-动态sql实现)
- Mybatis|Mybatis-Plus入门(Mapper CRUD接口)
- mybatis|Mybatis-plus的Mapper CRUD 接口查询数据错误
- mybatis-plus yml配置
- JAVA|Mybatis-plus 的代码生成器 Demo
- MyBatis-Plus|Springboot(使用IDEA自动生成java实体类Mysql逆向工程效率神器使用讲解)
- MyBatisPlus|MyBatis-Plus工具
- mybatisplus|Java学习 --- mybatisplus添加日志功能