自定义表数据操作

参数实体类

自定义Db实例

public class CustomizeDbExamle {

    /**
     * 更新数据参数
     */
    private Map<String,Object> updateParameter;

    /**
     * 插入数据参数
     */
    private Map<String,Object> insertParameter;

    /**
     * 表名称
     */
    private String tableName;

    /**
     * 条件参数 and
     */
    private CustomizeConditionArr conditionParameters;

    /**
     * 当具有or的条件参数时使用 or (and) 情况使用
     */
    private List<CustomizeConditionArr> orParameters;

    /**
     * 当具有or的条件参数时使用 and (or) 情况使用
     */
    private List<CustomizeConditionArr> andParameters;

    public CustomizeDbExamle() {
        orParameters = new ArrayList<>();
        andParameters = new ArrayList<>();
    }

    public Map<String, Object> getUpdateParameter() {
        return updateParameter;
    }

    public void setUpdateParameter(Map<String, Object> updateParameter) {
        this.updateParameter = updateParameter;
    }

    public Map<String, Object> getInsertParameter() {
        return insertParameter;
    }

    public void setInsertParameter(Map<String, Object> insertParameter) {
        this.insertParameter = insertParameter;
    }

    public String getTableName() {
        return tableName;
    }

    public void setTableName(String tableName) {
        this.tableName = tableName;
    }

    public CustomizeConditionArr getConditionParameters() {
        return conditionParameters;
    }

    public void setConditionParameters(CustomizeConditionArr conditionParameters) {
        this.conditionParameters = conditionParameters;
    }

    public void setOrParameters(List<CustomizeConditionArr> orParameters) {
        this.orParameters = orParameters;
    }

    public List<CustomizeConditionArr> getOrParameters() {
        return orParameters;
    }

    public List<CustomizeConditionArr> getAndParameters() {
        return andParameters;
    }

    public void setAndParameters(List<CustomizeConditionArr> andParameters) {
        this.andParameters = andParameters;
    }

    public void or(CustomizeConditionArr orParameters) {
        this.orParameters.add(orParameters);
    }

    public void and(CustomizeConditionArr andParameters) {
        this.andParameters.add(andParameters);
    }

    public CustomizeConditionArr createCustomizeConditionArr(){
        CustomizeConditionArr conditionParameters = new CustomizeConditionArr();
        if(this.conditionParameters==null){
            this.conditionParameters = conditionParameters;
        }
        return conditionParameters;
    }

    public static void main(String[] args){
        CustomizeDbExamle customizeDbExamle = new CustomizeDbExamle();
        customizeDbExamle.setTableName("test");
        CustomizeConditionArr customizeConditionArr = customizeDbExamle.createCustomizeConditionArr();
        customizeConditionArr.addEqualTo("test","condition","value");
        customizeConditionArr.addEqualTo("test","condition1","value1");
        CustomizeConditionArr customizeConditionArr1 = customizeDbExamle.createCustomizeConditionArr();
        customizeConditionArr1.addEqualTo("test","conditionOr","conditionOr");
        customizeConditionArr1.addEqualTo("test","conditionOr1","conditionOr1");
        customizeDbExamle.or(customizeConditionArr1);
        CustomizeConditionArr customizeConditionArr2 = customizeDbExamle.createCustomizeConditionArr();
        customizeConditionArr2.addEqualTo("test","conditionOrTwo","conditionOrTwo");
        customizeConditionArr2.addEqualTo("test","conditionOrTwo1","conditionOrTwo1");
        customizeDbExamle.and(customizeConditionArr2);
        System.out.println(JSONObject.toJSONString(param));
    }
}

封装自定义条件组

public class CustomizeConditionArr {

    private static Properties properties = ResourceUtils.getDefaultResourceAsProperties("condition.properties");

    private List<CustomizeCondition> customizeConditions;

    public CustomizeConditionArr() {
        this.customizeConditions = new ArrayList<>();
    }

    public List<CustomizeCondition> getCustomizeConditions() {
        return customizeConditions;
    }

    public void setCustomizeConditions(List<CustomizeCondition> customizeConditions) {
        this.customizeConditions = customizeConditions;
    }
    /**
     * @author:zyp
     * @description 值为null
     * @date: 2020/8/21 10:24
     * @return
     */
    public void addIsNull(String tableName,String condition){
        customizeConditions.add(new CustomizeCondition(tableName,condition,null,properties.getProperty("IsNull")));
    }

    /**
     * @author:zyp
     * @description 值不为null
     * @date: 2020/8/21 10:24
     * @return
     */
    public void addIsNotNull(String tableName,String condition){
        customizeConditions.add(new CustomizeCondition(tableName,condition,null,properties.getProperty("IsNotNull")));
    }

    /**
     * @author:zyp
     * @description 等于
     * @date: 2020/8/21 10:21
     * @return 
     */
    public void addEqualTo(String tableName,String condition,Object value){
        customizeConditions.add(new CustomizeCondition(tableName,condition,value,properties.getProperty("EqualTo")));
    }

   /**
     * @author:zyp
     * @description 不等于
     * @date: 2020/8/21 10:21
     * @return
     */
    public void addNotEqualTo(String tableName,String condition,Object value){
        customizeConditions.add(new CustomizeCondition(tableName,condition,value,properties.getProperty("NotEqualTo")));
    }

