此文章为个人笔记,考虑之后工作用到,博客方便于查找,
如果可以给他人提供参考价值,那再好不过
1.定义查询接口参数
package com.qy.code.generator.query;
import java.util.ArrayList;
import java.util.List;
import com.qy.code.generator.constant.OperatorConstants;
import com.qy.code.generator.utils.CodeArrayUtils;
/**
* 描述:查询类
* @author 七脉
*/
public class Query {
/**
* 当前页码
*/
private Integer pageNum;
/**
* 每页条数
*/
private Integer pageSize;
/**
* 查询包含并且 查询条件
*/
private List<Condition> andList;
/**
* 查询包含或查询条件
*/
private List<Condition> orList;
/**
* 查询包含分组查询条件
*/
private List<String> groupKeys;
/**
* 查询包含排序条件项
*/
private List<OrderBy> sorts;
/**
* and条件结合 and(a=1 and b=2 or c=1)
*/
private List<MultiCondition> andMultiConditionList;
/**
* or条件结合 or(a=1 and b=2 or c=1)
*/
private List<MultiCondition> orMultiConditionList;
/**
* map集合里的and和or两个key值,用于区分( a=1 ..or或and.. c=1)
*/
public static final String AND_CONDITIONS_KEY = "ands";
public static final String OR_CONDITIONS_KEY = "ors";
private String[] selectColumns;
private String table;
private List<Join> joinList;
/**
* 查询列 (表连接查询时,必填)
* @param columns
* @return
*/
public Query select(String... selectColumns) {
if(null!=selectColumns && selectColumns.length>0) {
this.selectColumns = selectColumns;
}
return this;
}
/**
* 查询表 (表连接查询时,必填)
* @param columns
* @return
*/
public Query from(String table) {
this.table = table;
return this;
}
/**
* 查询列
* @param columns
* @return
*/
public Query join(Join join) {
if(null==joinList) {
this.joinList = new ArrayList<>();
}
if(null!=join) {
this.joinList.add(join);
}
return this;
}
/**
* 私有化构造器
*/
public Query() {
}
/**
* 描述:静态构建对象方便方法连续调用
* @author 七脉
* @return
*/
public static Query create(){
return new Query();
}
/**
* 等于操作
* @param value
* @return
*/
public Query eq(String key, Object value){
return and(key, OperatorConstants.TYPE_EQ, value);
}
/**
* 不等于操作
* @param value
* @return
*/
public Query neq(String key, Object value){
return and(key, OperatorConstants.TYPE_NEQ, value);
}
/**
* 大于操作
* @param value
* @return
*/
public Query gt(String key, Object value){
return and(key, OperatorConstants.TYPE_GT, value);
}
/**
* 大于等于操作
* @param value
* @return
*/
public Query ge(String key, Object value){
return and(key, OperatorConstants.TYPE_GE, value);
}
/**
* 小于操作
* @param value
* @return
*/
public Query lt(String key, Object value){
return and(key, OperatorConstants.TYPE_LT, value);
}
/**
* 小于等于操作
* @param value
* @return
*/
public Query le(String key, Object value){
return and(key, OperatorConstants.TYPE_LE, value);
}
/**
* 模糊查询操作
* @param value
* @return
*/
public Query like(String key, Object value){
return and(key, OperatorConstants.TYPE_LIKE, value);
}
/**
* 左侧模糊查询操作
* @param value
* @return
*/
public Query leftlike(String key, Object value){
return and(key, OperatorConstants.TYPE_LLIKE, value);
}
/**
* 右侧模糊查询操作
* @param value
* @return
*/
public Query rightlike(String key, Object value){
return and(key, OperatorConstants.TYPE_RLIKE, value);
}
/**
* in()包含操作(之所以不用list,首先list反射去class泛型名字很慢,其次数组比集合要快)
* @param array 数组
* @return
*/
public Query in(String key, Object[] array){
if(null==array || array.length==0){
return this;
}
return and(key, OperatorConstants.TYPE_IN,array);
}
/**
* not in()不包含操作
* @param array 数组
* @return
*/
public Query notIn(String key, Object[] array) {
if(null==array || array.length==0){
return this;
}
return and(key, OperatorConstants.TYPE_NOT_IN,array);
}
/**
* 判空操作
* @return
*/
public Query isNull(String key){
return and(key, OperatorConstants.TYPE_IS_NULL, null);
}
/**
* 判非空操作
* @return
*/
public Query isNotNull(String key){
return and(key, OperatorConstants.TYPE_IS_NOT_NULL, null);
}
/**
* 判空字符串操作
* @return
*/
public Query isBlank(String key){
return and(key, OperatorConstants.TYPE_EQ, "");
}
/**
* 判非空字符串操作
* @return
*/
public Query isNotBlank(String key){
return and(key, OperatorConstants.TYPE_NEQ, "");
}
/**
* 描述:增加与条件
* @author 七脉
* @param key
* @param operator
* @param value
* @return
*/
public Query and(String key, String operator, Object value){
Condition condition = Condition.create(key, operator, value,true);
return and(condition);
}
/**
* 等于操作
* @param value
* @return
*/
public Query orEq(String key, Object value){
return or(key, OperatorConstants.TYPE_EQ, value);
}
/**
* 不等于操作
* @param value
* @return
*/
public Query orNeq(String key, Object value){
return or(key, OperatorConstants.TYPE_NEQ, value);
}
/**
* 大于操作
* @param value
* @return
*/
public Query orGt(String key, Object value){
return or(key, OperatorConstants.TYPE_GT, value);
}
/**
* 大于等于操作
* @param value
* @return
*/
public Query orGe(String key, Object value){
return or(key, OperatorConstants.TYPE_GE, value);
}
/**
* 小于操作
* @param value
* @return
*/
public Query orLt(String key, Object value){
return or(key, OperatorConstants.TYPE_LT, value);
}
/**
* 小于等于操作
* @param value
* @return
*/
public Query orLe(String key, Object value){
return or(key, OperatorConstants.TYPE_LE, value);
}
/**
* 模糊查询操作
* @param value
* @return
*/
public Query orLike(String key, Object value){
return or(key, OperatorConstants.TYPE_LIKE, value);
}
/**
* 左侧模糊查询操作
* @param value
* @return
*/
public Query orLeftlike(String key, Object value){
return or(key, OperatorConstants.TYPE_LLIKE, value);
}
/**
* 右侧模糊查询操作
* @param value
* @return
*/
public Query orRightlike(String key, Object value){
return or(key, OperatorConstants.TYPE_RLIKE, value);
}
/**
* in()包含操作(之所以不用list,首先list反射去class泛型名字很慢,其次数组比集合要快)
* @param array 数组
* @return
*/
public Query orIn(String key, Object[] array){
if(null==array || array.length==0){
return this;
}
return or(key, OperatorConstants.TYPE_IN,array);
}
/**
* not in()不包含操作
* @param array 数组
* @return
*/
public Query orNotIn(String key, Object[] array) {
if(null==array || array.length==0){
return this;
}
return or(key, OperatorConstants.TYPE_NOT_IN,array);
}
/**
* 判空操作
* @return
*/
public Query orIsNull(String key){
return or(key, OperatorConstants.TYPE_IS_NULL, null);
}
/**
* 判非空操作
* @return
*/
public Query orIsNotNull(String key){
return or(key, OperatorConstants.TYPE_IS_NOT_NULL, null);
}
/**
* 判空字符串操作
* @return
*/
public Query orIsBlank(String key){
return or(key, OperatorConstants.TYPE_EQ, "");
}
/**
* 判非空字符串操作
* @return
*/
public Query orIsNotBlank(String key){
return or(key, OperatorConstants.TYPE_NEQ, "");
}
/**
* and(a=1 and b=2 or c=1)形式查询
* @param condition
* @return
*/
public Query and(MultiCondition multiCondition) {
if(null!=multiCondition) {
if(null == this.andMultiConditionList) {
this.andMultiConditionList = new ArrayList<>();
}
this.andMultiConditionList.add(multiCondition);
}
return this;
}
/**
* and a=1 和 and(a=1 and b=2 or c=1)形式查询
* @param condition
* @return
*/
public Query and(Condition... condition) {
if(CodeArrayUtils.isNotEmpty(condition)) {
if(condition.length>1){
if(null == this.andMultiConditionList) {
this.andMultiConditionList = new ArrayList<>();
}
MultiCondition multiCondition = MultiCondition.create().add(condition);
this.andMultiConditionList.add(multiCondition);
}else{
if(this.andList == null){
this.andList = new ArrayList<Condition>();
}
this.andList.add(condition[0]);
return this;
}
}
return this;
}
/**
* or(a=1 and b=2 or c=1)形式查询
* @param condition
* @return
*/
public Query or(MultiCondition multiCondition) {
if(null!=multiCondition) {
if(null == this.orMultiConditionList) {
this.orMultiConditionList = new ArrayList<>();
}
this.orMultiConditionList.add(multiCondition);
}
return this;
}
/**
* 增加或条件 or a=1 和 or(a=1 and b=2 or c=1)形式查询
* @param conditions
* @return
*/
public Query or(Condition... condition) {
if(CodeArrayUtils.isNotEmpty(condition)) {
if(condition.length>1){
if(null == this.orMultiConditionList) {
this.orMultiConditionList = new ArrayList<>();
}
MultiCondition multiCondition = MultiCondition.create().add(condition);
this.orMultiConditionList.add(multiCondition);
}else{
if(this.orList == null){
this.orList = new ArrayList<Condition>();
}
this.orList.add(condition[0]);
return this;
}
}
return this;
}
/**
* 描述:where条件,支持连续调用
* @author 七脉
* @param condition
* @return
*/
public Query where(Condition condition){
if(null != condition){
if(condition.isAnd()){
if(this.andList == null){
this.andList = new ArrayList<Condition>();
}
this.andList.add(condition);
}else{
if(this.orList == null){
this.orList = new ArrayList<Condition>();
}
this.orList.add(condition);
}
}
return this;
}
/**
* 描述:增加或条件
* @author 七脉
* @param key
* @param operator
* @param value
* @return
*/
public Query or(String key, String operator, Object value){
Condition condition = Condition.create(key, operator, value, false);
return or(condition);
}
/**
* 描述:升序排序
* @param key 字段名称
* @return
*/
public Query asc(String key){
key = getColumn(key);
if(null != key){
if(this.sorts == null){
this.sorts = new ArrayList<OrderBy>();
}
this.sorts.add(OrderBy.asc(key));
}
return this;
}
/**
* 描述:降序排序
* @param key 字段名称
* @return
*/
public Query desc(String key){
key = getColumn(key);
if(null != key){
if(this.sorts == null){
this.sorts = new ArrayList<OrderBy>();
}
this.sorts.add(OrderBy.asc(key));
}
return this;
}
/**
* 增加分组条件
* @param groups
* @return
*/
public Query group(String... groupKeys){
if(null != groupKeys){
for(String key : groupKeys){
key = getColumn(key);
if(this.groupKeys == null){
this.groupKeys = new ArrayList<>();
}
this.groupKeys.add(key);
}
}
return this;
}
public Query limit(Integer pageNum, Integer pageSize) {
if(null==pageNum || 0==pageNum) {
this.pageNum = 1;
}else {
this.pageNum = pageNum;
}
if(null==pageSize || 0==pageSize) {
this.pageSize = 1;
}else {
this.pageSize = pageNum;
}
return this;
}
private String getColumn(String key) {
if(!key.contains("_")){
String newKey = "";
for(int i=0; i<key.length(); i++){
char ch = key.charAt(i);
if(Character.isUpperCase(ch)){
newKey += "_"+ch;
}else{
newKey += ch;
}
}
key = newKey;
}
return key;
}
public List<Condition> getAndList() {
return andList;
}
public List<Condition> getOrList() {
return orList;
}
public List<String> getGroupKeys() {
return groupKeys;
}
public List<OrderBy> getSorts() {
return sorts;
}
public List<MultiCondition> getAndMultiConditionList() {
return andMultiConditionList;
}
public List<MultiCondition> getOrMultiConditionList() {
return orMultiConditionList;
}
public static String getAndConditionsKey() {
return AND_CONDITIONS_KEY;
}
public static String getOrConditionsKey() {
return OR_CONDITIONS_KEY;
}
public String[] getSelectColumns() {
return selectColumns;
}
public String getTable() {
return table;
}
public List<Join> getJoinList() {
return joinList;
}
public Integer getPageNum() {
return pageNum;
}
public Integer getPageSize() {
return pageSize;
}
}
2.查询条件
package com.qy.code.generator.query;
import com.qy.code.generator.constant.OperatorConstants;
/**
* 描述:查询条件
* @author 七脉
*/
public class Condition {
/**
* 查询键(数据库表字段名称)
*/
private String key;
/**
* 操作符
*/
private String operator;
/**
* 查询条件值
*/
private Object value;
/**
* 非 and 即 or
*/
private boolean isAnd;
/**
* 构造器私有,使用方法创建
*/
private Condition(){}
/**
* 创建查询条件
* @param key 查询键
* @param operator 查询条件值
* @param value 查询值
*/
private Condition(String key, String operator, Object value, boolean isAnd) {
this.key = key;
this.operator = operator;
this.value = value;
this.isAnd = isAnd;
}
/**
* 供query类使用
* @param key
* @param operator
* @param value
* @return
*/
public static Condition create(String key, String operator, Object value, boolean isAnd) {
return operate(key, operator, value, isAnd);
}
/**
* 等于操作
* @param value
* @return
*/
public static Condition eq(String key, Object value){
return and(key, OperatorConstants.TYPE_EQ, value);
}
/**
* 不等于操作
* @param value
* @return
*/
public static Condition neq(String key, Object value){
return and(key, OperatorConstants.TYPE_NEQ, value);
}
/**
* 大于操作
* @param value
* @return
*/
public static Condition gt(String key, Object value){
return and(key, OperatorConstants.TYPE_GT, value);
}
/**
* 大于等于操作
* @param value
* @return
*/
public static Condition ge(String key, Object value){
return and(key, OperatorConstants.TYPE_GE, value);
}
/**
* 小于操作
* @param value
* @return
*/
public static Condition lt(String key, Object value){
return and(key, OperatorConstants.TYPE_LT, value);
}
/**
* 小于等于操作
* @param value
* @return
*/
public static Condition le(String key, Object value){
return and(key, OperatorConstants.TYPE_LE, value);
}
/**
* 模糊查询操作
* @param value
* @return
*/
public static Condition like(String key, Object value){
return and(key, OperatorConstants.TYPE_LIKE, value);
}
/**
* 左侧模糊查询操作
* @param value
* @return
*/
public static Condition leftlike(String key, Object value){
return and(key, OperatorConstants.TYPE_LLIKE, value);
}
/**
* 右侧模糊查询操作
* @param value
* @return
*/
public static Condition rightlike(String key, Object value){
return and(key, OperatorConstants.TYPE_RLIKE, value);
}
/**
* in()包含操作(之所以不用list,首先list反射去class泛型名字很慢,其次数组比集合要快)
* @param array 数组
* @return
*/
public static Condition in(String key, Object[] array){
if(null==array || array.length==0){
return null;
}
return and(key, OperatorConstants.TYPE_IN,array);
}
/**
* not in()不包含操作
* @param array 数组
* @return
*/
public static Condition notIn(String key, Object[] array) {
if(null==array || array.length==0){
return null;
}
return and(key, OperatorConstants.TYPE_NOT_IN,array);
}
/**
* 判空操作
* @return
*/
public static Condition isNull(String key){
return and(key, OperatorConstants.TYPE_IS_NULL, null);
}
/**
* 判非空操作
* @return
*/
public static Condition isNotNull(String key){
return and(key, OperatorConstants.TYPE_IS_NOT_NULL, null);
}
/**
* 判空字符串操作
* @return
*/
public static Condition isBlank(String key){
return and(key, OperatorConstants.TYPE_EQ, "");
}
/**
* 判非空字符串操作
* @return
*/
public static Condition isNotBlank(String key){
return and(key, OperatorConstants.TYPE_NEQ, "");
}
/**
* 等于操作
* @param value
* @return
*/
public static Condition orEq(String key, Object value){
return or(key, OperatorConstants.TYPE_EQ, value);
}
/**
* 不等于操作
* @param value
* @return
*/
public static Condition orNeq(String key, Object value){
return or(key, OperatorConstants.TYPE_NEQ, value);
}
/**
* 大于操作
* @param value
* @return
*/
public static Condition orGt(String key, Object value){
return or(key, OperatorConstants.TYPE_GT, value);
}
/**
* 大于等于操作
* @param value
* @return
*/
public static Condition orGe(String key, Object value){
return or(key, OperatorConstants.TYPE_GE, value);
}
/**
* 小于操作
* @param value
* @return
*/
public static Condition orLt(String key, Object value){
return or(key, OperatorConstants.TYPE_LT, value);
}
/**
* 小于等于操作
* @param value
* @return
*/
public static Condition orLe(String key, Object value){
return or(key, OperatorConstants.TYPE_LE, value);
}
/**
* 模糊查询操作
* @param value
* @return
*/
public static Condition orLike(String key, Object value){
return or(key, OperatorConstants.TYPE_LIKE, value);
}
/**
* 左侧模糊查询操作
* @param value
* @return
*/
public static Condition orLeftlike(String key, Object value){
return or(key, OperatorConstants.TYPE_LLIKE, value);
}
/**
* 右侧模糊查询操作
* @param value
* @return
*/
public static Condition orRightlike(String key, Object value){
return or(key, OperatorConstants.TYPE_RLIKE, value);
}
/**
* in()包含操作(之所以不用list,首先list反射去class泛型名字很慢,其次数组比集合要快)
* @param array 数组
* @return
*/
public static Condition orIn(String key, Object[] array){
if(null==array || array.length==0){
return null;
}
return or(key, OperatorConstants.TYPE_IN,array);
}
/**
* not in()不包含操作
* @param array 数组
* @return
*/
public static Condition orNotIn(String key, Object[] array) {
if(null==array || array.length==0){
return null;
}
return or(key, OperatorConstants.TYPE_NOT_IN,array);
}
/**
* 判空操作
* @return
*/
public static Condition orIsNull(String key){
return or(key, OperatorConstants.TYPE_IS_NULL, null);
}
/**
* 判非空操作
* @return
*/
public static Condition orIsNotNull(String key){
return or(key, OperatorConstants.TYPE_IS_NOT_NULL, null);
}
/**
* 判空字符串操作
* @return
*/
public static Condition orIsBlank(String key){
return or(key, OperatorConstants.TYPE_EQ, "");
}
/**
* 判不为空字符串操作
* @return
*/
public static Condition orIsNotBlank(String key){
return or(key, OperatorConstants.TYPE_EQ, "");
}
/**
* 描述:and条件
* @author 七脉
* @param key
* @param operator
* @param value
* @return
*/
public static Condition and(String key, String operator, Object value){
return operate(key, operator, value, true);
}
/**
* 描述:or条件
* @author 七脉
* @param key
* @param operator
* @param value
* @return
*/
public static Condition or(String key, String operator, Object value){
return operate(key, operator, value, false);
}
/**
* 创建连接及查询 条件值
* @param operate 连接符
* @param value 查询条件值
* @return
*/
private static Condition operate(String key, String operator, Object value, boolean isAnd){
if(null==key || null==operator || null==value || ""==key || ""==operator || ""==value){
return null;
}
if(!key.contains("_")){
String newKey = "";
for(int i=0; i<key.length(); i++){
char ch = key.charAt(i);
if(Character.isUpperCase(ch)){
newKey += "_"+ch;
}else{
newKey += ch;
}
}
key = newKey;
}
Condition condition = new Condition(key, operator, value, isAnd);
return condition;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public boolean isAnd() {
return isAnd;
}
public void setAnd(boolean isAnd) {
this.isAnd = isAnd;
}
}
3.多条件查询
package com.qy.code.generator.query;
import java.util.ArrayList;
import java.util.List;
import com.qy.code.generator.constant.OperatorConstants;
/**
* 描述:查询条件
* @author 七脉
*/
public class MultiCondition {
/**
* and条件集合
*/
private List<Condition> andList;
/**
* and条件集合
*/
private List<Condition> orList;
/**
* 构造器私有,使用方法创建
*/
private MultiCondition(){}
/**
* 实例化对象
* @return
*/
public static MultiCondition create(){
return new MultiCondition();
}
/**
* 等于操作
* @param value
* @return
*/
public MultiCondition eq(String key, Object value){
return and(key, OperatorConstants.TYPE_EQ, value);
}
/**
* 不等于操作
* @param value
* @return
*/
public MultiCondition neq(String key, Object value){
return and(key, OperatorConstants.TYPE_NEQ, value);
}
/**
* 大于操作
* @param value
* @return
*/
public MultiCondition gt(String key, Object value){
return and(key, OperatorConstants.TYPE_GT, value);
}
/**
* 大于等于操作
* @param value
* @return
*/
public MultiCondition ge(String key, Object value){
return and(key, OperatorConstants.TYPE_GE, value);
}
/**
* 小于操作
* @param value
* @return
*/
public MultiCondition lt(String key, Object value){
return and(key, OperatorConstants.TYPE_LT, value);
}
/**
* 小于等于操作
* @param value
* @return
*/
public MultiCondition le(String key, Object value){
return and(key, OperatorConstants.TYPE_LE, value);
}
/**
* 模糊查询操作
* @param value
* @return
*/
public MultiCondition like(String key, Object value){
return and(key, OperatorConstants.TYPE_LIKE, value);
}
/**
* 左侧模糊查询操作
* @param value
* @return
*/
public MultiCondition leftlike(String key, Object value){
return and(key, OperatorConstants.TYPE_LLIKE, value);
}
/**
* 右侧模糊查询操作
* @param value
* @return
*/
public MultiCondition rightlike(String key, Object value){
return and(key, OperatorConstants.TYPE_RLIKE, value);
}
/**
* in()包含操作(之所以不用list,首先list反射去class泛型名字很慢,其次数组比集合要快)
* @param array 数组
* @return
*/
public MultiCondition in(String key, Object[] array){
if(null==array || array.length==0){
return this;
}
return and(key, OperatorConstants.TYPE_IN,array);
}
/**
* not in()不包含操作
* @param array 数组
* @return
*/
public MultiCondition notIn(String key, Object[] array) {
if(null==array || array.length==0){
return this;
}
return and(key, OperatorConstants.TYPE_NOT_IN,array);
}
/**
* 判空操作
* @return
*/
public MultiCondition isNull(String key){
return and(key, OperatorConstants.TYPE_IS_NULL, null);
}
/**
* 判非空操作
* @return
*/
public MultiCondition isNotNull(String key){
return and(key, OperatorConstants.TYPE_IS_NOT_NULL, null);
}
/**
* 判空字符串操作
* @return
*/
public MultiCondition isBlank(String key){
return and(key, OperatorConstants.TYPE_EQ, "");
}
/**
* 判非空字符串操作
* @return
*/
public MultiCondition isNotBlank(String key){
return and(key, OperatorConstants.TYPE_NEQ, "");
}
/**
* 等于操作
* @param value
* @return
*/
public MultiCondition orEq(String key, Object value){
return or(key, OperatorConstants.TYPE_EQ, value);
}
/**
* 不等于操作
* @param value
* @return
*/
public MultiCondition orNeq(String key, Object value){
return or(key, OperatorConstants.TYPE_NEQ, value);
}
/**
* 大于操作
* @param value
* @return
*/
public MultiCondition orGt(String key, Object value){
return or(key, OperatorConstants.TYPE_GT, value);
}
/**
* 大于等于操作
* @param value
* @return
*/
public MultiCondition orGe(String key, Object value){
return or(key, OperatorConstants.TYPE_GE, value);
}
/**
* 小于操作
* @param value
* @return
*/
public MultiCondition orLt(String key, Object value){
return or(key, OperatorConstants.TYPE_LT, value);
}
/**
* 小于等于操作
* @param value
* @return
*/
public MultiCondition orLe(String key, Object value){
return or(key, OperatorConstants.TYPE_LE, value);
}
/**
* 模糊查询操作
* @param value
* @return
*/
public MultiCondition orLike(String key, Object value){
return or(key, OperatorConstants.TYPE_LIKE, value);
}
/**
* 左侧模糊查询操作
* @param value
* @return
*/
public MultiCondition orLeftlike(String key, Object value){
return or(key, OperatorConstants.TYPE_LLIKE, value);
}
/**
* 右侧模糊查询操作
* @param value
* @return
*/
public MultiCondition orRightlike(String key, Object value){
return or(key, OperatorConstants.TYPE_RLIKE, value);
}
/**
* in()包含操作(之所以不用list,首先list反射去class泛型名字很慢,其次数组比集合要快)
* @param array 数组
* @return
*/
public MultiCondition orIn(String key, Object[] array){
if(null==array || array.length==0){
return this;
}
return or(key, OperatorConstants.TYPE_IN,array);
}
/**
* not in()不包含操作
* @param array 数组
* @return
*/
public MultiCondition orNotIn(String key, Object[] array) {
if(null==array || array.length==0){
return this;
}
return or(key, OperatorConstants.TYPE_NOT_IN,array);
}
/**
* 判空操作
* @return
*/
public MultiCondition orIsNull(String key){
return or(key, OperatorConstants.TYPE_IS_NULL, null);
}
/**
* 判非空操作
* @return
*/
public MultiCondition orIsNotNull(String key){
return or(key, OperatorConstants.TYPE_IS_NOT_NULL, null);
}
/**
* 判空字符串操作
* @return
*/
public MultiCondition orIsBlank(String key){
return or(key, OperatorConstants.TYPE_EQ, "");
}
/**
* 判非空字符串操作
* @return
*/
public MultiCondition orIsNotBlank(String key){
return or(key, OperatorConstants.TYPE_NEQ, "");
}
/**
* 描述:增加与条件
* @author 七脉
* @param key
* @param operator
* @param value
* @return
*/
private MultiCondition and(String key, String operator, Object value){
Condition condition = Condition.create(key, operator, value,true);
return and(condition);
}
/**
* 描述:增加或条件
* @author 七脉
* @param key
* @param operator
* @param value
* @return
*/
private MultiCondition or(String key, String operator, Object value){
Condition condition = Condition.create(key, operator, value,false);
return or(condition);
}
/**
* 描述:增加与条件
* @author 七脉
* @param key
* @param operator
* @param value
* @return
*/
public MultiCondition and(Condition condition){
return add(condition);
}
/**
* 描述:增加或条件
* @author 七脉
* @param key
* @param operator
* @param value
* @return
*/
public MultiCondition or(Condition condition){
return add(condition);
}
/**
* 描述:增加与条件
* @author 七脉
* @param condition
* @return
*/
public MultiCondition add(Condition... condition){
for(Condition cdt : condition){
if(null==condition){
continue;
}
if(cdt.isAnd()){
if(this.andList == null){
this.andList = new ArrayList<Condition>();
}
this.andList.add(cdt);
}else{
if(this.orList == null){
this.orList = new ArrayList<Condition>();
}
this.orList.add(cdt);
}
}
return this;
}
public List<Condition> getAndList() {
return andList;
}
public void setAndList(List<Condition> andList) {
this.andList = andList;
}
public List<Condition> getOrList() {
return orList;
}
public void setOrList(List<Condition> orList) {
this.orList = orList;
}
}
4.连接表
package com.qy.code.generator.query;
import java.util.ArrayList;
import java.util.List;
import com.qy.code.generator.enums.JoinType;
import com.qy.code.generator.utils.CodeArrayUtils;
/**
* 连接类型 父类(不可定义为接口,因为重写方法都一样)
* @author 七脉
*/
public class Join {
/**
* 左连接表 查询列
*/
private String[] selectColumns;
/**
* 左连接表
*/
private String table;
/**
* on条件 主表列
*/
private String onMasterColumn;
/**
* on条件 左连接表列
*/
private String onJoinColumn;
/**
* where过滤掉件 and a = 1
*/
List<Condition> whereAndConditionList;
/**
* where过滤掉件 or a = 1
*/
List<Condition> whereOrConditionList;
/**
* where过滤掉件 and(a = 1 and b=2 or c=1)
*/
List<MultiCondition> whereAndMultiConditionList;
/**
* where过滤掉件 or(a = 1 and b=2 or c=1)
*/
List<MultiCondition> whereOrMultiConditionList;
/**
* 连接类型
*/
private JoinType joinType;
/**
* 私有化构造器
*/
private Join() {
}
/**
* 描述:静态构建对象实例
* @author 七脉
* @return
*/
public static Join createInnerJoin(String table){
Join join = new Join();
join.table = table;
join.joinType = JoinType.INNER_JOIN;
return join;
}
/**
* 描述:静态构建对象实例
* @author 七脉
* @return
*/
public static Join createLiftJoin(String table){
Join join = new Join();
join.table = table;
join.joinType = JoinType.LEFT_JOIN;
return join;
}
/**
* 连接表的查询列
* @param joinColumns
* @return
*/
public Join select(String... selectColumns) {
this.selectColumns = selectColumns;
return this;
}
/**
* 左连接 on 条件字段
* @param onMasterColumn
* @param onJoinColumn
* @return
*/
public Join on(String onMasterColumn, String onJoinColumn) {
this.onMasterColumn = onMasterColumn;
this.onJoinColumn = onJoinColumn;
return this;
}
/**
* where 后的 and条件
* @param condition
* @return
*/
public Join and(Condition... conditions) {
if(CodeArrayUtils.isNotEmpty(conditions)) {
if(this.whereAndConditionList == null) {
this.whereAndConditionList = new ArrayList<>();
}
for(Condition cdt : conditions) {
this.whereAndConditionList.add(cdt);
}
}
return this;
}
/**
* where 后的 or条件
* @param condition
* @return
*/
public Join or(Condition... conditions) {
if(CodeArrayUtils.isNotEmpty(conditions)) {
if(this.whereOrConditionList == null) {
this.whereOrConditionList = new ArrayList<>();
}
for(Condition cdt : conditions) {
this.whereOrConditionList.add(cdt);
}
}
return this;
}
/**
* where过滤掉件 and(a = 1 and b=2 or c=1)
* @param conditions
* @return
*/
public Join and(MultiCondition... conditions) {
if(CodeArrayUtils.isNotEmpty(conditions)) {
if(this.whereAndMultiConditionList == null) {
this.whereAndMultiConditionList = new ArrayList<>();
}
for(MultiCondition condition : conditions) {
this.whereAndMultiConditionList.add(condition);
}
}
return this;
}
/**
* where过滤掉件 or(a = 1 and b=2 or c=1)
* @param conditions
* @return
*/
public Join or(MultiCondition... conditions) {
if(CodeArrayUtils.isNotEmpty(conditions)) {
if(this.whereOrMultiConditionList == null) {
this.whereOrMultiConditionList = new ArrayList<>();
}
for(MultiCondition condition : conditions) {
this.whereOrMultiConditionList.add(condition);
}
}
return this;
}
public String[] getSelectColumns() {
return selectColumns;
}
public void setSelectColumns(String[] selectColumns) {
this.selectColumns = selectColumns;
}
public String getTable() {
return table;
}
public void setTable(String table) {
this.table = table;
}
public String getOnMasterColumn() {
return onMasterColumn;
}
public void setOnMasterColumn(String onMasterColumn) {
this.onMasterColumn = onMasterColumn;
}
public String getOnJoinColumn() {
return onJoinColumn;
}
public void setOnJoinColumn(String onJoinColumn) {
this.onJoinColumn = onJoinColumn;
}
public List<Condition> getWhereAndConditionList() {
return whereAndConditionList;
}
public List<Condition> getWhereOrConditionList() {
return whereOrConditionList;
}
public List<MultiCondition> getWhereAndMultiConditionList() {
return whereAndMultiConditionList;
}
public List<MultiCondition> getWhereOrMultiConditionList() {
return whereOrMultiConditionList;
}
public JoinType getJoinType() {
return joinType;
}
}
4.排序类
package com.qy.code.generator.query;
/**
* 描述:查询排序条件
* @author 七脉
*/
public class OrderBy {
/** 顺序排序 */
public final static String ASC = "asc";
/** 逆序排序 */
public final static String DESC = "desc";
/**
* 排序字段名称
*/
private String key;
/**
* 排序方式
* {@link #ASC}
* {@link #DESC}
*/
private String asc;
private OrderBy() {
}
/**
* 创建顺序排序条件项
* @param name
* @return
*/
public static OrderBy asc(String key){
OrderBy sort = new OrderBy();
sort.setKey(key);
sort.setAsc(ASC);
return sort;
}
/**
* 创建逆序排序条件项
* @param name
* @return
*/
public static OrderBy desc(String key){
OrderBy sort = new OrderBy();
sort.setKey(key);
sort.setAsc(DESC);
return sort;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getAsc() {
return asc;
}
public void setAsc(String asc) {
this.asc = asc;
}
@Override
public String toString() {
return getKey() + " " + getAsc();
}
}
使用场景:通过Query类定义查询条件,根据最终的Query条件,完成查询需求。
如:使用query生成JdbcTemplate所需SQL
或Mybatis Mapper定义好SQL模板,Query直接作为Mapper接口参数。