自定义表数据操作
参数实体类
自定义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;
}