Browse Source

自定义查询条件和排序。

master
刘忱 2 years ago
parent
commit
116712ec36
  1. 83
      win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/util/QueryWrapperUtils.java
  2. 35
      win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/vo/ConditionVo.java
  3. 21
      win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/vo/FilterVo.java

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

@ -0,0 +1,83 @@
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.mybatis.core.vo.ConditionVo;
import com.win.framework.mybatis.core.vo.FilterVo;
/**
* QueryWrapper工具类
*/
public class QueryWrapperUtils {
/**
* 根据参数动态组装QueryWrapper
* @param conditionVo filters {column: "userName", action: "==", value: "wenyin"} sorting userName DESC
* @param <T>
* @return
*/
public static <T> QueryWrapper<T> structure(ConditionVo<T> conditionVo) {
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
String sorting = conditionVo.getSort();
if(sorting != null && !sorting.equals("")) {
sorting = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, sorting);
if(conditionVo.getBy() != null && conditionVo.getBy().equalsIgnoreCase("DESC")) {
queryWrapper.orderByDesc(sorting);
} else {
queryWrapper.orderByAsc(sorting);
}
}
if(conditionVo.getFilters() == null || conditionVo.getFilters().size() == 0) {
return queryWrapper;
}
for(FilterVo filterVo : conditionVo.getFilters()) {
String column = filterVo.getColumn();
column = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, column);
switch (filterVo.getAction()) {
case "==" :
queryWrapper.eq(column, filterVo.getValue());
break;
case "!=" :
queryWrapper.ne(column, filterVo.getValue());
break;
case ">" :
queryWrapper.gt(column, filterVo.getValue());
break;
case "<" :
queryWrapper.lt(column, filterVo.getValue());
break;
case ">=" :
queryWrapper.ge(column, filterVo.getValue());
break;
case "<=" :
queryWrapper.le(column, filterVo.getValue());
break;
case "like" :
queryWrapper.like(column, filterVo.getValue());
break;
case "in" :
queryWrapper.in(column, filterVo.getValue());
break;
case "notin" :
queryWrapper.notIn(column, filterVo.getValue());
break;
case "betweeen" :
String[] strs = filterVo.getValue().split(",");
if(strs.length != 2) {
continue;
}
queryWrapper.between(column, strs[0], strs[1]);
break;
case "isNull" :
queryWrapper.isNull(column);
break;
case "isNotNull" :
queryWrapper.isNotNull(column);
break;
default:
break;
}
}
return queryWrapper;
}
}

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

@ -0,0 +1,35 @@
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

@ -0,0 +1,21 @@
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;
}
Loading…
Cancel
Save