   /**
     * @author:zyp
     * @description 大于
     * @date: 2020/8/21 10:21
     * @return
     */
    public void addGreaterThan(String tableName,String condition,Object value){
        customizeConditions.add(new CustomizeCondition(tableName,condition,value,properties.getProperty("GreaterThan")));
    }

   /**
     * @author:zyp
     * @description 大于或等于
     * @date: 2020/8/21 10:21
     * @return
     */
    public void addGreaterThanOrEqualTo(String tableName,String condition,Object value){
        customizeConditions.add(new CustomizeCondition(tableName,condition,value,properties.getProperty("GreaterThanOrEqualTo")));
    }

   /**
     * @author:zyp
     * @description 小于
     * @date: 2020/8/21 10:21
     * @return
     */
    public void addLessThan(String tableName,String condition,Object value){
        customizeConditions.add(new CustomizeCondition(tableName,condition,value,properties.getProperty("LessThan")));
    }

   /**
     * @author:zyp
     * @description 小于或等于
     * @date: 2020/8/21 10:21
     * @return
     */
    public void addLessThanOrEqualTo(String tableName,String condition,Object value){
        customizeConditions.add(new CustomizeCondition(tableName,condition,value,properties.getProperty("LessThanOrEqualTo")));
    }

   /**
     * @author:zyp
     * @description in
     * @date: 2020/8/21 10:21
     * @return
     */
    public void addIn(String tableName,String condition,Object value){
        customizeConditions.add(new CustomizeCondition(tableName,condition,value,properties.getProperty("In")));
    }

   /**
     * @author:zyp
     * @description not in
     * @date: 2020/8/21 10:21
     * @return
     */
    public void addNotIn(String tableName,String condition,Object value){
        customizeConditions.add(new CustomizeCondition(tableName,condition,value,properties.getProperty("NotIn")));
    }

   /**
     * @author:zyp
     * @description 在两者之间
     * @date: 2020/8/21 10:21
     * @return
     */
    public void addBetween(String tableName,String condition,Object value,Object secondValue){
        customizeConditions.add(new CustomizeCondition(tableName,condition,value,secondValue,properties.getProperty("Between")));
    }

   /**
     * @author:zyp
     * @description 不在两者之间
     * @date: 2020/8/21 10:21
     * @return
     */
    public void addNotBetween(String tableName,String condition,Object value,Object secondValue){
        customizeConditions.add(new CustomizeCondition(tableName,condition,value,secondValue,properties.getProperty("NotBetween")));
    }

   /**
     * @author:zyp
     * @description 排序
     * @date: 2020/8/21 10:21
     * @return
     */
    public void addOrderBy(String tableName,String condition,Object value){
        customizeConditions.add(new CustomizeCondition(tableName,condition,value,properties.getProperty("OrderBy")));
    }

   /**
     * @author:zyp
     * @description Limit
     * @date: 2020/8/21 10:21
     * @return
     */
    public void addLimit(String tableName,String condition,Object value,Object secondValue){
        customizeConditions.add(new CustomizeCondition(tableName,condition,value,secondValue,properties.getProperty("Limit")));
    }

   /**
     * @author:zyp
     * @description Like
     * @date: 2020/8/21 10:21
     * @return
     */
    public void addLike(String tableName,String condition,Object value){
        customizeConditions.add(new CustomizeCondition(tableName,condition,value,properties.getProperty("Like")));
    }

   /**
     * @author:zyp
     * @description NotLike
     * @date: 2020/8/21 10:21
     * @return
     */
    public void NotLike(String tableName,String condition,Object value){
        customizeConditions.add(new CustomizeCondition(tableName,condition,value,properties.getProperty("NotLike")));
    }
}

CustomizeCondition自定义条件对象

public class CustomizeCondition {

    private String tableName;

    //字段  对该字段进行查询
    private String condition;

    //查询数值1  针对于查询时只需要一个参数的条件使用  入> = <
    private Object value;

    //查询数值1  针对于查询时需要两个参数的条件使用  入between
    private Object secondValue;

    //查询方式  > = < in等等
    private String type;

    public CustomizeCondition() {
    }

    public CustomizeCondition(String tableName, String condition, Object value, String type) {
        this(tableName,condition,value,null,type);
    }

    public CustomizeCondition(String tableName, String condition, Object value, Object secondValue, String type) {
        this.tableName = tableName;
        this.condition = condition;
        this.value = value;
        this.secondValue = secondValue;
        this.type = type;
    }

    public String getTableName() {
        return tableName;
    }

    public void setTableName(String tableName) {
        this.tableName = tableName;
    }

    public String getCondition() {
        return condition;
    }

    public void setCondition(String condition) {
        this.condition = condition;
    }

    public Object getValue() {
        return value;
    }

    public void setValue(Object value) {
        this.value = value;
    }

    public Object getSecondValue() {
        return secondValue;
    }

