Browse Source

整合分页、排序、自定义参数

master
刘忱 2 years ago
parent
commit
363c77431a
  1. 32
      win-framework/win-common/src/main/java/com/win/framework/common/pojo/CustomConditions.java
  2. 35
      win-framework/win-common/src/main/java/com/win/framework/common/pojo/PageParam.java
  3. 37
      win-framework/win-common/src/main/java/com/win/framework/common/pojo/SortingField.java
  4. 19
      win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/util/MyBatisUtils.java
  5. 42
      win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/util/QueryWrapperUtils.java
  6. 35
      win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/vo/ConditionVo.java
  7. 21
      win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/vo/FilterVo.java
  8. 4
      win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/package-info.java

32
win-framework/win-common/src/main/java/com/win/framework/common/pojo/CustomConditions.java

@ -0,0 +1,32 @@
package com.win.framework.common.pojo;
import lombok.Data;
import java.util.List;
@Data
public class CustomConditions extends PageParam {
/**
* 自定义条件
*/
private List<Condition> filters;
@Data
public static class Condition {
/**
* 类型,==,!=,>,<,>=,<=,like,in,notIn,betweeen,isNull,isNotNull
*/
private String action;
/**
* 字段
*/
private String column;
/**
*
*/
private String value;
}
}

35
win-framework/win-common/src/main/java/com/win/framework/common/pojo/PageParam.java

@ -1,5 +1,6 @@
package com.win.framework.common.pojo;
import com.google.common.base.CaseFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@ -26,4 +27,38 @@ public class PageParam implements Serializable {
@Max(value = 100, message = "每页条数最大值为 100")
private Integer pageSize = PAGE_SIZE;
/**
* 顺序 - 升序
*/
public static final String ORDER_ASC = "ASC";
/**
* 顺序 - 降序
*/
public static final String ORDER_DESC = "DESC";
/**
* 字段
*/
@Schema(description = "排序属性", requiredMode = Schema.RequiredMode.REQUIRED, example = "userName")
private String sort = "create_time";
/**
* 顺序
*/
@Schema(description = "排序类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "DESC")
private String by = "DESC";
public void setSort(String sort) {
if(sort != null) {
this.sort = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, sort);
}
}
public void setBy(String by) {
if(by != null) {
this.by = by.toUpperCase();
}
}
}

37
win-framework/win-common/src/main/java/com/win/framework/common/pojo/SortingField.java

@ -1,37 +0,0 @@
package com.win.framework.common.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 排序字段 DTO
*
* 类名加了 ing 的原因是避免和 ES SortField 重名
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SortingField implements Serializable {
/**
* 顺序 - 升序
*/
public static final String ORDER_ASC = "asc";
/**
* 顺序 - 降序
*/
public static final String ORDER_DESC = "desc";
/**
* 字段
*/
private String field;
/**
* 顺序
*/
private String order;
}

19
win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/util/MyBatisUtils.java

