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; package com.win.framework.common.pojo;
import com.google.common.base.CaseFormat;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
@ -26,4 +27,38 @@ public class PageParam implements Serializable {
@Max(value = 100, message = "每页条数最大值为 100") @Max(value = 100, message = "每页条数最大值为 100")
private Integer pageSize = PAGE_SIZE; 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; 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.metadata.OrderItem;
import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.expression.Alias;
import net.sf.jsqlparser.schema.Column; import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table; import net.sf.jsqlparser.schema.Table;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
/** /**
* MyBatis 工具类 * MyBatis 工具类
@ -25,17 +22,13 @@ public class MyBatisUtils {
private static final String MYSQL_ESCAPE_CHARACTER = "`"; private static final String MYSQL_ESCAPE_CHARACTER = "`";
public static <T> Page<T> buildPage(PageParam pageParam) { 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()); Page<T> page = new Page<>(pageParam.getPageNo(), pageParam.getPageSize());
// 排序字段 // 排序字段
if (!CollectionUtil.isEmpty(sortingFields)) { if (!StringUtils.isEmpty(pageParam.getBy()) && !StringUtils.isEmpty(pageParam.getSort())) {
page.addOrder(sortingFields.stream().map(sortingField -> SortingField.ORDER_ASC.equals(sortingField.getOrder()) ? page.addOrder(PageParam.ORDER_ASC.equals(pageParam.getBy()) ? OrderItem.asc(pageParam.getSort()) : OrderItem.desc(pageParam.getSort()));
OrderItem.asc(sortingField.getField()) : OrderItem.desc(sortingField.getField())) } else {
.collect(Collectors.toList())); page.addOrder(OrderItem.desc("create_time"));
} }
return page; 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.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.base.CaseFormat; 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.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; import org.apache.commons.lang3.StringUtils;
/** /**
@ -14,59 +13,58 @@ public class QueryWrapperUtils {
/** /**
* 根据参数动态组装QueryWrapper * 根据参数动态组装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> * @param <T>
* @return * @return
*/ */
public static <T> QueryWrapper<T> structure(ConditionVo<T> conditionVo) { public static <T> QueryWrapper<T> structure(CustomConditions customConditions) {
QueryWrapper<T> queryWrapper = new QueryWrapper<>(); QueryWrapper<T> queryWrapper = new QueryWrapper<>();
String sorting = conditionVo.getSort(); String sorting = customConditions.getSort();
if(StringUtils.isEmpty(sorting)) { if(StringUtils.isEmpty(sorting)) {
sorting = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, sorting); if(CustomConditions.ORDER_DESC.equals(customConditions.getBy())) {
if(StringUtils.equalsIgnoreCase(conditionVo.getBy(), "DESC")) {
queryWrapper.orderByDesc(sorting); queryWrapper.orderByDesc(sorting);
} else { } else {
queryWrapper.orderByAsc(sorting); queryWrapper.orderByAsc(sorting);
} }
} }
if(CollectionUtils.isAnyEmpty(conditionVo.getFilters())) { if(CollectionUtils.isAnyEmpty(customConditions.getFilters())) {
return queryWrapper; return queryWrapper;
} }
for(FilterVo filterVo : conditionVo.getFilters()) { for(CustomConditions.Condition condition : customConditions.getFilters()) {
String column = filterVo.getColumn(); String column = condition.getColumn();
column = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, column); column = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, column);
switch (filterVo.getAction()) { switch (condition.getAction()) {
case "==" : case "==" :
queryWrapper.eq(column, filterVo.getValue()); queryWrapper.eq(column, condition.getValue());
break; break;
case "!=" : case "!=" :
queryWrapper.ne(column, filterVo.getValue()); queryWrapper.ne(column, condition.getValue());
break; break;
case ">" : case ">" :
queryWrapper.gt(column, filterVo.getValue()); queryWrapper.gt(column, condition.getValue());
break; break;
case "<" : case "<" :
queryWrapper.lt(column, filterVo.getValue()); queryWrapper.lt(column, condition.getValue());
break; break;
case ">=" : case ">=" :
queryWrapper.ge(column, filterVo.getValue()); queryWrapper.ge(column, condition.getValue());
break; break;
case "<=" : case "<=" :
queryWrapper.le(column, filterVo.getValue()); queryWrapper.le(column, condition.getValue());
break; break;
case "like" : case "like" :
queryWrapper.like(column, filterVo.getValue()); queryWrapper.like(column, condition.getValue());
break; break;
case "in" : case "in" :
queryWrapper.in(column, filterVo.getValue()); queryWrapper.in(column, condition.getValue());
break; break;
case "notin" : case "notin" :
queryWrapper.notIn(column, filterVo.getValue()); queryWrapper.notIn(column, condition.getValue());
break; break;
case "betweeen" : case "betweeen" :
String[] strs = filterVo.getValue().split(","); String[] strs = condition.getValue().split(",");
if(strs.length != 2) { if(strs.length != 2) {
continue; break;
} }
queryWrapper.between(column, strs[0], strs[1]); queryWrapper.between(column, strs[0], strs[1]);
break; 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