zoukankan      html  css  js  c++  java
  • JAVA自定义查询策略

    此文章为个人笔记,考虑之后工作用到,博客方便于查找,
    如果可以给他人提供参考价值,那再好不过

    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接口参数。

  • 相关阅读:
    算法复习——扫描线(hdu1542)
    hbase简单操作
    python操作Mongo数据库
    查看图片大小
    python修改图片格式
    python图片压缩
    python 图片抓取
    failed to lazily initialize a collection of role: could not initialize proxy
    failed to lazily initialize a collection of role: could not initialize proxy
    vim自动打开跳到上次的光标位置
  • 原文地址:https://www.cnblogs.com/zwcry/p/12035651.html
Copyright © 2011-2022 走看看