@ -1,21 +1,18 @@
package com.win.framework.mybatis.core.util;
import cn.hutool.core.collection.CollectionUtil;
import com.win.framework.common.pojo.PageParam;
import com.win.framework.common.pojo.SortingField;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.win.framework.common.pojo.PageParam;
import net.sf.jsqlparser.expression.Alias;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
/**
* MyBatis 工具类
@ -25,17 +22,13 @@ public class MyBatisUtils {
private static final String MYSQL_ESCAPE_CHARACTER = "`";
public static <T> Page<T> buildPage(PageParam pageParam) {
return buildPage(pageParam, null);
}
public static <T> Page<T> buildPage(PageParam pageParam, Collection<SortingField> sortingFields) {
// 页码 + 数量
Page<T> page = new Page<>(pageParam.getPageNo(), pageParam.getPageSize());
// 排序字段
if (!CollectionUtil.isEmpty(sortingFields)) {
page.addOrder(sortingFields.stream().map(sortingField -> SortingField.ORDER_ASC.equals(sortingField.getOrder()) ?
OrderItem.asc(sortingField.getField()) : OrderItem.desc(sortingField.getField()))
.collect(Collectors.toList()));
if (!StringUtils.isEmpty(pageParam.getBy()) && !StringUtils.isEmpty(pageParam.getSort())) {
page.addOrder(PageParam.ORDER_ASC.equals(pageParam.getBy()) ? OrderItem.asc(pageParam.getSort()) : OrderItem.desc(pageParam.getSort()));
} else {
page.addOrder(OrderItem.desc("create_time"));
}
return page;
}

42
win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/util/QueryWrapperUtils.java

@ -2,9 +2,8 @@ package com.win.framework.mybatis.core.util;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.base.CaseFormat;
import com.win.framework.common.pojo.CustomConditions;
import com.win.framework.common.util.collection.CollectionUtils;
import com.win.framework.mybatis.core.vo.ConditionVo;
import com.win.framework.mybatis.core.vo.FilterVo;
import org.apache.commons.lang3.StringUtils;
/**
@ -14,59 +13,58 @@ public class QueryWrapperUtils {
/**
* 根据参数动态组装QueryWrapper
* @param conditionVo filters {column: "userName", action: "==", value: "wenyin"} sorting userName DESC
* @param customConditions filters {column: "userName", action: "==", value: "wenyin"} sorting userName DESC
* @param <T>
* @return
*/
public static <T> QueryWrapper<T> structure(ConditionVo<T> conditionVo) {
public static <T> QueryWrapper<T> structure(CustomConditions customConditions) {
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
String sorting = conditionVo.getSort();
String sorting = customConditions.getSort();
if(StringUtils.isEmpty(sorting)) {
sorting = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, sorting);
if(StringUtils.equalsIgnoreCase(conditionVo.getBy(), "DESC")) {
if(CustomConditions.ORDER_DESC.equals(customConditions.getBy())) {
queryWrapper.orderByDesc(sorting);
} else {
queryWrapper.orderByAsc(sorting);
}
}
if(CollectionUtils.isAnyEmpty(conditionVo.getFilters())) {
if(CollectionUtils.isAnyEmpty(customConditions.getFilters())) {
return queryWrapper;
}
for(FilterVo filterVo : conditionVo.getFilters()) {
String column = filterVo.getColumn();
for(CustomConditions.Condition condition : customConditions.getFilters()) {
String column = condition.getColumn();
column = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, column);
switch (filterVo.getAction()) {
switch (condition.getAction()) {
case "==" :
queryWrapper.eq(column, filterVo.getValue());
queryWrapper.eq(column, condition.getValue());
break;
case "!=" :
queryWrapper.ne(column, filterVo.getValue());
queryWrapper.ne(column, condition.getValue());
break;
case ">" :
queryWrapper.gt(column, filterVo.getValue());
queryWrapper.gt(column, condition.getValue());
break;
case "<" :
queryWrapper.lt(column, filterVo.getValue());
queryWrapper.lt(column, condition.getValue());
break;
case ">=" :
queryWrapper.ge(column, filterVo.getValue());
queryWrapper.ge(column, condition.getValue());
break;
case "<=" :
queryWrapper.le(column, filterVo.getValue());
queryWrapper.le(column, condition.getValue());
break;
case "like" :
queryWrapper.like(column, filterVo.getValue());
queryWrapper.like(column, condition.getValue());
break;
case "in" :
queryWrapper.in(column, filterVo.getValue());
queryWrapper.in(column, condition.getValue());
break;
case "notin" :
queryWrapper.notIn(column, filterVo.getValue());
queryWrapper.notIn(column, condition.getValue());
break;
case "betweeen" :
String[] strs = filterVo.getValue().split(",");
String[] strs = condition.getValue().split(",");
if(strs.length != 2) {
continue;
break;
}
queryWrapper.between(column, strs[0], strs[1]);
break;

35
win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/vo/ConditionVo.java

@ -1,35 +0,0 @@
package com.win.framework.mybatis.core.vo;
import com.win.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.util.List;
/**
* 自定义查询条件
*/
@Schema(description = "自定义查询条件")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ConditionVo<T> extends PageParam {
/**
* 排序字段
*/
private String sort;
/**
* 正序倒序
*/
private String by;
/**
* 检索字段
*/
private List<FilterVo> filters;
}

21
win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/vo/FilterVo.java

@ -1,21 +0,0 @@
package com.win.framework.mybatis.core.vo;
import lombok.Data;
@Data
public class FilterVo {
/**
* 类型,==,!=,>,<,>=,<=,like,in,notIn,betweeen,isNull,isNotNull
*/
private String action;
/**
* 字段
*/
private String column;
/**
*
*/
private String value;
}

4
win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/package-info.java

@ -1,4 +0,0 @@
/**
* 使用 MyBatis Plus 提升使用 MyBatis 的开发效率
*/
package com.win.framework.mybatis;
Loading…
Cancel
Save