    public void setSecondValue(Object secondValue) {
        this.secondValue = secondValue;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

共用方法

 	/**
     * @author:zyp
     * @description 根据表名获取表的所有字段
     * @date: 2020/4/1 9:12
     * @return
     */
    private List<TbTableColDefine> getTbTableColDefines(String tableName){
        List<TbTableColDefine> tbTableColDefines;
        TbTableDefineExample tbTableDefineExample = new TbTableDefineExample();
        TbTableDefineExample.Criteria criteria = tbTableDefineExample.createCriteria();
        criteria.andTableNmEqualTo(tableName);
        List<TbTableDefine> tbTableDefines = clusterTbTableDefineMapper.selectByExample(tbTableDefineExample);
        if(tbTableDefines!=null && tbTableDefines.size()>0){
            TbTableDefine tbTableDefine = tbTableDefines.get(0);
            Integer id = tbTableDefine.getId();
            TbTableColDefineExample tbTableColDefineExample = new TbTableColDefineExample();
            TbTableColDefineExample.Criteria criteria1 = tbTableColDefineExample.createCriteria();
            criteria1.andTableidEqualTo(id);
            tbTableColDefines = clusterTbTableColDefineMapper.selectByExample(tbTableColDefineExample);
        }else{
            tbTableColDefines = new ArrayList<>();
        }
        return tbTableColDefines;
    }

	/**
     * @author:zyp
     * @description 获取所有表字段,以及其外键关系
     * @return List<List<String>> 内部list为包装的每个表字段的转义返回方式以及关联关系  0:当前表字段  1:关联表名 2:关联表字段 3:转义后的字段
     * @date: 2020/4/24 14:01
     * @return 
     */
    public static List<List<String>> getTableColRelate(List<TbTableColDefine> tbTableColDefines){
        List<List<String>> selectList = new ArrayList<>();
        tbTableColDefines.forEach((TbTableColDefine tbTableColDefine) ->{
            List<String> templist = new ArrayList<>();
            String fieldName = tbTableColDefine.getFieldName();
            Integer relateType = tbTableColDefine.getRelateType();
            //当字典时使用,该字段在join中使用
            String dictCode = tbTableColDefine.getDictCode();
            if(relateType!=null&&relateType!=0){
                switch (relateType){
                    //字典
                    case 1:
                        templist.add(fieldName);
                        templist.add("tb_dictionary");
                        String relateColDic = tbTableColDefine.getRelateCol();
                        String relateShowValueDic = tbTableColDefine.getRelateShowValue();
                        templist.add(relateColDic);
                        templist.add(relateShowValueDic);
                        templist.add(dictCode);
                        break;
                    case 2:
                        String relateTb = tbTableColDefine.getRelateTb();
                        String relateCol = tbTableColDefine.getRelateCol();
                        String relateShowValue = tbTableColDefine.getRelateShowValue();
                        templist.add(fieldName);
                        templist.add(relateTb);
                        templist.add(relateCol);
                        templist.add(relateShowValue);
                        break;
                    default :
                        templist.add(fieldName);
                }
            }else{
                templist.add(fieldName);
            }
            selectList.add(templist);
        });
        return selectList;
    }
    
	/**
     * @author:zyp
     * @description 编写sql(简单查询)
     * @date: 2020/3/18 15:46
     * @return
     */
    public static String compileSelectSQL(List<List<String>> selectList,String tableName, CustomizeDbExamle customizeDbExamle){
        StringBuffer relateString = new StringBuffer();
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("select ");
        if(selectList!=null&&selectList.size()>0){
            int index = 0;
            for(List<String> selects : selectList){
                //selects!=0 说明此表字段在数据库中可查,为字段名的集合
                if(selects.size()!=0){
                    //当list大于一时,证明该字段需要与外表关联转义
                    if (selects.size()>1){
                        String fieldName = selects.get(0);
                        String relateTb = selects.get(1);
                        String relateCol = selects.get(2);
                        String relateShowValue = selects.get(3);
                        if(selects.size()!=5){
                            stringBuffer.append(relateTb+"."+relateShowValue + " as "+ fieldName +",");
                            relateString.append(" left join "+ relateTb + " as " + relateTb + " ON " + tableName+"."+fieldName+"="+relateTb+"."+relateCol);
                        }else{
                            //如果当前为字典表(字典表的数组长度为5),需要将字典表的表名加数据
                            String dictCode = selects.get(4);
                            stringBuffer.append(relateTb + index + "."+relateShowValue + " as "+ fieldName +",");
                            relateString.append(" left join "+ relateTb + " as " + relateTb + index + " ON " + tableName+"."+fieldName+"="+relateTb + index +"."+relateCol+" and " + relateTb + index + ".pid="+dictCode);
                        }
                    }else{
                        stringBuffer.append(tableName+"."+selects.get(0) + ",");
                    }
                    index++;
                }else{
                    //如果无关联 则查询增加 * 符号,但只能增加一个
                    if(stringBuffer.indexOf("*")==-1){
                        stringBuffer.append(" * ");
                    }
                }
            }
        }else{
            stringBuffer.append(" * ");
        }
        stringBuffer.deleteCharAt(stringBuffer.length()-1);
        stringBuffer.append(" from " + tableName + " as " + tableName);
        stringBuffer.append(relateString);
        //条件编写
        String conditionString = conditionSql(customizeDbExamle);
        String sql = stringBuffer.append(conditionString).toString();
        System.out.println(sql);
        return sql;
    }
	/**
     * @author:zyp
     * @description 条件sql编写
     * @date: 2020/4/2 17:19
     * @return
     */
    public static String conditionSql(CustomizeDbExamle customizeDbExamle){
        //条件添加
        CustomizeConditionArr conditionParameters = customizeDbExamle.getConditionParameters();
        List<CustomizeConditionArr> orParameters = customizeDbExamle.getOrParameters();
        List<CustomizeConditionArr> andParameters = customizeDbExamle.getAndParameters();
        //针对条件、分页 以及 顺序排列 单独列出
        StringBuffer conditionBuffer = new StringBuffer();
        StringBuffer limitBuffer = new StringBuffer();
        StringBuffer orderByBuffer = new StringBuffer();
        //当条件参数的长度大于零时,则代表当前具有条件查询
        if (conditionParameters != null&& conditionParameters.getCustomizeConditions()!=null&& conditionParameters.getCustomizeConditions().size() > 0) {
            conditionParameters.getCustomizeConditions().forEach(condition -> {
                //当前数据查询条件方式
                String type = condition.getType();
                ConditionExample conditionExample = (ConditionExample) ConditionUtil.STRATEGYMAP.get(condition.getType());
                String handleSql = conditionExample.handleSql(condition);
                if ("OrderBy".equals(type)) {
                    orderByBuffer.append(" " + handleSql + " ");
                } else if ("Limit".equals(type)) {
                    if((databaseIndex != EcloudLibraryTableConstans.DATABASE_INDEX.JILEI.getValue())){
                        limitBuffer.append(" " + handleSql + " ");
                    }else{
                        limitBuffer.append(" LIMIT "+condition.getSecondValue()+" OFFSET "+condition.getValue()+" ");
                    }
                } else {
                    conditionBuffer.append(" " + handleSql + " and ");
                }
            });
        }
        if(StringUtils.isBlank(conditionBuffer)){
            conditionBuffer.append("1 = 1 and ");
        }
        //或的逻辑处理  or (and)
        if(orParameters != null && orParameters.size() > 0){
            //当将之前的最后一个and 删除
            if (conditionBuffer.length() != 0&&conditionBuffer.indexOf("or",0)==-1) {
                conditionBuffer.delete(conditionBuffer.lastIndexOf("and"), conditionBuffer.length());
            }

            //遍历或的数组,获取每个或的数组数据
            orParameters.forEach(orParameter->{
                List<CustomizeCondition> customizeConditions = orParameter.getCustomizeConditions();
                if(customizeConditions!=null&&customizeConditions.size()>0){
                    conditionBuffer.append("or (");
                    //遍历每个或数组的数据
                    customizeConditions.forEach(customizeCondition -> {
                        ConditionExample conditionExample = (ConditionExample) ConditionUtil.STRATEGYMAP.get(customizeCondition.getType());
                        String handleSql = conditionExample.handleSql(customizeCondition);
                        conditionBuffer.append(" " + handleSql + " and ");
                    });
                    //在最后收尾时,把最后一个and删除
                    conditionBuffer.delete(conditionBuffer.lastIndexOf("and"), conditionBuffer.length()).toString();
                    conditionBuffer.append(" ) ");
                }
            });
        }
        //and的逻辑处理  and (or)
        if(andParameters != null && andParameters.size() > 0){
            //因为开头即为and进行内容获取  故不需要删除,但需要判断是否已经进行了或逻辑处理,如果或逻辑处理了,那么这里就需要增加and
            if (conditionBuffer.length() != 0&&conditionBuffer.lastIndexOf(")")!=conditionBuffer.length()-2) {
                conditionBuffer.delete(conditionBuffer.lastIndexOf("and"), conditionBuffer.length());
            }
            //遍历或的数组,获取每个或的数组数据
            andParameters.forEach(andParameter->{
                List<CustomizeCondition> customizeConditions = andParameter.getCustomizeConditions();
                if(customizeConditions!=null&&customizeConditions.size()>0){
                    conditionBuffer.append("and (");
                    //遍历每个或数组的数据
                    customizeConditions.forEach(customizeCondition -> {
                        ConditionExample conditionExample = (ConditionExample) ConditionUtil.STRATEGYMAP.get(customizeCondition.getType());
                        String handleSql = conditionExample.handleSql(customizeCondition);
                        conditionBuffer.append(" " + handleSql + " or ");
                    });
                    //在最后收尾时,把最后一个and删除
                    conditionBuffer.delete(conditionBuffer.lastIndexOf("or"), conditionBuffer.length()).toString();
                    conditionBuffer.append(" ) ");
                }
            });
        }else{
            if(conditionBuffer.indexOf("and")!=-1&&conditionBuffer.lastIndexOf(")")!=conditionBuffer.length()-2){
                conditionBuffer.delete(conditionBuffer.lastIndexOf("and"), conditionBuffer.length());
            }
        }
        //完成逻辑处理之后的条件查询数据
        String finishConditionBuffer = "";
        if(conditionBuffer!=null&&conditionBuffer.length()!=0){
            finishConditionBuffer = " where " + conditionBuffer.toString();
        }
        String conditionString = finishConditionBuffer + orderByBuffer.toString() + limitBuffer.toString();
        return conditionString;
    }

拼接sql条件时使用(仿照逆向工程中的Criteria写法去做)

public interface ConditionExample {

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    String handleSql(CustomizeCondition customizeCondition);

}

/**
 * @author:zyp
 * @description isNull条件
 * @date: 2020/3/20 11:52
 * @return
 */
class IsNullCondition implements ConditionExample {

    @Override
    public String handleSql(CustomizeCondition customizeCondition) {
        ConditionUtil.checkoutConditionParameter(customizeCondition.getCondition());
        return (StringUtils.isBlank(customizeCondition.getTableName())?"":(StringUtils.isBlank(customizeCondition.getTableName())?"":customizeCondition.getTableName()+"."))+customizeCondition.getCondition() + " Is Null";
    }
}

/**
 * @author:zyp
 * @description isNotNull条件
 * @date: 2020/3/20 11:52
 * @return
 */
class IsNotNullCondition implements ConditionExample {

    @Override
    public String handleSql(CustomizeCondition customizeCondition) {
        ConditionUtil.checkoutConditionParameter(customizeCondition.getCondition());
        return (StringUtils.isBlank(customizeCondition.getTableName())?"":(StringUtils.isBlank(customizeCondition.getTableName())?"":customizeCondition.getTableName()+"."))+customizeCondition.getCondition() + " Is Not Null";
    }
}

/**
 * @author:zyp
 * @description 相等条件
 * @date: 2020/3/20 11:52
 * @return
 */
class EqualToCondition implements ConditionExample {

    @Override
    public String handleSql(CustomizeCondition customizeCondition) {
        ConditionUtil.checkoutConditionParameter(customizeCondition.getCondition(),customizeCondition.getValue(),customizeCondition.getCondition());
        return (StringUtils.isBlank(customizeCondition.getTableName())?"":(StringUtils.isBlank(customizeCondition.getTableName())?"":customizeCondition.getTableName()+"."))+customizeCondition.getCondition() + " = '" + customizeCondition.getValue()+"'";
    }
}

/**
 * @author:zyp
 * @description 不相等条件
 * @date: 2020/3/20 11:52
 * @return
 */
class NotEqualToCondition implements ConditionExample {

    @Override
    public String handleSql(CustomizeCondition customizeCondition) {
        ConditionUtil.checkoutConditionParameter(customizeCondition.getCondition(),customizeCondition.getValue(),customizeCondition.getCondition());
        return (StringUtils.isBlank(customizeCondition.getTableName())?"":(StringUtils.isBlank(customizeCondition.getTableName())?"":customizeCondition.getTableName()+"."))+customizeCondition.getCondition() + " <> '" + customizeCondition.getValue()+"'";
    }
}

/**
 * @author:zyp
 * @description 大于条件
 * @date: 2020/3/20 11:52
 * @return
 */
class GreaterThanCondition implements ConditionExample {

    @Override
    public String handleSql(CustomizeCondition customizeCondition) {
        ConditionUtil.checkoutConditionParameter(customizeCondition.getCondition(),customizeCondition.getValue(),customizeCondition.getCondition());
        return (StringUtils.isBlank(customizeCondition.getTableName())?"":(StringUtils.isBlank(customizeCondition.getTableName())?"":customizeCondition.getTableName()+"."))+customizeCondition.getCondition() + " > '" + customizeCondition.getValue()+"'";
    }
}

/**
 * @author:zyp
 * @description 大于或等于条件
 * @date: 2020/3/20 11:52
 * @return
 */
class GreaterThanOrEqualToCondition implements ConditionExample {

    @Override
    public String handleSql(CustomizeCondition customizeCondition) {
        ConditionUtil.checkoutConditionParameter(customizeCondition.getCondition(),customizeCondition.getValue(),customizeCondition.getCondition());
        return (StringUtils.isBlank(customizeCondition.getTableName())?"":(StringUtils.isBlank(customizeCondition.getTableName())?"":customizeCondition.getTableName()+"."))+customizeCondition.getCondition() + " >= '" + customizeCondition.getValue()+"'";
    }
}

/**
 * @author:zyp
 * @description 小于条件
 * @date: 2020/3/20 11:52
 * @return
 */
class LessThanCondition implements ConditionExample {

    @Override
    public String handleSql(CustomizeCondition customizeCondition) {
        ConditionUtil.checkoutConditionParameter(customizeCondition.getCondition(),customizeCondition.getValue(),customizeCondition.getCondition());
        return (StringUtils.isBlank(customizeCondition.getTableName())?"":customizeCondition.getTableName()+".")+customizeCondition.getCondition() + " < '" + customizeCondition.getValue()+"'";
    }
}

/**
 * @author:zyp
 * @description 小于或等于条件
 * @date: 2020/3/20 11:52
 * @return
 */
class LessThanOrEqualToCondition implements ConditionExample {

    @Override
    public String handleSql(CustomizeCondition customizeCondition) {
        ConditionUtil.checkoutConditionParameter(customizeCondition.getCondition(),customizeCondition.getValue(),customizeCondition.getCondition());
        return (StringUtils.isBlank(customizeCondition.getTableName())?"":customizeCondition.getTableName()+".")+customizeCondition.getCondition() + " <= '" + customizeCondition.getValue()+"'";
    }
}

/**
 * @author:zyp
 * @description in条件
 * @date: 2020/3/20 11:52
 * @return
 */
class InCondition implements ConditionExample {

    @Override
    public String handleSql(CustomizeCondition customizeCondition) {
        ConditionUtil.checkoutConditionParameter(customizeCondition.getCondition(),customizeCondition.getValue(),customizeCondition.getCondition());
        List<Object> list = (List<Object>) customizeCondition.getValue();
        StringBuffer sb = new StringBuffer();
        list.forEach(obj->{
            if(obj instanceof Date){
                String format = sdf.format(obj);
                sb.append("'"+format + "',");
            }else{
                sb.append("'"+obj + "',");
            }
        });
        sb.deleteCharAt(sb.length()-1);
        return (StringUtils.isBlank(customizeCondition.getTableName())?"":customizeCondition.getTableName()+".")+customizeCondition.getCondition() + " in (" + sb.toString()+")";
    }
}

/**
 * @author:zyp
 * @description notin条件
 * @date: 2020/3/20 11:52
 * @return
 */
class NotInCondition implements ConditionExample {

    @Override
    public String handleSql(CustomizeCondition customizeCondition) {
        ConditionUtil.checkoutConditionParameter(customizeCondition.getCondition(),customizeCondition.getValue(),customizeCondition.getCondition());
        List<Object> list = (List<Object>) customizeCondition.getValue();
        StringBuffer sb = new StringBuffer();
        list.forEach(obj->{
            if(obj instanceof Date){
                String format = sdf.format(obj);
                sb.append("'"+format + "',");
            }else{
                sb.append("'"+obj + "',");
            }
        });
        sb.deleteCharAt(sb.length()-1);
        return (StringUtils.isBlank(customizeCondition.getTableName())?"":customizeCondition.getTableName()+".")+customizeCondition.getCondition() + " not in (" + sb.toString()+")";
    }
}

/**
 * @author:zyp
 * @description Like条件
 * @date: 2020/3/20 11:52
 * @return
 */
class LikeCondition implements ConditionExample {

    @Override
    public String handleSql(CustomizeCondition customizeCondition) {
        ConditionUtil.checkoutConditionParameter(customizeCondition.getCondition(),customizeCondition.getValue(),customizeCondition.getCondition());
        return (StringUtils.isBlank(customizeCondition.getTableName())?"":customizeCondition.getTableName()+".")+customizeCondition.getCondition() + " Like " +" '%" + customizeCondition.getValue() +"%' ";
    }
}

/**
 * @author:zyp
 * @description NotLike条件
 * @date: 2020/3/20 11:52
 * @return
 */
class NotLikeCondition implements ConditionExample {

    @Override
    public String handleSql(CustomizeCondition customizeCondition) {
        ConditionUtil.checkoutConditionParameter(customizeCondition.getCondition(),customizeCondition.getValue(),customizeCondition.getCondition());
        return (StringUtils.isBlank(customizeCondition.getTableName())?"":customizeCondition.getTableName()+".")+customizeCondition.getCondition() + " not Like " +" '%" + customizeCondition.getValue() +"%' ";
    }
}

/**
 * @author:zyp
 * @description between条件
 * @date: 2020/3/20 11:52
 * @return
 */
class BetweenCondition implements ConditionExample {

    @Override
    public String handleSql(CustomizeCondition customizeCondition) {
        ConditionUtil.checkoutConditionParameter(customizeCondition.getCondition(),customizeCondition.getValue(),customizeCondition.getSecondValue(),customizeCondition.getCondition());
        return (StringUtils.isBlank(customizeCondition.getTableName())?"":customizeCondition.getTableName()+".")+customizeCondition.getCondition() + " between '" + customizeCondition.getValue() +"' and '" + customizeCondition.getSecondValue()+"'";
    }
}

/**
 * @author:zyp
 * @description notBetween条件
 * @date: 2020/3/20 11:52
 * @return
 */
class NotBetweenCondition implements ConditionExample {

    @Override
    public String handleSql(CustomizeCondition customizeCondition) {
        ConditionUtil.checkoutConditionParameter(customizeCondition.getCondition(),customizeCondition.getValue(),customizeCondition.getSecondValue(),customizeCondition.getCondition());
        return (StringUtils.isBlank(customizeCondition.getTableName())?"":customizeCondition.getTableName()+".")+customizeCondition.getCondition() + " not between '" + customizeCondition.getValue() +"' and '" + customizeCondition.getSecondValue()+"'";
    }
}

/**
 * @author:zyp
 * @description 排序条件
 * @date: 2020/3/20 11:52
 * @return
 */
class OrderByCondition implements ConditionExample {

    @Override
    public String handleSql(CustomizeCondition customizeCondition) {
        return " order by " + (StringUtils.isBlank(customizeCondition.getTableName())?"":customizeCondition.getTableName()+".")+customizeCondition.getCondition() + " " + customizeCondition.getValue();
    }
}


/**
 * @author:zyp
 * @description limit分页条件
 * @date: 2020/3/20 11:52
 * @return
 */
class LimitCondition implements ConditionExample {

    @Override
    public String handleSql(CustomizeCondition customizeCondition) {
        return " limit " + customizeCondition.getValue()+","+customizeCondition.getSecondValue();
    }
}

条件工具类

public class ConditionUtil {

    public final static Map<String,Object> STRATEGYMAP = new HashMap();

    static {
        STRATEGYMAP.put("IsNull",new IsNullCondition());
        STRATEGYMAP.put("IsNotNull",new IsNotNullCondition());
        STRATEGYMAP.put("EqualTo",new EqualToCondition());
        STRATEGYMAP.put("NotEqualTo",new NotEqualToCondition());
        STRATEGYMAP.put("GreaterThan",new GreaterThanCondition());
        STRATEGYMAP.put("GreaterThanOrEqualTo",new GreaterThanOrEqualToCondition());
        STRATEGYMAP.put("LessThan",new LessThanCondition());
        STRATEGYMAP.put("LessThanOrEqualTo",new LessThanOrEqualToCondition());
        STRATEGYMAP.put("In",new InCondition());
        STRATEGYMAP.put("NotIn",new NotInCondition());
        STRATEGYMAP.put("Between",new BetweenCondition());
        STRATEGYMAP.put("NotBetween",new NotBetweenCondition());
        STRATEGYMAP.put("Like",new LikeCondition());
        STRATEGYMAP.put("NotLike",new NotLikeCondition());
        STRATEGYMAP.put("OrderBy",new OrderByCondition());
        STRATEGYMAP.put("Limit",new LimitCondition());
    }

    /**
     * @author:zyp
     * @description 检验字段是否有值
     * @date: 2020/3/20 14:09
     * @return 
     */
    public static void checkoutConditionParameter(String condition){
        if (condition == null) {
            throw new RuntimeException("Value for condition cannot be null");
        }
    }
    /**
     * @author:zyp
     * @description 检验字段是否有值
     * @date: 2020/3/20 14:09
     * @return
     */
    public static void checkoutConditionParameter(String condition, Object value, String property){
        if (value == null) {
            throw new RuntimeException("Value for " + property + " cannot be null");
        }
    }
    /**
     * @author:zyp
     * @description 检验字段是否有值
     * @date: 2020/3/20 14:09
     * @return
     */
    public static void checkoutConditionParameter(String condition, Object value1, Object value2, String property){
        if (value1 == null || value2 == null) {
            throw new RuntimeException("Between values for " + property + " cannot be null");
        }
    }
}

查询表数据(已知表、未知表皆可以)已转义

	/**
     * @author:zyp
     * @description 查询表数据(查询自定义的表)
     * @date: 2020/4/2 17:17
     * @return
     */
    @Override
    public List<Map<String, Object>> selectTable(CustomizeDbExamle customizeDbExamle) {
    	//查询是否存在该表
        int i = clusterTableMapperVo.existTable(customizeDbExamle.getTableName());
        if(i==0){
            return null;
        }
        List<TbTableColDefine> tbTableColDefines = getTbTableColDefines(customizeDbExamle.getTableName());
        List<List<String>> selectList = getTableColRelate(tbTableColDefines);
        String sql = compileSelectSQL(selectList, customizeDbExamle.getTableName(),customizeDbExamle);
        List<Map<String,Object>> stringObjectMap = clusterTableMapperVo.selectWriteSQL(sql);
        return stringObjectMap;
    }

查询表数据通过表id(已转义)

	/**
     * @author:zyp
     * @description 查询表数据通过表id(已转义)
     * @date: 2020/4/24 13:53
     * @return
     */
    @Override
    public List<Map<String, Object>> selectTableDataById(CustomizeDbExamle customizeDbExamle) {
        //当前文件名为table的id 根据tableId查找该表名
        String tableName = customizeDbExamle.getTableName();
        TbTableDefine tbTableDefine = clusterTbTableDefineMapper.selectByPrimaryKey(Integer.valueOf(tableName));
        int i = clusterTableMapperVo.existTable(tbTableDefine.getTableNm());
        if(i==0){
            return null;
        }
        customizeDbExamle.setTableName(tbTableDefine.getTableNm());
        List<TbTableColDefine> tbTableColDefines = getTbTableColDefines(customizeDbExamle.getTableName());
        List<List<String>> selectList = getTableColRelate(tbTableColDefines);
        CustomizeConditionArr conditionParameters = customizeDbExamle.getConditionParameters();
        //将参数里的条件tableName全部转化为表名
        conditionParameters.getCustomizeConditions().forEach(conditionParameter->{
            conditionParameter.setTableName(tbTableDefine.getTableNm());
        });
        String sql = compileSelectSQL(selectList, customizeDbExamle.getTableName(),customizeDbExamle);
        List<Map<String,Object>> stringObjectMap = clusterTableMapperVo.selectWriteSQL(sql);
        return stringObjectMap;
    }

查询表数据(查询自定义的表)未转义

	/**
     * @author:zyp
     * @description 查询表数据(查询自定义的表)未转义
     * @date: 2020/4/3 11:39
     * @return
     */
    @Override
    public List<Map<String, Object>> selectTableDataNoTransferred(CustomizeDbExamle customizeDbExamle) {
        int i = clusterTableMapperVo.existTable(customizeDbExamle.getTableName());
        if(i==0){
            return new ArrayList<Map<String,Object>>();
        }
        String sql = compileSelectSQL(null, customizeDbExamle.getTableName(),customizeDbExamle);
        List<Map<String,Object>> stringObjectMap = clusterTableMapperVo.selectWriteSQL(sql);
        return stringObjectMap;
    }

查询表数据数量(查询自定义的表)

	/**
     * @author:zyp
     * @description 查询表数据数量(查询自定义的表)
     * @date: 2020/4/2 17:58
     * @return
     */
    @Override
    public Integer selectTableDataCount(CustomizeDbExamle customizeDbExamle) {
        int i = clusterTableMapperVo.existTable(customizeDbExamle.getTableName());
        if(i==0){
            return null;
        }
        List<TbTableColDefine> tbTableColDefines = getTbTableColDefines(customizeDbExamle.getTableName());
        List<List<String>> selectList = getTableColRelate(tbTableColDefines);
        String countSql = "SELECT COUNT(1) FROM (";
        String sql = compileSelectSQL(selectList, customizeDbExamle.getTableName(),customizeDbExamle);
        countSql = countSql + sql + ") temp";
        int countWriteSQL = clusterTableMapperVo.selectCountWriteSQL(countSql);
        return countWriteSQL;
    }

插入表数据

/**
     * @author:zyp
     * @description 插入表数据
     * @date: 2020/4/3 8:57
     * @return
     */
    @Override
    public Integer insertTableData(CustomizeDbExamle customizeDbExamle) {
        int i = clusterTableMapperVo.existTable(customizeDbExamle.getTableName());
        if(i==0){
            return null;
        }
        Map<String, Object> insertParameter = customizeDbExamle.getInsertParameter();
        StringBuffer insertField = new StringBuffer();
        StringBuffer insertValue = new StringBuffer();
        StringBuffer sqlBuffer = new StringBuffer();
        sqlBuffer.append("insert into " + customizeDbExamle.getTableName() + "(");
        for(Map.Entry<String, Object> entry : insertParameter.entrySet() ){
            String key = entry.getKey();
            Object value = entry.getValue();
            insertField.append(key + ",");
            if(value==null||StringUtils.isBlank(value.toString())){
                insertValue.append(" null ,");
            }else{
                insertValue.append("'"+value.toString() + "',");
            }
        }
        insertField.deleteCharAt(insertField.length()-1);
        insertValue.deleteCharAt(insertValue.length()-1);
        sqlBuffer.append(insertField + ") values (");
        sqlBuffer.append(insertValue + ");select last_insert_id();");
        int id = masterTableMapperVo.insertWriteSQL(sqlBuffer.toString());
        System.out.println("插入表数据id...."+id);
        return id;
    }

更新表数据

/**
     * @author:zyp
     * @description 更新表数据
     * @date: 2020/4/3 9:12
     * @return
     */
    @Override
    public Integer updateTableData(CustomizeDbExamle customizeDbExamle) {
        int i = clusterTableMapperVo.existTable(customizeDbExamle.getTableName());
        if(i==0){
            return null;
        }
        Map<String, Object> updateParameter = customizeDbExamle.getUpdateParameter();
        StringBuffer updateBuffer = new StringBuffer();
        StringBuffer sqlBuffer = new StringBuffer();
        sqlBuffer.append("update " + customizeDbExamle.getTableName()+" as "+customizeDbExamle.getTableName() + " set ");
        for(Map.Entry<String, Object> entry : updateParameter.entrySet() ){
            String key = entry.getKey();
            Object value = entry.getValue();
            if(value==null||StringUtils.isBlank(value.toString())){
                updateBuffer.append(key + "= null ,");
            }else{
                updateBuffer.append(key + "='" + value +"',");
            }
        }
        updateBuffer.deleteCharAt(updateBuffer.length()-1);
        sqlBuffer.append(updateBuffer);
        //条件编写
        String conditionString = conditionSql(customizeDbExamle);
        sqlBuffer.append(conditionString);
        int count = masterTableMapperVo.updateWriteSQL(sqlBuffer.toString());
        System.out.println("更新表数据个数...."+count);
        return count;
    }

删除表数据

/**
     * @author:zyp
     * @description 删除表数据
     * @date: 2020/4/3 9:28
     * @return
     */
    @Override
    public Integer deleteTableData(CustomizeDbExamle customizeDbExamle ) {
        int i = clusterTableMapperVo.existTable(customizeDbExamle .getTableName());
        if(i==0){
            return null;
        }
        //条件编写
        String conditionString = conditionSql(customizeDbExamle);
        //再删除之前先把其查出
        StringBuffer selectBuf = new StringBuffer();
        selectBuf.append("select * from " + customizeDbExamle.getTableName() + " ");
        selectBuf.append(conditionString);
        List<Map<String,Object>> stringObjectMap = clusterTableMapperVo.selectWriteSQL(selectBuf.toString());
        StringBuffer sqlBuffer = new StringBuffer();
        sqlBuffer.append("delete from " + customizeDbExamle.getTableName());
        sqlBuffer.append(conditionString);
        System.out.println(sqlBuffer.toString());
        int count = masterTableMapperVo.deleteWriteSQL(sqlBuffer.toString());
        System.out.println("删除个数......."+count);
        return count;
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值