代码拉取完成,页面将自动刷新
该组件的核心思想是通过@Query注解简化MybatisPlus中的QueryWrapper的条件组装,极大提升查询开发效率。
原来你需要这样组织查询条件,代码杂乱容易出错:
LambdaQueryWrapper<ItemInfo> queryWrapper = new LambdaQueryWrapper<ItemInfo>()
.like(queryParam.getName() != null, queryParam::getName, queryParam.getName())
.eq(!StringUtils.isEmpty(queryParam.getCode()), queryParam::getCode, queryParam.getCode())
.ge(queryParam.getStartDateFrom() != null, queryParam::getStartDate, queryParam.getStartDateFrom())
.le(queryParam.getStartDateTo() != null, queryParam::getStartDate, queryParam.getStartDateTo())
.eq(queryParam.getState() != null, queryParam::getState, queryParam.getState())
.orderByAsc(queryParam::getPhone);
现在使用mybatis-plus-query后可以简化成这样:
QueryWrapper<ItemInfo> queryWrapper = QueryConverter.convert(queryParam);
public class QueryParam {
@Query(Operator.LIKE)
private String name;
@Query(Operator.EQ)
private String code;
@Query(Operator.GE)
private Date StartDateFrom;
@Query(Operator.LE)
private Date StartDateTo;
@Query(Operator.EQ)
private String state;
private List<Sorter> sorters;
}
QueryWrapper<ItemInfo> queryWrapper = QueryConverter.convert(queryParam);
<dependency>
<groupId>io.gitee.sections</groupId>
<artifactId>mybatis-plus-query</artifactId>
<version>1.2</version>
</dependency>
Query注解支持所有mybatis-plus的查询操作:EQ, NE, GT, GE, LT, LE, LIKE, LIKE_LEFT, LIKE_RIGHT, NOT_LIKE, IS_NULL, IS_NOT_NULL, IN, NOT_IN, BETWEEN, NOT_BETWEEN, APPLY。
下面是一些高级用法案例:
public class QueryParam {
//使用column指定数据库列名,若不指定则默认根据查询对象字段名生成
@Query(operator = Operator.LIKE, column = "user_name")
private String name;
//默认情况下null值不参与条件组装,可以通过ignoreNull=false来指定null参与条件组装,它将被转换为isNull操作
@Query(operator = Operator.EQ, ignoreNull = false)
private String code;
//支持between操作,需要传入一个集合或数组,且必须有两个元素
@Query(operator = Operator.BETWEEN)
private List<Integer> ageRange;
//支持in操作,需要传入一个集合或数组,可以通过ignoreEmpty参数来设置空集合是否参与条件组织
@Query(operator = Operator.IN, ignoreEmpty = false)
private List<Integer> states;
//支持使用mybatis-plus的apply方法实现动态的sql拼接
@Query(operator = Operator.APPLY, applySql="name like {0} or code like {0}")
private String keyword;
}
PageQuery和PageResult用于实现分页查询。
import io.gitee.sections.query.Operator;
import io.gitee.sections.query.PageQuery;
import io.gitee.sections.query.Query;
//使用PageQuery作为分页查询对象的父类
public class UserQueryDTO extends PageQuery{
@Query(Operator.LIKE)
private String name;
@Query(Operator.GT)
private Integer age;
@Query(Operator = Operator.IN)
private List<String> types;
}
import io.gitee.sections.query.PageResult;
import io.gitee.sections.query.QueryConverter;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.function.Function;
public class UserRepository extends ServiceImpl {
public PageResult<User> query(UserQueryDTO userQueryDTO){
final QueryWrapper<User> queryWrapper = QueryConverter.convert(userQueryDTO);
final Page<User> page = new Page<>(userQueryDTO.getCurrent(), userQueryDTO.getPageSize());
super.page(page, queryWrapper);
//把mybatis-plus的page对象转换为本框架提供的PageResult对象
return PageResult.convert(page, Function.identity());
}
}
注意:分页查询需要配置mybatis-plus的PaginationInnerInterceptor启用
ListQuery用于列表查询,可以作为列表查询对象的父类,包含列表查询的基础字段:limit(限制查询数量,默认50)、sorters(排序字段)
import io.gitee.sections.query.Operator;
import io.gitee.sections.query.ListQuery;
import io.gitee.sections.query.Query;
//使用ListQuery作为列表查询对象的父类
public class UserQueryDTO extends ListQuery{
@Query
private Integer age;
@Query(Operator.LIKE)
private String name;
}
Sorter用于查询排序,在PageQuery和ListQuery中默认包含一个List sorters字段,可以直接使用。 QueryConverter在生成QueryWrapper时会识别sorters字段并生成排序条件
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。