diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/ISQLExpression.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/ISQLExpression.java new file mode 100644 index 0000000..b6d5f0f --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/ISQLExpression.java @@ -0,0 +1,16 @@ + +package com.jeelowcode.framework.plus.build; + +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import net.sf.jsqlparser.JSQLParserException; + +/** + * + * @param 返回值 + */ +public interface ISQLExpression { + + + //解析器 + T interpret(SQLInterpretContext contextT) throws JSQLParserException; +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/AndExpression.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/AndExpression.java new file mode 100644 index 0000000..0fe158c --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/AndExpression.java @@ -0,0 +1,225 @@ + +package com.jeelowcode.framework.plus.build.build; + +import com.jeelowcode.framework.exception.JeeLowCodeException; +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.ddl.*; +import com.jeelowcode.framework.plus.build.build.dql.*; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import com.jeelowcode.framework.utils.utils.FuncBase; +import net.sf.jsqlparser.JSQLParserException; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 多条件 + */ +public class AndExpression implements ISQLExpression> { + + private ISQLExpression[] expressions; + + public AndExpression(ISQLExpression... expressions) { + this.expressions = expressions; + } + public AndExpression(List expressionList) { + expressions =new ISQLExpression[expressionList.size()]; + for (int i = 0; i < expressionList.size(); i++) { + ISQLExpression expression = expressionList.get(i); + expressions[i]=expression; + } + } + + /** + * ddl允许多个,dql只允许一个 + * @param context + * @return + * @throws JSQLParserException + */ + @Override + public List interpret(SQLInterpretContext context) throws JSQLParserException { + List sqlFormatModelList = this.getDDL(context); + if (FuncBase.isNotEmpty(sqlFormatModelList)) { + return sqlFormatModelList; + } + SqlFormatModel sqlFormatModel = this.getDQL(context); + return Collections.singletonList(sqlFormatModel); + } + + //获取ddl + private List getDDL(SQLInterpretContext context) throws JSQLParserException { + + List ddlList = Arrays.stream(expressions) + .filter(expression -> expression instanceof BuildAlter + || expression instanceof BuildCreateIndex + || expression instanceof BuildCreateTable + || expression instanceof BuildDrop + || expression instanceof BuildComment + || expression instanceof BuildPrimaryKey + || expression instanceof BuildDdl) + .collect(Collectors.toList()); + + if (FuncBase.isEmpty(ddlList)) { + return null; + } + + List resultModelList=new ArrayList<>(); + for (ISQLExpression expression : ddlList) { + Object obj= expression.interpret(context); + if (FuncBase.isEmpty(obj)) { + continue; + } + if(obj instanceof SqlFormatModel){ + resultModelList.add((SqlFormatModel)obj); + }else if(obj instanceof List){ + resultModelList.addAll((List)obj); + } + + } + return resultModelList; + } + + private SqlFormatModel getDQL(SQLInterpretContext context) throws JSQLParserException { + List expressionList = this.getDQLExpression(); + if (FuncBase.isEmpty(expressionList)) { + throw new JeeLowCodeException("表达式为空"); + } + String sql = ""; + Map dataMap = new LinkedHashMap<>(); + int step = 0; + for (ISQLExpression expression : expressionList) {//buildselect buildwhere buidlorderby + SqlFormatModel sqlFormatModel = (SqlFormatModel) expression.interpret(context); + String tmpSql = sqlFormatModel.getSql(); + Map tmpMap = sqlFormatModel.getDataMap(); + if (FuncBase.isEmpty(tmpMap)) { + sql += " " + tmpSql; + continue; + } + + // 首先,将entrySet中的元素复制到一个列表中 + List> entrieList = new ArrayList<>(tmpMap.entrySet()); + Collections.reverse(entrieList); + + for (Map.Entry entry : entrieList) { + step++; + + String key = entry.getKey(); // 获取键 + Object value = entry.getValue(); // 获取值 + + String newKey = "JEELOWCODE_MPGENVAL" + step; + + // 执行你的替换逻辑 + tmpSql = tmpSql.replace("#{ew.paramNameValuePairs." + key+"," , "#{" +context.getPreSymbol()+ newKey+"," ); + tmpSql = tmpSql.replace("#{ew.paramNameValuePairs." + key+"}" , "#{" +context.getPreSymbol()+ newKey+"}" ); + + dataMap.put("JEELOWCODE_MPGENVAL" + step, value); + } + + sql += " " + tmpSql; + } + + return new SqlFormatModel(sql, dataMap); + + } + + //获取dql 排序后的表达式 + private List getDQLExpression() { + + List dqllList = Arrays.stream(expressions) + .filter(expression -> expression instanceof BuildSelect + || expression instanceof BuildJoin + || expression instanceof BuildWhere + || expression instanceof BuildGroupBy + || expression instanceof BuildHaving + || expression instanceof BuildOrderBy + || expression instanceof BuildInsert + || expression instanceof BuildUpdate + || expression instanceof BuildDelete) + .collect(Collectors.toList()); + + if (FuncBase.isEmpty(dqllList)) { + return null; + } + //只有一个,不用排序 + if(FuncBase.isNotEmpty(dqllList) && dqllList.size()==1){ + return dqllList; + } + + //排序 + List sortList = new ArrayList<>(); + + //下面是dql,需要安装sql标准查询的格式来凭接 + ISQLExpression tmpSelect = null; + List tmpJoinList = new ArrayList<>(); + ISQLExpression tmpWhere = null; + ISQLExpression tmpGroupBy = null; + ISQLExpression tmpOrderBy = null; + ISQLExpression tmpHaving = null; + + ISQLExpression tmpInsert = null; + ISQLExpression tmpUpdate = null; + ISQLExpression tmpDelete = null; + for (ISQLExpression expression : expressions) { + if (expression instanceof BuildSelect) { + tmpSelect = expression; + } else if (expression instanceof BuildJoin) { + tmpJoinList.add(expression);//因为会多个 + } else if (expression instanceof BuildWhere) { + tmpWhere = expression; + } else if (expression instanceof BuildGroupBy) { + tmpGroupBy = expression; + } else if (expression instanceof BuildHaving) { + tmpHaving = expression; + } else if (expression instanceof BuildOrderBy) { + tmpOrderBy = expression; + } else if (expression instanceof BuildInsert) { + tmpInsert = expression; + } else if (expression instanceof BuildUpdate) { + tmpUpdate = expression; + } else if (expression instanceof BuildDelete) { + tmpDelete = expression; + } + } + + //如果是insert类的话,则直接返回 + if (FuncBase.isNotEmpty(tmpInsert)) { + sortList.add(tmpInsert); + return sortList; + } + + //如果是update 和 delete select 都可以带where + if (FuncBase.isNotEmpty(tmpSelect)) { + sortList.add(tmpSelect); + } else if (FuncBase.isNotEmpty(tmpUpdate)) { + sortList.add(tmpUpdate); + } else if (FuncBase.isNotEmpty(tmpDelete)) { + sortList.add(tmpDelete); + } else { + throw new JeeLowCodeException("表达式必须有BuildSelect/BuildUpdate/BuildDelete"); + } + + //第一个 + ISQLExpression firstExpression = sortList.get(0); + if (firstExpression instanceof BuildSelect && FuncBase.isNotEmpty(tmpJoinList)) {//必须是select的情况下,才能inner join + sortList.addAll(tmpJoinList); + } + + //后面是带 where + if (FuncBase.isNotEmpty(tmpWhere)) { + sortList.add(tmpWhere); + } + + if (firstExpression instanceof BuildSelect && FuncBase.isNotEmpty(tmpGroupBy)) {//必须是select的情况下,才有group by + sortList.add(tmpGroupBy); + if (FuncBase.isNotEmpty(tmpHaving)) { + sortList.add(tmpHaving); + } + } + + if (firstExpression instanceof BuildSelect && FuncBase.isNotEmpty(tmpOrderBy)) {//必须是select的情况下,才有order by + sortList.add(tmpOrderBy); + } + return sortList; + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/TestBuild.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/TestBuild.java new file mode 100644 index 0000000..50e2e06 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/TestBuild.java @@ -0,0 +1,612 @@ + +package com.jeelowcode.framework.plus.build.build; + + + +import com.jeelowcode.framework.plus.build.build.dql.*; +import com.jeelowcode.framework.plus.build.buildmodel.dql.*; + + +/** + * @author JX + * @create 2024-07-03 10:16 + * @dedescription: + */ +public class TestBuild { + + /* @Test + public void testBuildSelect() throws JSQLParserException { + SqlInfoSelectModel selectModel = SqlInfoSelectModel.builder() + *//* .setColumns("id", "name")*//* + .setTableName("tbl_student") + .build(); + + SQLInterpretContext context = new SQLInterpretContext(); + context.setSelectModel(selectModel); + BuildSelect buildSelect = new BuildSelect(); + SqlFormatModel interpret = buildSelect.interpret(context); + System.out.println(FuncBase.json2Str(interpret)); + } + + @Test + public void testBuildOrderBy() throws JSQLParserException { + + SqlInfoOrderModel build = SqlInfoOrderModel.builder() + .setOrderByAsc("id","name") + .setOrderByDesc("age") + .setOrderByAsc("sex") + .build(); + + SQLInterpretContext context = new SQLInterpretContext(); + context.setOrderModel(build); + BuildOrderBy buildOrderBy=new BuildOrderBy(); + + SqlFormatModel interpret = buildOrderBy.interpret(context); + System.out.println(FuncBase.json2Str(interpret)); + } + + + @Test + public void testBuildGroupBy() throws JSQLParserException { + + SqlInfoGroupModel build = SqlInfoGroupModel.builder() + .setColumns("name", "age") + .build(); + + + SQLInterpretContext context = new SQLInterpretContext(); + context.setGroupModel(build); + BuildGroupBy buildGroupBy=new BuildGroupBy(); + + SqlFormatModel interpret = buildGroupBy.interpret(context); + System.out.println(FuncBase.json2Str(interpret)); + } + + @Test + public void testBuildWhere() throws JSQLParserException { + + SqlInfoWhereModel build = SqlInfoWhereModel.builder() + .gt("id", 12) + .ge("age", 18) + .ne("name", "张三") + .between("height",18,30) + .in("a.id",1,2,3,4,5) + .like("name","张三") + .buildWhere(); + + + + SQLInterpretContext context = new SQLInterpretContext(); + context.setWhereModel(build); + BuildWhere buildWhere=new BuildWhere(); + + SqlFormatModel interpret = buildWhere.interpret(context); + System.out.println(FuncBase.json2Str(interpret)); + } + + + @Test + public void testBuildDelete() throws JSQLParserException { + + SqlInfoDeleteModel build = SqlInfoDeleteModel.builder() + .setTableName("tbl_student") + .build(); + SQLInterpretContext context = new SQLInterpretContext(); + context.setDeleteModel(build); + BuildDelete buildDelete=new BuildDelete(); + + SqlFormatModel interpret = buildDelete.interpret(context); + System.out.println(FuncBase.json2Str(interpret)); + } + + + @Test + public void testBuildRealDelete() throws JSQLParserException { + + SqlInfoDeleteModel build = SqlInfoDeleteModel.builder() + .setTableName("tbl_student",true) + .build(); + SQLInterpretContext context = new SQLInterpretContext(); + BuildDelete buildDelete=new BuildDelete(); + + context.setDeleteModel(build); + SqlFormatModel interpret = buildDelete.interpret(context); + System.out.println(FuncBase.json2Str(interpret)); + } + + @Test + public void testBuildInsert() throws JSQLParserException { + + Map addMap=new HashMap<>(); + addMap.put("age",18); + addMap.put("name","张三"); + + SqlInfoInsertModel build = SqlInfoInsertModel.builder() + .setTableName("tbl_student") + .addColumn("id", 123) + .addMap(addMap) + .build(); + + SQLInterpretContext context = new SQLInterpretContext(); + context.setInsertModel(build); + BuildInsert buildInsert=new BuildInsert(); + + SqlFormatModel interpret = buildInsert.interpret(context); + System.out.println(FuncBase.json2Str(interpret)); + } + + @Test + public void testBuildUpdate() throws JSQLParserException { + + Map updateMap=new HashMap<>(); + updateMap.put("age",18); + updateMap.put("name","张三"); + + SqlInfoUpdateModel build = SqlInfoUpdateModel.builder() + .setTableName("tbl_student") + .addColumn("id", 123) + .addMap(updateMap) + .build(); + + SQLInterpretContext context = new SQLInterpretContext(); + context.setUpdateModel(build); + BuildUpdate buildUpdate=new BuildUpdate(); + + SqlFormatModel interpret = buildUpdate.interpret(context); + System.out.println(FuncBase.json2Str(interpret)); + } + + @Test + public void testBuildAlter_AddColumn() throws JSQLParserException { +*//* + TableFieldModel fieldModel = new TableFieldModel(); + fieldModel.setFieldCode("name"); + fieldModel.setFieldType("varchar(128)"); + fieldModel.setCommentSql("年龄"); + + SqlInfoAlterModel model = SqlInfoAlterModel.builder() + .setTableName("tbl_student") + .buildAddColumn(fieldModel); + + SQLInterpretContext context = new SQLInterpretContext(); + context.setAlterModel(model); + + BuildAlter build=new BuildAlter(); + SqlFormatModel interpret = build.interpret(context); + System.out.println(Func.json2Str(interpret));*//* + } + + @Test + public void testBuildAlter_updaateColumn() throws JSQLParserException { + + *//*TableFieldModel fieldModel = new TableFieldModel(); + fieldModel.setFieldCode("name"); + fieldModel.setFieldType("varchar(128)"); + fieldModel.setCommentSql("年龄"); + + SqlInfoAlterModel model = SqlInfoAlterModel.builder() + .setTableName("tbl_student") + .buildUpdateColum(fieldModel); + + SQLInterpretContext context = new SQLInterpretContext(); + context.setAlterModel(model); + + BuildAlter build=new BuildAlter(); + + SqlFormatModel interpret = build.interpret(context); + System.out.println(Func.json2Str(interpret));*//* + } + + @Test + public void testBuildDrop_dropTable() throws JSQLParserException { + + SqlInfoDropModel model = SqlInfoDropModel.builder() + .buildDropTable("","tbl_student"); + + SQLInterpretContext context = new SQLInterpretContext(); + context.setDropModel(model); + + BuildDrop build=new BuildDrop(); + List sqlFormatModelList = build.interpret(context); + System.out.println(FuncBase.json2Str(sqlFormatModelList)); + } + + @Test + public void testBuildDrop_dropColumn() throws JSQLParserException { + + SqlInfoDropModel model = SqlInfoDropModel.builder() + .buildDropColumn("","tbl_student","name"); + + SQLInterpretContext context = new SQLInterpretContext(); + context.setDropModel(model); + + BuildDrop build=new BuildDrop(); + + List sqlFormatModelList = build.interpret(context); + System.out.println(FuncBase.json2Str(sqlFormatModelList)); + } + + @Test + public void testBuildDrop_dropIndex() throws JSQLParserException { + + SqlInfoDropModel model = SqlInfoDropModel.builder() + .buildDropIndex("","tbl_student","ind_name"); + + SQLInterpretContext context = new SQLInterpretContext(); + context.setDropModel(model); + + BuildDrop build=new BuildDrop(); + List sqlFormatModelList = build.interpret(context); + System.out.println(FuncBase.json2Str(sqlFormatModelList)); + } + + @Test + public void testBuildCreate() throws JSQLParserException { + + List buildTableFieldModelList=new ArrayList<>(); + + FieldModel idModel = new FieldModel(); + idModel.setFieldCode("id"); + idModel.setFieldName("id"); + idModel.setFieldLen(12); + idModel.setFieldPointLen(0); + idModel.setFieldType(JeeLowCodeFieldTypeEnum.BIGINT); + idModel.setIsPrimaryKey("Y"); + idModel.setIsNull("N"); + + + FieldModel nameModel = new FieldModel(); + nameModel.setFieldCode("name"); + nameModel.setFieldName("姓名"); + nameModel.setFieldLen(12); + nameModel.setFieldPointLen(0); + nameModel.setFieldType(JeeLowCodeFieldTypeEnum.STRING); + nameModel.setIsPrimaryKey("N"); + nameModel.setIsNull("Y"); + + + buildTableFieldModelList.add(idModel); + buildTableFieldModelList.add(nameModel); + + + SqlInfoCreateModel model = SqlInfoCreateModel.builder() + .setTableName("tbl_student") + .setTableOptions(buildTableFieldModelList) + .build(); + + SQLInterpretContext context = new SQLInterpretContext(); + context.setCreateModel(model); + BuildCreateTable build=new BuildCreateTable(); + + List sqlFormatModelList = build.interpret(context); + System.out.println(FuncBase.json2Str(sqlFormatModelList)); + } + + @Test + public void testBuildCreateIndex() throws JSQLParserException { + + SqlInfoCreateIndexModel model = SqlInfoCreateIndexModel.builder() + .setTableName("tbl_student") + .setIndexName("ind_aa") + .setIndexFieldCodeList(FuncBase.toStrList("name,age")) + .build(); + + SQLInterpretContext context = new SQLInterpretContext(); + context.setCreateIndexModel(model); + + BuildCreateIndex build=new BuildCreateIndex(); + + List sqlFormatModelList = build.interpret(context); + System.out.println(FuncBase.json2Str(sqlFormatModelList)); + } + + @Test + public void testBuildAndUpdateExpression() throws JSQLParserException { + + //构建update语句 + Map updateMap=new HashMap<>(); + updateMap.put("age",18); + updateMap.put("name","张三"); + + SqlInfoUpdateModel build = SqlInfoUpdateModel.builder() + .setTableName("tbl_student") + .addColumn("id", 123) + .addMap(updateMap) + .build(); + + SQLInterpretContext context = new SQLInterpretContext(); + BuildUpdate buildUpdate=new BuildUpdate(); + context.setUpdateModel(build); + + //构建where语句 + SqlInfoWhereModel whereModel = SqlInfoWhereModel.builder() + .ge("age",18) + .like("name","张三") + .buildWhere(); + context.setWhereModel(whereModel); + BuildWhere buildWhere=new BuildWhere(); + + + //update语句+where语句 + AndExpression expression=new AndExpression(buildUpdate,buildWhere); + List sqlFormatModelList = expression.interpret(context); + System.out.println(FuncBase.json2Str(sqlFormatModelList)); + + } + + @Test + public void testBuildSelectExpression() throws JSQLParserException { + + SqlInfoSelectModel selectModel = SqlInfoSelectModel.builder() + .setColumns("name", "age") + .setTableName("tbl_student") + .build(); + + SQLInterpretContext contextSelect = new SQLInterpretContext(); + contextSelect.setSelectModel(selectModel); + BuildSelect buildSelect = new BuildSelect(); + + +*//* SqlInfoWhereModel whereOrModel = SqlInfoWhereModel.builder() + .ge("age", 18) + .or() + .le("age",10) + .build(); + SQLInterpretContext contextWhereOr = new SQLInterpretContext<>(whereOrModel); + BuildWhere buildWhereOr=new BuildWhere(contextWhereOr);*//* + + *//* SqlInfoWhereModel whereOrModel2 = SqlInfoWhereModel.builder() + .le("age", 182) + .notLike("name", "张三2") + .or(buildWhereOr) + .build(); + SQLInterpretContext contextWhereOr2 = new SQLInterpretContext<>(whereOrModel2); + BuildWhere buildWhereOr2=new BuildWhere(contextWhereOr2);*//* + + + SqlInfoWhereModel whereAndModel = SqlInfoWhereModel.builder()// 18 sqlFormatModelList = expression.interpret(context); + System.out.println(FuncBase.json2Str(sqlFormatModelList)); + + } + + @Test + public void testBuildSelectAllExpression() throws JSQLParserException { + + SqlInfoSelectModel selectModel = SqlInfoSelectModel.builder() + .setColumns("name", "age") + .setTableName("tbl_student") + .build(); + + SQLInterpretContext contextSelect = new SQLInterpretContext(); + BuildSelect buildSelect = new BuildSelect(); + contextSelect.setSelectModel(selectModel); + // + AndExpression expression=new AndExpression(buildSelect); + List sqlFormatModelList = expression.interpret(contextSelect); + System.out.println(FuncBase.json2Str(sqlFormatModelList)); + + } + + @Test + public void testBuildHavingExpression() throws JSQLParserException { + SqlInfoSelectModel selectModel = SqlInfoSelectModel.builder() + .setColumns("name", "count( id ) AS cou") + .setTableName("system_dept") + .build(); + + BuildSelect buildSelect = new BuildSelect(); + + SqlInfoHavingModel havingModel = SqlInfoConditionModel.builder() + .gt("cou", 1) + .likeLeft("name", "财务部门") + .buildHaving(); + SQLInterpretContext contextHaving = new SQLInterpretContext(); + contextHaving.setHavingModel(havingModel); + BuildHaving buildHaving=new BuildHaving(); + buildHaving.setContext(contextHaving); + + + SqlInfoGroupModel groupByModel = SqlInfoGroupModel.builder() + .setColumns("name") + .build(); + SQLInterpretContext contextGroupBy = new SQLInterpretContext(); + BuildGroupBy buildGroupBy=new BuildGroupBy(); + + SqlInfoOrderModel orderByModel = SqlInfoOrderModel.builder() + .setOrderByAsc("cou") + .build(); + SQLInterpretContext contextOrderBy = new SQLInterpretContext(); + BuildOrderBy buildOrderBy=new BuildOrderBy(); + + SQLInterpretContext context = new SQLInterpretContext(); + context.setSelectModel(selectModel); + context.setGroupModel(groupByModel); + context.setOrderModel(orderByModel); + context.setHavingModel(havingModel); + + //update语句+where语句 + AndExpression expression=new AndExpression(buildGroupBy,buildSelect,buildOrderBy,buildHaving); + List sqlFormatModelList = expression.interpret(context); + System.out.println(FuncBase.json2Str(sqlFormatModelList)); + + } + + @Test + public void testBuildJoinExpression() throws JSQLParserException { + ///主表 + SqlInfoSelectModel selectModel = SqlInfoSelectModel.builder() + .setColumns("a.*","b.*","c.*") + .setTableName("tbl_a","a") + .build(); + SQLInterpretContext contextSelect = new SQLInterpretContext(); + BuildSelect buildSelect = new BuildSelect(); + + //B表 + SqlInfoJoinModel joinModelB = SqlInfoJoinModel.builder() + .innerJoin() + .joinTable("tbl_b", "b") + .on("a.id", "b.a_id") + .build(); + + SQLInterpretContext contextJoinB = new SQLInterpretContext(); + BuildJoin buildJsonB = new BuildJoin(); + + //C表 + SqlInfoJoinModel joinModelC = SqlInfoJoinModel.builder() + .innerJoin() + .joinTable("tbl_c", "c") + .on("b.id", "c.b_id") + .build(); + + SQLInterpretContext contextJoinC = new SQLInterpretContext(); + BuildJoin buildJsonC = new BuildJoin(); + + SQLInterpretContext context = new SQLInterpretContext(); + context.setSelectModel(selectModel); + context.setJoinModel(joinModelB); + //update语句+where语句 + AndExpression expression=new AndExpression(buildSelect,buildJsonB,buildJsonC); + List sqlFormatModelList = expression.interpret(context); + System.out.println(FuncBase.json2Str(sqlFormatModelList)); + + } + + @Test + public void testHavingAndOrExpression() throws JSQLParserException { + SqlInfoSelectModel selectModel = SqlInfoSelectModel.builder() + .setColumns("name", "count( id ) AS cou") + .setTableName("system_dept") + .build(); + + BuildSelect buildSelect = new BuildSelect(); + + + + SqlInfoHavingModel havingModel = SqlInfoConditionModel.builder() + .gt("cou", 1) + .likeLeft("name", "财务部门") + .and( andTest ->{ + andTest.eq("status", 1) + .or( orTest ->{ + orTest.ne("id", 1); + }); + }) + .buildHaving(); + SQLInterpretContext contextHaving = new SQLInterpretContext(); + contextHaving.setHavingModel(havingModel); + BuildHaving buildHaving=new BuildHaving(); + buildHaving.setContext(contextHaving); + + + SqlInfoGroupModel groupByModel = SqlInfoGroupModel.builder() + .setColumns("name") + .build(); + SQLInterpretContext contextGroupBy = new SQLInterpretContext(); + BuildGroupBy buildGroupBy=new BuildGroupBy(); + + + SQLInterpretContext context = new SQLInterpretContext(); + context.setSelectModel(selectModel); + context.setGroupModel(groupByModel); + context.setHavingModel(havingModel); + + //update语句+where语句 + AndExpression expression=new AndExpression(buildGroupBy,buildSelect,buildHaving); + List sqlFormatModelList = expression.interpret(context); + System.out.println(FuncBase.json2Str(sqlFormatModelList)); + } + + @Test + public void testWhereAndOrExpression() throws JSQLParserException { + SqlInfoSelectModel selectModel = SqlInfoSelectModel.builder() + .setColumns("name", "age") + .setTableName("tbl_student") + .build(); + + SQLInterpretContext contextSelect = new SQLInterpretContext(); + contextSelect.setSelectModel(selectModel); + BuildSelect buildSelect = new BuildSelect(); + + + SqlInfoWhereModel whereModel = SqlInfoWhereModel.builder() + .gt("id", 12) + .and(andTest ->{ + andTest.eq("name","李四") + .or(orTest ->{ + orTest.eq("name", "张三"); + }); + }) + .eq("na","历史") + .buildWhere(); + SQLInterpretContext contextWhere = new SQLInterpretContext(); + contextWhere.setWhereModel(whereModel); + BuildWhere buildWhere=new BuildWhere(); + buildWhere.setContext(contextWhere); + + + SqlInfoGroupModel groupByModel = SqlInfoGroupModel.builder() + .setColumns("name", "age") + .build(); + SQLInterpretContext contextGroupBy = new SQLInterpretContext(); + BuildGroupBy buildGroupBy=new BuildGroupBy(); + + SqlInfoOrderModel orderByModel = SqlInfoOrderModel.builder() + .setOrderByAsc("age") + .build(); + SQLInterpretContext contextOrderBy = new SQLInterpretContext(); + BuildOrderBy buildOrderBy=new BuildOrderBy(); + + SQLInterpretContext context = new SQLInterpretContext(); + context.setWhereModel(whereModel); + context.setSelectModel(selectModel); + context.setOrderModel(orderByModel); + context.setGroupModel(groupByModel); + + + AndExpression expression=new AndExpression(buildWhere,buildSelect,buildOrderBy,buildGroupBy); + List sqlFormatModelList = expression.interpret(context); + System.out.println(FuncBase.json2Str(sqlFormatModelList)); + }*/ +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildAlter.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildAlter.java new file mode 100644 index 0000000..79b2bf8 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildAlter.java @@ -0,0 +1,94 @@ + +package com.jeelowcode.framework.plus.build.build.ddl; + + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.ddl.SqlInfoAlterModel; +import com.jeelowcode.framework.plus.entity.DbColunmTypesEntity; +import com.jeelowcode.framework.plus.entity.FieldModel; +import com.jeelowcode.framework.plus.utils.PlusUtils; +import com.jeelowcode.framework.plus.core.ddl.alter.JeeLowCodeAlterTable; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import com.jeelowcode.framework.utils.enums.JeeLowCodeFieldTypeEnum; +import com.jeelowcode.framework.utils.tool.StringPool; +import com.jeelowcode.framework.utils.utils.FuncBase; +import net.sf.jsqlparser.JSQLParserException; + +import java.util.List; + +/** + * 修改表相关 + */ +public class BuildAlter implements ISQLExpression> { + + @Override + public List interpret(SQLInterpretContext context) throws JSQLParserException { + DbColunmTypesEntity dbColunmTypes = context.getDbColunmTypes(); + SqlInfoAlterModel alterModel = context.getAlterModel(); + + if(FuncBase.isEmpty(alterModel)){ + return null; + } + //存在自定义ddl + List executeDdlList = alterModel.getExecuteDdlList(); + if(FuncBase.isNotEmpty(executeDdlList)){ + return PlusUtils.ddl2SqlFormatModel(executeDdlList); + } + + String ddl=""; + switch (alterModel.getAlterType()) { + case ADD_COLUMN: + ddl = getAddColumnDDL(context.getSchemaName(),alterModel.getTableName(),alterModel.getFieldModel(),dbColunmTypes); + break; + case UPDATE_COLUMN: + ddl = getModifyColumnDDL(context.getSchemaName(),alterModel.getTableName(),alterModel.getFieldModel(),dbColunmTypes); + break; + } + return PlusUtils.ddl2SqlFormatModel(ddl); + } + + + //获取增加字段ddl + private String getAddColumnDDL(String schemaName,String tableName, FieldModel fieldModel, DbColunmTypesEntity dbColunmTypes) { + String symbol = dbColunmTypes.getSymbol(); + Boolean upperFlag = dbColunmTypes.getUpperFlag(); + + tableName= FuncBase.concatSymbol(tableName,symbol,upperFlag); + schemaName= FuncBase.concatSymbol(schemaName,symbol); + + JeeLowCodeFieldTypeEnum fieldTypeEnum = fieldModel.getFieldType(); + DbColunmTypesEntity.TypeEntity typeEntity = PlusUtils.jeelowCodeType2DbType(fieldTypeEnum, dbColunmTypes); + String fieldType = PlusUtils.getDbType(fieldTypeEnum, typeEntity.getDbType(), fieldModel.getFieldLen(), fieldModel.getFieldPointLen(),typeEntity.getDbMaxLen()); + String defaultValSql = PlusUtils.getDefaultValSql(fieldModel.getFieldDefaultVal(), fieldModel.getIsNull(),fieldModel.getDbNowIsNull()); + String fieldCode = FuncBase.concatSymbol(fieldModel.getFieldCode(),symbol,upperFlag); + + JeeLowCodeAlterTable alterTable = new JeeLowCodeAlterTable(); + alterTable.setTableName(schemaName+ StringPool.DOT+tableName); + alterTable.addCoulumn(fieldCode, fieldType, defaultValSql); + String ddl = alterTable.getFullSQL(); + return ddl; + } + + //修改字段 + private String getModifyColumnDDL(String schemaName,String tableName, FieldModel fieldModel, DbColunmTypesEntity dbColunmTypes) { + String symbol = dbColunmTypes.getSymbol(); + Boolean upperFlag = dbColunmTypes.getUpperFlag(); + + + tableName=FuncBase.concatSymbol(tableName,symbol,upperFlag); + schemaName= FuncBase.concatSymbol(schemaName,symbol); + + JeeLowCodeFieldTypeEnum fieldTypeEnum = fieldModel.getFieldType(); + DbColunmTypesEntity.TypeEntity typeEntity = PlusUtils.jeelowCodeType2DbType(fieldTypeEnum, dbColunmTypes); + String fieldType = PlusUtils.getDbType(fieldTypeEnum, typeEntity.getDbType(), fieldModel.getFieldLen(), fieldModel.getFieldPointLen(),typeEntity.getDbMaxLen()); + String defaultValSql = PlusUtils.getDefaultValSql(fieldModel.getFieldDefaultVal(), fieldModel.getIsNull(),fieldModel.getDbNowIsNull()); + String fieldCode = fieldModel.getFieldCode(); + + JeeLowCodeAlterTable alterTable = new JeeLowCodeAlterTable(); + alterTable.setTableName(schemaName+ StringPool.DOT+tableName); + alterTable.modifyColumn(FuncBase.concatSymbol(fieldCode,symbol,upperFlag), fieldType, defaultValSql); + return alterTable.getFullSQL(); + } + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildComment.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildComment.java new file mode 100644 index 0000000..76a0c8c --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildComment.java @@ -0,0 +1,95 @@ + +package com.jeelowcode.framework.plus.build.build.ddl; + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.ddl.SqlInfoCommentModel; +import com.jeelowcode.framework.plus.entity.DbColunmTypesEntity; +import com.jeelowcode.framework.plus.entity.FieldModel; +import com.jeelowcode.framework.plus.utils.PlusUtils; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import com.jeelowcode.framework.utils.utils.FuncBase; +import net.sf.jsqlparser.JSQLParserException; + +import java.util.ArrayList; +import java.util.List; + + +/** + * 备注 相关 + */ +public class BuildComment implements ISQLExpression> { + + + @Override + public List interpret(SQLInterpretContext context) throws JSQLParserException { + SqlInfoCommentModel commentModel = context.getCommentModel(); + if (FuncBase.isEmpty(commentModel)) { + return null; + } + + //存在自定义ddl + List executeDdlList = commentModel.getExecuteDdlList(); + if (FuncBase.isNotEmpty(executeDdlList)) { + return PlusUtils.ddl2SqlFormatModel(executeDdlList); + } + + + DbColunmTypesEntity dbColunmTypes = context.getDbColunmTypes(); + + String symbol = dbColunmTypes.getSymbol(); + Boolean upperFlag = dbColunmTypes.getUpperFlag(); + + String schemaName = FuncBase.concatSymbol(context.getSchemaName(), symbol); + String tableName = FuncBase.concatSymbol(commentModel.getTableName(), symbol, upperFlag); + String tableAlias = commentModel.getTableAlias(); + List fieldModelList = commentModel.getFieldModelList(); + + List ddlList = new ArrayList<>(); + String tableDdl = this.tableComment(schemaName, tableName, tableAlias); + if (FuncBase.isNotEmpty(tableDdl)) { + ddlList.add(tableDdl); + } + List columnDdlList = this.columnComment(dbColunmTypes, schemaName, tableName, fieldModelList); + if (FuncBase.isNotEmpty(columnDdlList)) { + ddlList.addAll(columnDdlList); + } + + return PlusUtils.ddl2SqlFormatModel(ddlList); + } + + /** + * 表备注 + * + * @return + */ + private String tableComment(String schemaName, String tableName, String tableAlias) { + if (FuncBase.isEmpty(tableAlias)) { + return null; + } + String str = "COMMENT ON TABLE %s.%s IS '%s';"; + String ddl = String.format(str, schemaName, tableName, tableAlias); + return ddl; + } + + private List columnComment(DbColunmTypesEntity dbColunmTypes, String schemaName, String tableName, List fieldModelList) { + + if (FuncBase.isEmpty(fieldModelList)) { + return null; + } + String symbol = dbColunmTypes.getSymbol(); + Boolean upperFlag = dbColunmTypes.getUpperFlag(); + + List ddlList = new ArrayList<>(); + for (FieldModel fieldModel : fieldModelList) { + String fieldCode = FuncBase.concatSymbol(fieldModel.getFieldCode(), symbol, upperFlag); + String fieldName = fieldModel.getFieldName(); + + String str = "COMMENT ON COLUMN %s.%s.%s IS '%s';"; + String ddl = String.format(str, schemaName, tableName, fieldCode, fieldName); + ddlList.add(ddl); + } + return ddlList; + } + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildCreateIndex.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildCreateIndex.java new file mode 100644 index 0000000..c0b0b80 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildCreateIndex.java @@ -0,0 +1,63 @@ + +package com.jeelowcode.framework.plus.build.build.ddl; + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.ddl.SqlInfoCreateIndexModel; +import com.jeelowcode.framework.plus.entity.DbColunmTypesEntity; +import com.jeelowcode.framework.plus.utils.PlusUtils; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import com.jeelowcode.framework.utils.utils.FuncBase; +import net.sf.jsqlparser.JSQLParserException; + +import java.util.List; +import java.util.stream.Collectors; + +/*** + * 索引相关 + */ +public class BuildCreateIndex implements ISQLExpression> { + + + + @Override + public List interpret(SQLInterpretContext context) throws JSQLParserException { + SqlInfoCreateIndexModel model = context.getCreateIndexModel(); + DbColunmTypesEntity dbColunmTypes = context.getDbColunmTypes(); + if(FuncBase.isEmpty(model)){ + return null; + } + //存在自定义ddl + List executeDdlList = model.getExecuteDdlList(); + if(FuncBase.isNotEmpty(executeDdlList)){ + return PlusUtils.ddl2SqlFormatModel(executeDdlList); + } + + String symbol = dbColunmTypes.getSymbol(); + Boolean upperFlag = dbColunmTypes.getUpperFlag(); + + String tableName = FuncBase.concatSymbol(model.getTableName(),symbol,upperFlag); + String indexName = FuncBase.concatSymbol(model.getIndexName(),symbol,upperFlag); + String indexType = model.getIndexType(); + String schemaName = FuncBase.concatSymbol(context.getSchemaName(),symbol); + + + List indexFieldCodeList = model.getIndexFieldCodeList(); + + List list = indexFieldCodeList.stream() + .map(key -> FuncBase.concatSymbol( key , symbol,upperFlag)) + .collect(Collectors.toList()); + + String str = "CREATE INDEX %s ON %s.%s (%s)"; + if(FuncBase.isNotEmpty(indexType) && "UNIQUE".equals(indexType.toUpperCase())){//唯一 + str = "CREATE UNIQUE INDEX %s ON %s.%s (%s)"; + } + + String ddl = String.format(str, indexName, schemaName,tableName, String.join(",", list)); + + return PlusUtils.ddl2SqlFormatModel(ddl); + + + } + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildCreateTable.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildCreateTable.java new file mode 100644 index 0000000..f355b52 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildCreateTable.java @@ -0,0 +1,81 @@ + +package com.jeelowcode.framework.plus.build.build.ddl; + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.ddl.SqlInfoCreateModel; +import com.jeelowcode.framework.plus.entity.DbColunmTypesEntity; +import com.jeelowcode.framework.plus.entity.FieldModel; +import com.jeelowcode.framework.plus.utils.PlusUtils; +import com.jeelowcode.framework.plus.core.ddl.create.JeeLowCodeCreateTable; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import com.jeelowcode.framework.utils.enums.JeeLowCodeFieldTypeEnum; +import com.jeelowcode.framework.utils.tool.StringPool; +import com.jeelowcode.framework.utils.utils.FuncBase; +import net.sf.jsqlparser.JSQLParserException; + +import java.util.List; + +/** + * 建表相关 + */ +public class BuildCreateTable implements ISQLExpression> { + + @Override + public List interpret(SQLInterpretContext context) throws JSQLParserException { + DbColunmTypesEntity dbColunmTypes = context.getDbColunmTypes(); + SqlInfoCreateModel creteModel = context.getCreateModel(); + if(FuncBase.isEmpty(creteModel)){ + return null; + } + //存在自定义ddl + List executeDdlList = creteModel.getExecuteDdlList(); + if(FuncBase.isNotEmpty(executeDdlList)){ + return PlusUtils.ddl2SqlFormatModel(executeDdlList); + } + + String tableName = creteModel.getTableName(); + String schemaName = context.getSchemaName(); + List tableOptions = creteModel.getTableOptions(); + + String ddl = this.getDDL(schemaName,tableName, tableOptions, dbColunmTypes); + return PlusUtils.ddl2SqlFormatModel(ddl); + } + + /** + * 获取ddl + * + * @param tableName + * @param tableOptions + * @param dbColunmTypes + * @return + */ + public String getDDL(String schemaName,String tableName, List tableOptions, DbColunmTypesEntity dbColunmTypes) { + Boolean upperFlag = dbColunmTypes.getUpperFlag(); + String symbol = dbColunmTypes.getSymbol(); + JeeLowCodeCreateTable createTable = new JeeLowCodeCreateTable(); + + tableName=FuncBase.concatSymbol(tableName,symbol,upperFlag); + schemaName=FuncBase.concatSymbol(schemaName,symbol); + for (int i = 0; i < tableOptions.size(); i++) { + FieldModel fieldModel = tableOptions.get(i); + String fieldCode = FuncBase.concatSymbol(fieldModel.getFieldCode(),symbol,upperFlag); + JeeLowCodeFieldTypeEnum fieldTypeEnum = fieldModel.getFieldType(); + //类型 + DbColunmTypesEntity.TypeEntity typeEntity = PlusUtils.jeelowCodeType2DbType(fieldTypeEnum, dbColunmTypes); + Integer dbMaxLen = typeEntity.getDbMaxLen(); + if(dbMaxLen < fieldModel.getFieldLen()){ + fieldModel.setFieldLen(dbMaxLen); + } + String fieldType = PlusUtils.getDbType(fieldTypeEnum, typeEntity.getDbType(), fieldModel.getFieldLen(), fieldModel.getFieldPointLen(),typeEntity.getDbMaxLen()); + String defaultValSql = PlusUtils.getDefaultValSql(fieldModel.getFieldDefaultVal(), fieldModel.getIsNull(),null); + + createTable.addCoulumn(fieldCode, fieldType, defaultValSql); + } + createTable.setTableName(schemaName+ StringPool.DOT+tableName);//表名称 + String ddl = createTable.getDDL(); + return ddl; + } + + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildDdl.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildDdl.java new file mode 100644 index 0000000..d3d9c32 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildDdl.java @@ -0,0 +1,35 @@ + +package com.jeelowcode.framework.plus.build.build.ddl; + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.ddl.SqlInfoDdlModel; +import com.jeelowcode.framework.plus.utils.PlusUtils; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import com.jeelowcode.framework.utils.utils.FuncBase; +import net.sf.jsqlparser.JSQLParserException; + +import java.util.List; + +/** + * 通用DDL + */ +public class BuildDdl implements ISQLExpression> { + + @Override + public List interpret(SQLInterpretContext context) throws JSQLParserException { + SqlInfoDdlModel ddlModel = context.getDdlModel(); + if (FuncBase.isEmpty(ddlModel)) { + return null; + } + //存在自定义ddl + List executeDdlList = ddlModel.getExecuteDdlList(); + if (FuncBase.isEmpty(executeDdlList)) { + return null; + } + + return PlusUtils.ddl2SqlFormatModel(executeDdlList); + } + + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildDrop.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildDrop.java new file mode 100644 index 0000000..0855e24 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildDrop.java @@ -0,0 +1,104 @@ + +package com.jeelowcode.framework.plus.build.build.ddl; + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.ddl.SqlInfoDropModel; +import com.jeelowcode.framework.plus.entity.DbColunmTypesEntity; +import com.jeelowcode.framework.plus.utils.PlusUtils; +import com.jeelowcode.framework.plus.core.ddl.alter.JeeLowCodeAlterTable; +import com.jeelowcode.framework.plus.core.ddl.drop.JeeLowCodeDropTable; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import com.jeelowcode.framework.utils.tool.StringPool; +import com.jeelowcode.framework.utils.utils.FuncBase; +import net.sf.jsqlparser.JSQLParserException; + +import java.util.List; + +/** + * 删除表,字段,索引 + */ +public class BuildDrop implements ISQLExpression> { + + + @Override + public List interpret(SQLInterpretContext context) throws JSQLParserException { + SqlInfoDropModel dropModel = context.getDropModel(); + if (FuncBase.isEmpty(dropModel)) { + return null; + } + //存在自定义ddl + List executeDdlList = dropModel.getExecuteDdlList(); + if(FuncBase.isNotEmpty(executeDdlList)){ + return PlusUtils.ddl2SqlFormatModel(executeDdlList); + } + + DbColunmTypesEntity dbColunmTypes = context.getDbColunmTypes(); + String symbol = dbColunmTypes.getSymbol(); + Boolean upperFlag = dbColunmTypes.getUpperFlag(); + + String tableName = FuncBase.concatSymbol(dropModel.getTableName(), symbol, upperFlag); + String indexName = FuncBase.concatSymbol(dropModel.getIndexName(), symbol, upperFlag); + String cloumnCode = FuncBase.concatSymbol(dropModel.getCloumnCode(), symbol, upperFlag); + String schemaName = FuncBase.concatSymbol(context.getSchemaName(), symbol); + + String ddl = ""; + switch (dropModel.getDropType()) { + case DROP_TABLE: + ddl = this.dropTable(schemaName, tableName); + break; + case DROP_COLUMN: + ddl = this.dropColumn(schemaName, tableName, cloumnCode,dropModel.getCloumnFormat()); + break; + case DROP_INDEX: + ddl = this.dropIndex(schemaName, indexName); + break; + } + + return PlusUtils.ddl2SqlFormatModel(ddl); + } + + /** + * 删除表 + * + * @param schemaName + * @param tableName + * @return + */ + private String dropTable(String schemaName, String tableName) { + JeeLowCodeDropTable dropTable = new JeeLowCodeDropTable(); + dropTable.setTableName(schemaName + StringPool.DOT + tableName); + return dropTable.getFullSQL(); + } + + /** + * 删除字段 + * + * @param schemaName + * @param tableName + * @param cloumnCode + * @return + */ + private String dropColumn(String schemaName, String tableName, String cloumnCode,String cloumnFormat) { + if(FuncBase.isNotEmpty(cloumnFormat)){ + cloumnCode =String.format(cloumnFormat,cloumnCode); + } + JeeLowCodeAlterTable dropColumn = new JeeLowCodeAlterTable(); + dropColumn.setTableName(schemaName + StringPool.DOT + tableName); + dropColumn.dropColumn(cloumnCode); + return dropColumn.getFullSQL(); + } + + /** + * 删除索引 + * @param schemaName + * @param indexName + * @return + */ + private String dropIndex(String schemaName, String indexName) { + String str = "DROP INDEX %s.%s"; + String ddl = String.format(str, schemaName, indexName); + return ddl; + } + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildPrimaryKey.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildPrimaryKey.java new file mode 100644 index 0000000..b00296c --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/ddl/BuildPrimaryKey.java @@ -0,0 +1,56 @@ + +package com.jeelowcode.framework.plus.build.build.ddl; + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.ddl.SqlInfoPrimaryKeyModel; +import com.jeelowcode.framework.plus.entity.DbColunmTypesEntity; +import com.jeelowcode.framework.plus.utils.PlusUtils; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import com.jeelowcode.framework.utils.utils.FuncBase; +import net.sf.jsqlparser.JSQLParserException; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 主键相关 + */ +public class BuildPrimaryKey implements ISQLExpression> { + + + @Override + public List interpret(SQLInterpretContext context) throws JSQLParserException { + SqlInfoPrimaryKeyModel primaryKeyModel = context.getPrimaryKeyModel(); + + if (FuncBase.isEmpty(primaryKeyModel)) { + return null; + } + //存在自定义ddl + List executeDdlList = primaryKeyModel.getExecuteDdlList(); + if(FuncBase.isNotEmpty(executeDdlList)){ + return PlusUtils.ddl2SqlFormatModel(executeDdlList); + } + + DbColunmTypesEntity dbColunmTypes = context.getDbColunmTypes(); + + String symbol = dbColunmTypes.getSymbol(); + Boolean upperFlag = dbColunmTypes.getUpperFlag(); + + String tableName = FuncBase.concatSymbol(primaryKeyModel.getTableName(),symbol,upperFlag); + String schemaName = FuncBase.concatSymbol(context.getSchemaName(),symbol); + List tmpkeyList = primaryKeyModel.getKeyList(); + if(FuncBase.isEmpty(tmpkeyList)){ + return null; + } + + List keyList = tmpkeyList.stream() + .map(key -> FuncBase.concatSymbol( key , symbol,upperFlag)) + .collect(Collectors.toList()); + + String str="ALTER TABLE %s.%s ADD PRIMARY KEY(%s)"; + String ddl = String.format(str,schemaName,tableName,String.join(",",keyList)); + return PlusUtils.ddl2SqlFormatModel(ddl); + + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildCondition.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildCondition.java new file mode 100644 index 0000000..4f7b20c --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildCondition.java @@ -0,0 +1,345 @@ + +package com.jeelowcode.framework.plus.build.build.dql; + +import com.jeelowcode.framework.plus.build.buildmodel.ExpressionModel; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoConditionModel; +import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoHavingModel; +import com.jeelowcode.framework.plus.core.dql.select.JeeLowCodeQueryWrapper; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import com.jeelowcode.framework.utils.utils.FuncBase; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; + +/** + * @author JX + * @create 2024-07-29 16:00 + * @dedescription: + */ + +public class BuildCondition { + + public JeeLowCodeQueryWrapper wrapper = new JeeLowCodeQueryWrapper(); + + public SQLInterpretContext context; + + + public SqlFormatModel context2Condition(SqlInfoConditionModel conditionModel){ + List expressions =conditionModel.getExpressions(); + expressions.forEach(expressionModel -> { + SqlInfoConditionModel.WhereType whereType = expressionModel.getWhereType(); + String column = expressionModel.getColumn(); + Object[] value = expressionModel.getValue(); + switch (whereType) { + case GT://> + gt(column, value); + break; + case GE://>= + ge(column, value); + break; + case NE:// != + ne(column, value); + break; + case EQ:// = + eq(column, value); + break; + case LT://< + lt(column, value); + break; + case LE://<= + le(column, value); + break; + case BETWEEN: + between(column, value); + break; + case NOT_BETWEEN: + notbetween(column, value); + break; + case IN: + in(column, value); + break; + case NOT_IN: + notIn(column, value); + break; + case LIKE: + like(column, value); + break; + case NOT_LIKE: + notLike(column, value); + break; + case LIKE_LEFT: + likeLeft(column, value); + break; + case NOT_LIKE_LEFT: + notLikeLeft(column, value); + break; + case LIKE_RIGHT: + likeRight(column, value); + break; + case NOT_LIKE_RIGHT: + notLikeRight(column, value); + break; + case IS_NULL: + isNull(column); + break; + case IS_NOT_NULL: + isNotNull(column); + break; + case OR: + or(); + break; + case OR_BUILD: + orBuild((Consumer) value[0]); + break; + case AND_BUILD: + andBuild((Consumer) value[0]); + break; + case APPLY: + apply(column); + break; + } + }); + String sqlStr = ""; + + if(conditionModel instanceof SqlInfoHavingModel){ + sqlStr=wrapper.getHavingCustomSqlSegment(); + }else{ + sqlStr=wrapper.getCustomSqlSegment(); + } + Map paramNameValuePairs = wrapper.getParamNameValuePairs(); + + SqlFormatModel sqlFormatModel = new SqlFormatModel(sqlStr, paramNameValuePairs); + return sqlFormatModel; + } + + public void gt(String column, Object[] value) { + wrapper.gt(column, value[0]); + return; + } + + public void ge(String column, Object[] value) { + wrapper.ge(column, value[0]); + return; + } + + public void ne(String column, Object[] value) { + wrapper.ne(column, value[0]); + return; + } + + public void eq(String column, Object[] value) { + wrapper.eq(column, value[0]); + return; + } + + public void between(String column, Object[] value) { + Object value1=value[0]; + Object value2=value[1]; + wrapper.between(column, value1, value2); + return; + } + + public void notbetween(String column,Object[] value) { + Object value1=value[0]; + Object value2=value[1]; + wrapper.notBetween(column, value1, value2); + return; + } + + public void in(String column, Object[] value) { + if(value.length>1){ + wrapper.in(column, value); + return; + } + Object obj = value[0]; + if(obj instanceof List){ + List objList=(List)value[0]; + wrapper.in(column, objList); + }else{ + wrapper.in(column, obj); + } + return; + } + + public void notIn(String column, Object[] value) { + if(value.length>1){ + wrapper.notIn(column, value); + return; + } + Object obj = value[0]; + if(obj instanceof List){ + List objList=(List)value[0]; + wrapper.notIn(column, objList); + }else{ + wrapper.notIn(column, obj); + } + return; + } + + public void like(String column, Object[] value) { + wrapper.like(column, value[0]); + return; + } + + public void notLike(String column, Object[] value) { + wrapper.notLike(column, value[0]); + return; + } + + public void likeLeft(String column, Object[] value) { + wrapper.likeLeft(column, value[0]); + return; + } + public void notLikeLeft(String column, Object[] value) { + wrapper.notLikeLeft(column, value[0]); + return; + } + + public void likeRight(String column, Object[] value) { + wrapper.likeRight(column, value[0]); + return; + } + public void notLikeRight(String column, Object[] value) { + wrapper.notLikeRight(column, value[0]); + return; + } + + public void lt(String column, Object[] value) { + wrapper.lt(column, value[0]); + return; + } + + public void le(String column, Object[] value) { + wrapper.le(column, value[0]); + return; + } + + public void isNull(String column) { + wrapper.isNull(column); + return; + } + + public void isNotNull(String column) { + wrapper.isNotNull(column); + return; + } + public void apply(String column) { + wrapper.apply(column); + return; + } + public void or() { + wrapper.or(); + return; + } + + + public void orBuild(Consumer condition) { + try{ + SqlInfoConditionModel.Builder builder = new SqlInfoConditionModel.Builder(); + condition.accept(builder); + SqlInfoConditionModel build = builder.build(); + BuildCondition buildCondition = new BuildCondition(); + SqlFormatModel sqlFormatModel = buildCondition.context2Condition(build); + + String tmpSql = sqlFormatModel.getSql(); + tmpSql=tmpSql.substring(6); + Map tmpMap = sqlFormatModel.getDataMap(); + if (FuncBase.isEmpty(tmpMap)) {//没有参数的情况下 + String newSql=String.format("( 1!=1 OR %s) ",tmpSql); + wrapper.apply(newSql); + return; + } + + //存在参数的情况下 + List> entrieList = new ArrayList<>(tmpMap.entrySet()); + Collections.reverse(entrieList); + + int step=0; + Object[] objects=new Object[entrieList.size()]; + + // 然后,从列表的末尾开始遍历 + for (Map.Entry entry : entrieList) { + String key = entry.getKey(); // 获取键 + Object value = entry.getValue(); // 获取值 + + // 执行你的替换逻辑 + tmpSql = tmpSql.replace("#{"+ FuncBase.PARAM_NAME_VALUE_PAIRS+"." + key + "}", "{"+step+"}"); + objects[step]=value; + + step++; + } + String newSql=String.format(" ( 1!=1 OR %s) ",tmpSql);//1!=1 兼容语法 + wrapper.apply(newSql,objects); + }catch (Exception e){ + + } + + return; + } + + public void andBuild(Consumer condition) { + try{ + + SqlInfoConditionModel.Builder builder = new SqlInfoConditionModel.Builder(); + condition.accept(builder); + SqlInfoConditionModel build = builder.build(); + BuildCondition buildCondition = new BuildCondition(); + SqlFormatModel sqlFormatModel = buildCondition.context2Condition(build); + + String tmpSql = sqlFormatModel.getSql(); + tmpSql=tmpSql.substring(6); + Map tmpMap = sqlFormatModel.getDataMap(); + if (FuncBase.isEmpty(tmpMap)) {//没有参数的情况下 + String newSql=String.format("(%s) ",tmpSql); + wrapper.apply(newSql); + return; + } + + //存在参数的情况下 + List> entrieList = new ArrayList<>(tmpMap.entrySet()); + Collections.reverse(entrieList); + + int step=0; + Object[] objects=new Object[entrieList.size()]; + + // 然后,从列表的末尾开始遍历 + for (Map.Entry entry : entrieList) { + String key = entry.getKey(); // 获取键 + Object value = entry.getValue(); // 获取值 + + // 执行你的替换逻辑 + tmpSql = tmpSql.replace("#{"+ FuncBase.PARAM_NAME_VALUE_PAIRS+"." + key + "}", "{"+step+"}"); + + objects[step]=value; + + step++; + } + String newSql=String.format(" (%s) ",tmpSql); + wrapper.apply(newSql,objects); + }catch (Exception e){ + + } + + return; + } + + public JeeLowCodeQueryWrapper getWrapper() { + return wrapper; + } + + public void setWrapper(JeeLowCodeQueryWrapper wrapper) { + this.wrapper = wrapper; + } + + public SQLInterpretContext getContext() { + return this.context; + } + + public void setContext(SQLInterpretContext context) { + this.context = context; + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildDelete.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildDelete.java new file mode 100644 index 0000000..f70ec8b --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildDelete.java @@ -0,0 +1,52 @@ + +package com.jeelowcode.framework.plus.build.build.dql; + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoDeleteModel; +import com.jeelowcode.framework.plus.core.dql.update.JeeLowCodeUpdateWrapper; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import com.jeelowcode.framework.utils.utils.FuncBase; + +import java.util.Map; + +/** + * 构建 删除 语句 + */ +public class BuildDelete implements ISQLExpression { + + + public SqlFormatModel interpret(SQLInterpretContext context){ + SqlInfoDeleteModel sqlInfo = context.getDeleteModel(); + String tableName = sqlInfo.getTableName(); + Boolean isReal = sqlInfo.getReal(); + + + SqlFormatModel sqlFormatModel; + if (isReal){//真实删除 + String sql = "Delete from " + tableName; + sqlFormatModel = new SqlFormatModel(sql); + }else {//逻辑删除 + JeeLowCodeUpdateWrapper updateWrapper = new JeeLowCodeUpdateWrapper<>(); + updateWrapper.set("is_deleted",-1); + + String sqlSet = updateWrapper.getSqlSet(); + Map paramNameValuePairs = updateWrapper.getParamNameValuePairs(); + + //处理null值 + for (Map.Entry entry : paramNameValuePairs.entrySet()) { + Object value = entry.getValue(); + if(FuncBase.isEmpty(value)){ + entry.setValue(null); + } + } + + String sql = "update " + tableName + " set " + sqlSet ; + sqlFormatModel = new SqlFormatModel(sql, paramNameValuePairs); + } + return sqlFormatModel; + + } + + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildGroupBy.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildGroupBy.java new file mode 100644 index 0000000..226965e --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildGroupBy.java @@ -0,0 +1,35 @@ + +package com.jeelowcode.framework.plus.build.build.dql; + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoGroupModel; +import com.jeelowcode.framework.plus.core.dql.select.JeeLowCodeQueryWrapper; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import net.sf.jsqlparser.JSQLParserException; + +import java.util.Arrays; + +/** + * group by + */ +public class BuildGroupBy implements ISQLExpression { + + + + @Override + public SqlFormatModel interpret(SQLInterpretContext context) throws JSQLParserException { + + SqlInfoGroupModel sqlInfo = context.getGroupModel(); + String[] columns = sqlInfo.getColumns(); + + JeeLowCodeQueryWrapper wrapper=new JeeLowCodeQueryWrapper(); + wrapper.groupBy(Arrays.asList(columns)); + String groupByStr = wrapper.getCustomSqlSegment(); + + return new SqlFormatModel(groupByStr); + } + + + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildHaving.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildHaving.java new file mode 100644 index 0000000..f391ced --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildHaving.java @@ -0,0 +1,27 @@ + +package com.jeelowcode.framework.plus.build.build.dql; + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoHavingModel; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import net.sf.jsqlparser.JSQLParserException; + + +/** + * having 相关 + */ +public class BuildHaving extends BuildCondition implements ISQLExpression { + + + + @Override + public SqlFormatModel interpret(SQLInterpretContext context) throws JSQLParserException { + + SqlInfoHavingModel havingModel = context.getHavingModel(); + SqlFormatModel sqlFormatModel = super.context2Condition(havingModel); + return sqlFormatModel; + } + + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildInsert.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildInsert.java new file mode 100644 index 0000000..788f28c --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildInsert.java @@ -0,0 +1,70 @@ + +package com.jeelowcode.framework.plus.build.build.dql; + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoInsertModel; +import com.jeelowcode.framework.plus.core.dql.insert.JeeLowCodeInsertWrapper; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import com.jeelowcode.framework.utils.utils.FuncBase; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + + +/** + * 构建 insert 语句 + */ +public class BuildInsert implements ISQLExpression { + + + + @Override + public SqlFormatModel interpret(SQLInterpretContext context){ + SqlInfoInsertModel sqlInfo = context.getInsertModel(); + String tableName = sqlInfo.getTableName(); + + Map insertMap = sqlInfo.getInsertMap(); + + JeeLowCodeInsertWrapper insertWrapper = new JeeLowCodeInsertWrapper<>(); + for (Map.Entry entry : insertMap.entrySet()) { + insertWrapper.set(entry.getKey(),entry.getValue()); + } + + + //封装 + String sqlSet = insertWrapper.getSqlSet(); + String customSqlSegment = insertWrapper.getCustomSqlSegment(); + Map paramNameValuePairs = insertWrapper.getParamNameValuePairs(); + for (Map.Entry entry : paramNameValuePairs.entrySet()) { + Object value = entry.getValue(); + if(FuncBase.isEmpty(value)){ + entry.setValue(null); + } + } + + List fieldList=new ArrayList<>(); + List valueList=new ArrayList<>(); + List setList = FuncBase.toStrList(sqlSet); + for(String set:setList){ + String[] split = set.split("="); + String field=split[0]; + String value=split[1]; + fieldList.add(field); + if(!insertMap.containsKey(field)){//不存在,指定jdbc类型,不然oracle报错 + value=value.substring(0,value.length()-1)+",jdbcType=VARCHAR}"; + }else if(FuncBase.isEmpty(insertMap.get(field))){//为空,指定jdbc类型,不然oracle报错 + value=value.substring(0,value.length()-1)+",jdbcType=VARCHAR}"; + } + valueList.add(value); + + } + + String sql = "insert into " + tableName + "(%s) VALUE(%s) "; + String finalSql = String.format(sql, String.join(",", fieldList), String.join(",", valueList)); + + SqlFormatModel sqlFormatModel = new SqlFormatModel(finalSql,paramNameValuePairs); + return sqlFormatModel; + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildJoin.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildJoin.java new file mode 100644 index 0000000..a95259d --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildJoin.java @@ -0,0 +1,44 @@ + +package com.jeelowcode.framework.plus.build.build.dql; + + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoJoinModel; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import net.sf.jsqlparser.JSQLParserException; +/** + * left join ,inner join ,right join相关 + */ +public class BuildJoin implements ISQLExpression { + + + @Override + public SqlFormatModel interpret(SQLInterpretContext context) throws JSQLParserException { + + SqlInfoJoinModel model = context.getJoinModel(); + SqlInfoJoinModel.JoinType joinType = model.getJoinType(); + String onStr = model.getOnStr(); + String tableName = model.getTableName(); + + String joinSymbolStr=""; + switch (joinType) { + case LEFT_JOIN: + joinSymbolStr = "LEFT JOIN"; + break; + case RIGHT_JOIN: + joinSymbolStr = "RIGHT JOIN"; + break; + case INNER_JOIN: + joinSymbolStr = "INNER JOIN"; + break; + } + String sql= joinSymbolStr+" "+tableName+" on "+onStr; + + SqlFormatModel sqlFormatModel = new SqlFormatModel(sql); + return sqlFormatModel; + } + + + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildOrderBy.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildOrderBy.java new file mode 100644 index 0000000..dcf974c --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildOrderBy.java @@ -0,0 +1,40 @@ + +package com.jeelowcode.framework.plus.build.build.dql; + + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoOrderModel; +import com.jeelowcode.framework.plus.core.dql.select.JeeLowCodeQueryWrapper; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import net.sf.jsqlparser.JSQLParserException; + +import java.util.*; + +/** + * 排序 + */ +public class BuildOrderBy implements ISQLExpression { + + + + @Override + public SqlFormatModel interpret(SQLInterpretContext context) throws JSQLParserException { + JeeLowCodeQueryWrapper wrapper=new JeeLowCodeQueryWrapper(); + + SqlInfoOrderModel sqlInfoOrderModel = context.getOrderModel(); + List orderModels = sqlInfoOrderModel.getOrderByList(); + orderModels.forEach(orderModel -> { + String[] columns = orderModel.getColumns();//列 + boolean isAsc = orderModel.isAsc(); + wrapper.orderBy(true,isAsc, Arrays.asList(columns)); + }); + + String orderByStr = wrapper.getCustomSqlSegment(); + + return new SqlFormatModel(orderByStr); + } + + + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildPublicSql.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildPublicSql.java new file mode 100644 index 0000000..1303339 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildPublicSql.java @@ -0,0 +1,27 @@ + +package com.jeelowcode.framework.plus.build.build.dql; + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoPublicModel; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import net.sf.jsqlparser.JSQLParserException; + +/** + * 通用sql + */ +public class BuildPublicSql implements ISQLExpression { + + + + @Override + public SqlFormatModel interpret(SQLInterpretContext context) throws JSQLParserException { + SqlInfoPublicModel sqlInfo = context.getPublicModel(); + String sql = sqlInfo.getSql();//获取原有的sql + return new SqlFormatModel(sql); + + } + + + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildSelect.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildSelect.java new file mode 100644 index 0000000..e328649 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildSelect.java @@ -0,0 +1,42 @@ + +package com.jeelowcode.framework.plus.build.build.dql; + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoSelectModel; +import com.jeelowcode.framework.plus.core.dql.select.JeeLowCodeQueryWrapper; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import com.jeelowcode.framework.utils.utils.FuncBase; +import net.sf.jsqlparser.JSQLParserException; + +/** + * 查询相关 + */ +public class BuildSelect implements ISQLExpression { + + + + @Override + public SqlFormatModel interpret(SQLInterpretContext context) throws JSQLParserException { + SqlInfoSelectModel sqlInfo = context.getSelectModel(); + String[] columns = sqlInfo.getColumns();//查询列 + String tableName = sqlInfo.getTableName();//查询表 + + if(FuncBase.isEmpty(columns)){ + columns = new String[]{"*"}; + } + JeeLowCodeQueryWrapper wrapper=new JeeLowCodeQueryWrapper(); + wrapper.select(columns); + + String sqlSelect = wrapper.getSqlSelect(); + + String sql = "select " + sqlSelect + " from " + tableName; + + + return new SqlFormatModel(sql); + + } + + + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildUpdate.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildUpdate.java new file mode 100644 index 0000000..0448b01 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildUpdate.java @@ -0,0 +1,70 @@ + +package com.jeelowcode.framework.plus.build.build.dql; + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoUpdateModel; +import com.jeelowcode.framework.plus.core.dql.update.JeeLowCodeUpdateWrapper; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import com.jeelowcode.framework.utils.utils.FuncBase; + +import java.util.*; + +/** + * 构建 update 语句 + */ +public class BuildUpdate implements ISQLExpression { + + + + @Override + public SqlFormatModel interpret(SQLInterpretContext context){ + SqlInfoUpdateModel sqlInfo = context.getUpdateModel(); + String tableName = sqlInfo.getTableName(); + JeeLowCodeUpdateWrapper updateWrapper = new JeeLowCodeUpdateWrapper(tableName); + + + Map updateMap = sqlInfo.getUpdateMap(); + updateMap.forEach((k,v)->{ + updateWrapper.set(k,v); + }); + + String sqlSet = updateWrapper.getSqlSet(); + Map paramNameValuePairs = updateWrapper.getParamNameValuePairs(); + + String newSqlSet=""; + + + List setList = FuncBase.toStrList(sqlSet); + for(String set:setList){ + String[] split = set.split("="); + String field=split[0]; + String value=split[1]; + if(!updateMap.containsKey(field)){//不存在,指定jdbc类型,不然oracle报错 + value=value.substring(0,value.length()-1)+",jdbcType=VARCHAR}"; + }else if(FuncBase.isEmpty(updateMap.get(field))){//为空,指定jdbc类型,不然oracle报错 + value=value.substring(0,value.length()-1)+",jdbcType=VARCHAR}"; + } + if(FuncBase.isEmpty(newSqlSet)){ + newSqlSet=field+"="+value; + }else{ + newSqlSet+=","+field+"="+value; + } + } + + //处理null值 + for (Map.Entry entry : paramNameValuePairs.entrySet()) { + Object value = entry.getValue(); + if(FuncBase.isEmpty(value)){ + entry.setValue(null); + } + } + + String sql = "update " + tableName + " set " + newSqlSet ; + SqlFormatModel sqlFormatModel = new SqlFormatModel(sql, paramNameValuePairs); + + return sqlFormatModel; + } + + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildWhere.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildWhere.java new file mode 100644 index 0000000..ec078b4 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/build/dql/BuildWhere.java @@ -0,0 +1,34 @@ + +package com.jeelowcode.framework.plus.build.build.dql; + + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoWhereModel; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import net.sf.jsqlparser.JSQLParserException; + +/** + * 构建where语句相关 + */ +public class BuildWhere extends BuildCondition implements ISQLExpression { + + + + + public BuildWhere() { + } + + public BuildWhere(SQLInterpretContext context){ + super.context = context; + } + + @Override + public SqlFormatModel interpret(SQLInterpretContext context) throws JSQLParserException { + SqlInfoWhereModel whereModel = context.getWhereModel(); + SqlFormatModel sqlFormatModel = super.context2Condition(whereModel); + return sqlFormatModel; + } + + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ExpressionModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ExpressionModel.java new file mode 100644 index 0000000..b481df7 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ExpressionModel.java @@ -0,0 +1,35 @@ + +package com.jeelowcode.framework.plus.build.buildmodel; + + +import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoConditionModel; + +public class ExpressionModel { + private SqlInfoConditionModel.WhereType whereType; + private String column; + private Object[] value; + + public SqlInfoConditionModel.WhereType getWhereType() { + return whereType; + } + + public void setWhereType(SqlInfoConditionModel.WhereType whereType) { + this.whereType = whereType; + } + + public String getColumn() { + return column; + } + + public void setColumn(String column) { + this.column = column; + } + + public Object[] getValue() { + return value; + } + + public void setValue(Object[] value) { + this.value = value; + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/SQLInterpretContext.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/SQLInterpretContext.java new file mode 100644 index 0000000..5478863 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/SQLInterpretContext.java @@ -0,0 +1,245 @@ + +package com.jeelowcode.framework.plus.build.buildmodel; + +import com.jeelowcode.framework.plus.build.buildmodel.dql.*; +import com.jeelowcode.framework.plus.build.buildmodel.ddl.*; +import com.jeelowcode.framework.plus.build.buildmodel.ddl.*; +import com.jeelowcode.framework.plus.entity.DbColunmTypesEntity; +import com.jeelowcode.framework.plus.build.buildmodel.dql.*; + +/** + * @author JX + * @create 2024-07-23 9:07 + * @dedescription: + */ +public class SQLInterpretContext { + + private String preSymbol="ew."; + + private String schemaName; + + private Boolean tenantIgnore; + + private SqlInfoInsertModel insertModel; + + private SqlInfoDeleteModel deleteModel; + + private SqlInfoAlterModel alterModel; + + private SqlInfoSelectModel selectModel; + + private SqlInfoCreateModel createModel; + + private SqlInfoCreateIndexModel createIndexModel; + + private SqlInfoUpdateModel updateModel; + + private SqlInfoDropModel dropModel; + + private SqlInfoWhereModel whereModel; + + private SqlInfoOrderModel orderModel; + + private SqlInfoGroupModel groupModel; + + private SqlInfoHavingModel havingModel; + + private SqlInfoJoinModel joinModel; + + private ExpressionModel expressionModel; + + private DbColunmTypesEntity dbColunmTypes; + + private SqlInfoCommentModel commentModel; + + private SqlInfoPrimaryKeyModel primaryKeyModel; + + private SqlInfoDdlModel ddlModel; + + private SqlInfoPublicModel publicModel; + + + public SQLInterpretContext(String schemaName) { + this.schemaName = schemaName; + } + + + ///=========================================================================== + + + public String getSchemaName() { + return schemaName; + } + + public void setSchemaName(String schemaName) { + this.schemaName = schemaName; + } + + public SqlInfoInsertModel getInsertModel() { + return insertModel; + } + + public void setInsertModel(SqlInfoInsertModel insertModel) { + this.insertModel = insertModel; + } + + public SqlInfoDeleteModel getDeleteModel() { + return deleteModel; + } + + public void setDeleteModel(SqlInfoDeleteModel deleteModel) { + this.deleteModel = deleteModel; + } + + public SqlInfoAlterModel getAlterModel() { + return alterModel; + } + + public void setAlterModel(SqlInfoAlterModel alterModel) { + this.alterModel = alterModel; + } + + public SqlInfoSelectModel getSelectModel() { + return selectModel; + } + + public void setSelectModel(SqlInfoSelectModel selectModel) { + this.selectModel = selectModel; + } + + public SqlInfoCreateModel getCreateModel() { + return createModel; + } + + public void setCreateModel(SqlInfoCreateModel createModel) { + this.createModel = createModel; + } + + public SqlInfoCreateIndexModel getCreateIndexModel() { + return createIndexModel; + } + + public void setCreateIndexModel(SqlInfoCreateIndexModel createIndexModel) { + this.createIndexModel = createIndexModel; + } + + public SqlInfoUpdateModel getUpdateModel() { + return updateModel; + } + + public void setUpdateModel(SqlInfoUpdateModel updateModel) { + this.updateModel = updateModel; + } + + public SqlInfoDropModel getDropModel() { + return dropModel; + } + + public void setDropModel(SqlInfoDropModel dropModel) { + this.dropModel = dropModel; + } + + public SqlInfoWhereModel getWhereModel() { + return whereModel; + } + + public void setWhereModel(SqlInfoWhereModel whereModel) { + this.whereModel = whereModel; + } + + public SqlInfoOrderModel getOrderModel() { + return orderModel; + } + + public void setOrderModel(SqlInfoOrderModel orderModel) { + this.orderModel = orderModel; + } + + public SqlInfoGroupModel getGroupModel() { + return groupModel; + } + + public void setGroupModel(SqlInfoGroupModel groupModel) { + this.groupModel = groupModel; + } + + public SqlInfoHavingModel getHavingModel() { + return havingModel; + } + + public void setHavingModel(SqlInfoHavingModel havingModel) { + this.havingModel = havingModel; + } + + public SqlInfoJoinModel getJoinModel() { + return joinModel; + } + + public void setJoinModel(SqlInfoJoinModel joinModel) { + this.joinModel = joinModel; + } + + public ExpressionModel getExpressionModel() { + return expressionModel; + } + + public void setExpressionModel(ExpressionModel expressionModel) { + this.expressionModel = expressionModel; + } + + public DbColunmTypesEntity getDbColunmTypes() { + return dbColunmTypes; + } + + public void setDbColunmTypes(DbColunmTypesEntity dbColunmTypes) { + this.dbColunmTypes = dbColunmTypes; + } + + public SqlInfoCommentModel getCommentModel() { + return commentModel; + } + + public void setCommentModel(SqlInfoCommentModel commentModel) { + this.commentModel = commentModel; + } + + public SqlInfoPrimaryKeyModel getPrimaryKeyModel() { + return primaryKeyModel; + } + + public void setPrimaryKeyModel(SqlInfoPrimaryKeyModel primaryKeyModel) { + this.primaryKeyModel = primaryKeyModel; + } + + public SqlInfoDdlModel getDdlModel() { + return ddlModel; + } + + public void setDdlModel(SqlInfoDdlModel ddlModel) { + this.ddlModel = ddlModel; + } + + public String getPreSymbol() { + return preSymbol; + } + + public void setPreSymbol(String preSymbol) { + this.preSymbol = preSymbol; + } + + public SqlInfoPublicModel getPublicModel() { + return publicModel; + } + + public void setPublicModel(SqlInfoPublicModel publicModel) { + this.publicModel = publicModel; + } + + public Boolean getTenantIgnore() { + return tenantIgnore; + } + + public void setTenantIgnore(Boolean tenantIgnore) { + this.tenantIgnore = tenantIgnore; + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/SqlInfoBaseModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/SqlInfoBaseModel.java new file mode 100644 index 0000000..1e61c9e --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/SqlInfoBaseModel.java @@ -0,0 +1,22 @@ + +package com.jeelowcode.framework.plus.build.buildmodel; + + +import com.jeelowcode.framework.plus.build.ISQLExpression; + +/** + * 自定义 model + */ + +public class SqlInfoBaseModel { + + ISQLExpression sqlExpression; + + public ISQLExpression getSqlExpression() { + return sqlExpression; + } + + public void setSqlExpression(ISQLExpression sqlExpression) { + this.sqlExpression = sqlExpression; + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/FieldCommentModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/FieldCommentModel.java new file mode 100644 index 0000000..2019c73 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/FieldCommentModel.java @@ -0,0 +1,35 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.ddl; + + +import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel; + +/** + * 数据库字段列表 + */ +public class FieldCommentModel extends SqlInfoBaseModel { + private String fieldCode;//字段 + private String fieldName;//字段名称 + + public FieldCommentModel(String fieldCode, String fieldName) { + this.fieldCode = fieldCode; + this.fieldName = fieldName; + } + + public String getFieldCode() { + return fieldCode; + } + + public void setFieldCode(String fieldCode) { + this.fieldCode = fieldCode; + } + + public String getFieldName() { + return fieldName; + } + + public void setFieldName(String fieldName) { + this.fieldName = fieldName; + } + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoAlterModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoAlterModel.java new file mode 100644 index 0000000..6a10eba --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoAlterModel.java @@ -0,0 +1,90 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.ddl; + + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.ddl.BuildAlter; +import com.jeelowcode.framework.plus.entity.FieldModel; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; + +import java.util.List; + +/** + * @author JX + * @create 2024-07-06 11:45 + * @dedescription: + */ +public class SqlInfoAlterModel extends SqlInfoBaseDdlModel { + + private AlterType alterType;//操作类型 + + private String tableName;//表名称 + //addColumn + private FieldModel fieldModel;//字段属性 + + + private SqlInfoAlterModel(){} + + + public enum AlterType{ + ADD_COLUMN, //增加字段 + UPDATE_COLUMN //修改字段 + } + + public static Builder builder(){ + return new Builder(); + } + public static class Builder{ + + private SqlInfoAlterModel alterModel = new SqlInfoAlterModel(); + ISQLExpression> alterExpression = new BuildAlter(); + + public Builder setTableName(String tableName){ + alterModel.tableName = tableName; + return this; + } + //增加字段 + public SqlInfoAlterModel buildAddColumn(FieldModel fieldModel){ + alterModel.alterType = AlterType.ADD_COLUMN; + alterModel.fieldModel =fieldModel; + alterModel.setSqlExpression(alterExpression); + return alterModel; + } + + //更新字段 + public SqlInfoAlterModel buildUpdateColum(FieldModel fieldModel){ + alterModel.alterType = AlterType.UPDATE_COLUMN; + alterModel.fieldModel =fieldModel; + alterModel.setSqlExpression(alterExpression); + return alterModel; + } + + } + + + public AlterType getAlterType() { + return alterType; + } + + public void setAlterType(AlterType alterType) { + this.alterType = alterType; + } + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public FieldModel getFieldModel() { + return fieldModel; + } + + public void setFieldModel(FieldModel fieldModel) { + this.fieldModel = fieldModel; + } + + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoBaseDdlModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoBaseDdlModel.java new file mode 100644 index 0000000..7618f50 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoBaseDdlModel.java @@ -0,0 +1,25 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.ddl; + + +import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel; + +import java.util.List; + +/** + * DDL 公共 + * @param + */ +public class SqlInfoBaseDdlModel extends SqlInfoBaseModel { + + //优先级最高,有值则只运行这里 + private List executeDdlList; + + public List getExecuteDdlList() { + return executeDdlList; + } + + public void setExecuteDdlList(List executeDdlList) { + this.executeDdlList = executeDdlList; + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoCommentModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoCommentModel.java new file mode 100644 index 0000000..238fff1 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoCommentModel.java @@ -0,0 +1,67 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.ddl; + + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.ddl.BuildComment; +import com.jeelowcode.framework.plus.entity.FieldModel; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; + +import java.util.List; + +/** + * @author JX + * @create 2024-07-06 11:45 + * @dedescription: + */ +public class SqlInfoCommentModel extends SqlInfoBaseDdlModel { + + String tableName; + String tableAlias; + List fieldModelList; + + + + private SqlInfoCommentModel(){} + + //构建表备注 + public static Builder builder(){ + return new Builder(); + } + + public static class Builder{ + + private SqlInfoCommentModel model = new SqlInfoCommentModel(); + ISQLExpression> commentExpression = new BuildComment(); + + public Builder setTableName(String tableName){ + model.tableName = tableName; + return this; + } + public Builder setTableAlias(String tableAlias){ + model.tableAlias = tableAlias; + return this; + } + public Builder setfieldModelList(List fieldModelList){ + model.fieldModelList = fieldModelList; + return this; + } + //增加字段 + public SqlInfoCommentModel build(){ + model.setSqlExpression(commentExpression); + return model; + } + } + + public String getTableName() { + return tableName; + } + + public String getTableAlias() { + return tableAlias; + } + + public List getFieldModelList() { + return fieldModelList; + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoCreateIndexModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoCreateIndexModel.java new file mode 100644 index 0000000..9315543 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoCreateIndexModel.java @@ -0,0 +1,94 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.ddl; + + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.ddl.BuildCreateIndex; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; + +import java.util.List; + +/** + * @author JX + * @create 2024-07-05 17:09 + * @dedescription: + */ +public class SqlInfoCreateIndexModel extends SqlInfoBaseDdlModel { + + String tableName;//表 + //index + private String indexName;//索引名称 + + private String indexType;//索引类型 + + private List indexFieldCodeList;//索引值 + + + public static Builder builder(){ + return new Builder(); + } + + public static class Builder{ + private SqlInfoCreateIndexModel sqlInfoCreateModel = new SqlInfoCreateIndexModel(); + ISQLExpression> expression = new BuildCreateIndex(); + + public Builder setTableName(String tableName) { + sqlInfoCreateModel.tableName = tableName; + return this; + } + + public Builder setIndexName(String indexName) { + sqlInfoCreateModel.indexName = indexName; + return this; + } + + public Builder setIndexFieldCodeList(List indexFieldCodeList) { + sqlInfoCreateModel.indexFieldCodeList = indexFieldCodeList; + return this; + } + + public Builder setIndexType(String indexType) { + sqlInfoCreateModel.indexType = indexType; + return this; + } + + public SqlInfoCreateIndexModel build() { + ISQLExpression> expression = new BuildCreateIndex(); + sqlInfoCreateModel.setSqlExpression(expression); + return sqlInfoCreateModel; + } + } + + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public String getIndexName() { + return indexName; + } + + public void setIndexName(String indexName) { + this.indexName = indexName; + } + + public List getIndexFieldCodeList() { + return indexFieldCodeList; + } + + public void setIndexFieldCodeList(List indexFieldCodeList) { + this.indexFieldCodeList = indexFieldCodeList; + } + + public String getIndexType() { + return indexType; + } + + public void setIndexType(String indexType) { + this.indexType = indexType; + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoCreateModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoCreateModel.java new file mode 100644 index 0000000..c04037c --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoCreateModel.java @@ -0,0 +1,62 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.ddl; + + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.ddl.BuildCreateTable; +import com.jeelowcode.framework.plus.entity.FieldModel; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; + +import java.util.List; + +/** + * @author JX + * @create 2024-07-05 17:09 + * @dedescription: + */ +public class SqlInfoCreateModel extends SqlInfoBaseDdlModel { + + String tableName;//表 + List tableOptions; + + public static Builder builder(){ + return new Builder(); + } + + public static class Builder{ + private SqlInfoCreateModel sqlInfoCreateModel = new SqlInfoCreateModel(); + ISQLExpression> createTableExpression = new BuildCreateTable(); + public Builder setTableName(String tableName) { + sqlInfoCreateModel.tableName = tableName; + return this; + } + + public Builder setTableOptions(List tableOptions) { + sqlInfoCreateModel.tableOptions = tableOptions; + return this; + } + + public SqlInfoCreateModel build() { + sqlInfoCreateModel.setSqlExpression(createTableExpression); + return sqlInfoCreateModel; + } + } + + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public List getTableOptions() { + return tableOptions; + } + + public void setTableOptions(List tableOptions) { + this.tableOptions = tableOptions; + } + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoDdlModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoDdlModel.java new file mode 100644 index 0000000..e6e49aa --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoDdlModel.java @@ -0,0 +1,100 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.ddl; + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.ddl.BuildDdl; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + */ +public class SqlInfoDdlModel extends SqlInfoBaseDdlModel { + + private DdlType type;//操作类型 + + private Map map;//参数 + + private SqlInfoDdlModel(){} + + public static Builder builder(){ + return new Builder(); + } + + + public static class Builder{ + + private SqlInfoDdlModel ddlModel = new SqlInfoDdlModel(); + + ISQLExpression> expression = new BuildDdl(); + + public SqlInfoDdlModel buildIndexExist(String tableName,String indexName){ + Map map=new HashMap<>(); + map.put("tableName",tableName); + map.put("indexName",indexName); + ddlModel.type= DdlType.INDEX_EXIST; + ddlModel.map=map; + ddlModel.setSqlExpression(expression); + return ddlModel; + } + public SqlInfoDdlModel buildIndexAllByTable(String tableName){ + Map map=new HashMap<>(); + map.put("tableName",tableName); + ddlModel.type= DdlType.INDEX_ALL; + ddlModel.map=map; + ddlModel.setSqlExpression(expression); + return ddlModel; + } + public SqlInfoDdlModel buildTableExist(String tableName){ + Map map=new HashMap<>(); + map.put("tableName",tableName); + ddlModel.type= DdlType.TABLE_EXIST; + ddlModel.map=map; + ddlModel.setSqlExpression(expression); + return ddlModel; + } + public SqlInfoDdlModel buildGetAllTableName(){ + Map map=new HashMap<>(); + ddlModel.type= DdlType.ALL_TABLE_NAME; + ddlModel.map=map; + ddlModel.setSqlExpression(expression); + return ddlModel; + } + public SqlInfoDdlModel buildFieldComment(String tableName){ + Map map=new HashMap<>(); + map.put("tableName",tableName); + ddlModel.type= DdlType.TABLE_FIELD_COMMENT; + ddlModel.map=map; + ddlModel.setSqlExpression(expression); + return ddlModel; + } + public SqlInfoDdlModel buildTableComment(String tableName){ + Map map=new HashMap<>(); + map.put("tableName",tableName); + ddlModel.type= DdlType.TABLE_COMMENT; + ddlModel.map=map; + ddlModel.setSqlExpression(expression); + return ddlModel; + } + } + + + public enum DdlType{ + INDEX_EXIST,//索引是否存在 + INDEX_ALL,//所有索引 + TABLE_EXIST,//表名是否存在 + ALL_TABLE_NAME,//所有表名 + TABLE_COMMENT,//表备注 + TABLE_FIELD_COMMENT;//表字段备注 + } + + public DdlType getType() { + return type; + } + + public Map getMap() { + return map; + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoDropModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoDropModel.java new file mode 100644 index 0000000..3687881 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoDropModel.java @@ -0,0 +1,109 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.ddl; + + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.ddl.BuildDrop; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; + +import java.util.List; + +/** + * @author JX + * @create 2024-07-06 11:45 + * @dedescription: + */ +public class SqlInfoDropModel extends SqlInfoBaseDdlModel { + + private DropType dropType;//操作类型 + + String tableName;//表 + + private String cloumnCode;//字段 + private String cloumnFormat;//格式化 + + private String indexName;//索引名称 + + private SqlInfoDropModel(){} + + public static Builder builder(){ + return new Builder(); + } + + + public static class Builder{ + + private SqlInfoDropModel dropModel = new SqlInfoDropModel(); + + ISQLExpression> expression = new BuildDrop(); + + public SqlInfoDropModel buildDropTable(String tableName){ + dropModel.tableName = tableName; + dropModel.dropType = DropType.DROP_TABLE; + dropModel.setSqlExpression(expression); + return dropModel; + } + public SqlInfoDropModel buildDropColumn(String tableName,String column){ + dropModel.tableName = tableName; + dropModel.cloumnCode=column; + dropModel.dropType = DropType.DROP_COLUMN; + dropModel.setSqlExpression(expression); + return dropModel; + } + public SqlInfoDropModel buildDropIndex(String tableName,String indexName){ + dropModel.tableName = tableName; + dropModel.dropType = DropType.DROP_INDEX; + dropModel.indexName=indexName; + dropModel.setSqlExpression(expression); + return dropModel; + } + + } + + + public enum DropType{ + DROP_TABLE, //删除表 + DROP_COLUMN, //删除字段 + DROP_INDEX //删除索引 + } + + public DropType getDropType() { + return dropType; + } + + public void setDropType(DropType dropType) { + this.dropType = dropType; + } + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public String getCloumnCode() { + return cloumnCode; + } + + public void setCloumnCode(String cloumnCode) { + this.cloumnCode = cloumnCode; + } + + public String getIndexName() { + return indexName; + } + + public void setIndexName(String indexName) { + this.indexName = indexName; + } + + public String getCloumnFormat() { + return cloumnFormat; + } + + public void setCloumnFormat(String cloumnFormat) { + this.cloumnFormat = cloumnFormat; + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoPrimaryKeyModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoPrimaryKeyModel.java new file mode 100644 index 0000000..bfa6a57 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/ddl/SqlInfoPrimaryKeyModel.java @@ -0,0 +1,61 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.ddl; + + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.ddl.BuildPrimaryKey; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; + +import java.util.List; + +/** + * @author JX + * @create 2024-07-05 17:09 + * @dedescription: + */ +public class SqlInfoPrimaryKeyModel extends SqlInfoBaseDdlModel { + + String tableName;//表 + List keyList; + + public static Builder builder(){ + return new Builder(); + } + + public static class Builder{ + private SqlInfoPrimaryKeyModel sqlInfoCreateModel = new SqlInfoPrimaryKeyModel(); + ISQLExpression> primaryKeyExpression = new BuildPrimaryKey(); + public Builder setTableName(String tableName) { + sqlInfoCreateModel.tableName = tableName; + return this; + } + + public Builder setPrimaryKey(List keyList) { + sqlInfoCreateModel.keyList = keyList; + return this; + } + + public SqlInfoPrimaryKeyModel build() { + sqlInfoCreateModel.setSqlExpression(primaryKeyExpression); + return sqlInfoCreateModel; + } + } + + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public List getKeyList() { + return keyList; + } + + public void setKeyList(List keyList) { + this.keyList = keyList; + } + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoConditionModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoConditionModel.java new file mode 100644 index 0000000..43b98e6 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoConditionModel.java @@ -0,0 +1,246 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.dql; + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.dql.BuildCondition; +import com.jeelowcode.framework.plus.build.build.dql.BuildHaving; +import com.jeelowcode.framework.plus.build.build.dql.BuildWhere; +import com.jeelowcode.framework.plus.build.buildmodel.ExpressionModel; +import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import com.jeelowcode.framework.utils.utils.FuncBase; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + +/** + * @author JX + * @create 2024-07-30 10:17 + * @dedescription: + */ +public class SqlInfoConditionModel extends SqlInfoBaseModel { + + + private List expressions = new ArrayList<>(); + + public static SqlInfoConditionModel.Builder builder() { + return new SqlInfoConditionModel.Builder(); + } + + public static class Builder { + + private SqlInfoConditionModel conditionModel = new SqlInfoConditionModel(); + + public SqlInfoConditionModel.Builder gt(String column, Object value) { + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.GT, column, value)); + return this; + } + + public SqlInfoConditionModel.Builder ge(String column, Object value) { + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.GE, column, value)); + return this; + } + + public SqlInfoConditionModel.Builder ne(String column, Object value) { + if (FuncBase.isEmpty(value)) { + return this; + } + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.NE, column, value)); + return this; + } + + public SqlInfoConditionModel.Builder eq(String column, Object value) { + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.EQ, column, value)); + return this; + } + + public SqlInfoConditionModel.Builder lt(String column, Object value) { + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.LT, column, value)); + return this; + } + + public SqlInfoConditionModel.Builder le(String column, Object value) { + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.LE, column, value)); + return this; + } + + + public SqlInfoConditionModel.Builder between(String column, Object... value) { + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.BETWEEN, column, value)); + return this; + } + + public SqlInfoConditionModel.Builder notbetween(String column, Object... value) { + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.NOT_BETWEEN, column, value)); + return this; + } + + public SqlInfoConditionModel.Builder in(boolean condition, String column, Object... value) { + if (!condition) { + return this; + } + return this.in(column, value); + } + + public SqlInfoConditionModel.Builder in(String column, Object... value) { + if (FuncBase.isEmpty(value)) { + return this; + } + Object valueTmp = value[0]; + if (FuncBase.isEmpty(valueTmp)) { + return this; + } + + if (value.length == 1) { + if (valueTmp instanceof List) { + List tmpList = (List) valueTmp; + if (tmpList.size() == 1) { + this.eq(column, tmpList.get(0)); + return this; + } + + } + } + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.IN, column, value)); + + return this; + } + + public SqlInfoConditionModel.Builder notIn(String column, Object... value) { + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.NOT_IN, column, value)); + return this; + } + + public SqlInfoConditionModel.Builder like(boolean condition, String column, Object... value) { + if (!condition) { + return this; + } + return like(column, value); + } + + public SqlInfoConditionModel.Builder like(String column, Object... value) { + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.LIKE, column, value)); + return this; + } + + public SqlInfoConditionModel.Builder notLike(String column, Object... value) { + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.NOT_LIKE, column, value)); + return this; + } + + public SqlInfoConditionModel.Builder likeLeft(String column, Object... value) { + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.LIKE_LEFT, column, value)); + return this; + } + public SqlInfoConditionModel.Builder notLikeLeft(String column, Object... value) { + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.NOT_LIKE_LEFT, column, value)); + return this; + } + + public SqlInfoConditionModel.Builder likeRight(String column, Object... value) { + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.LIKE_RIGHT, column, value)); + return this; + } + public SqlInfoConditionModel.Builder notLikeRight(String column, Object... value) { + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.NOT_LIKE_RIGHT, column, value)); + return this; + } + + public SqlInfoConditionModel.Builder isNull(String column, Object... value) { + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.IS_NULL, column, value)); + return this; + } + + public SqlInfoConditionModel.Builder isNotNull(String column, Object... value) { + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.IS_NOT_NULL, column, value)); + return this; + } + + public SqlInfoConditionModel.Builder apply(String apply) { + conditionModel.expressions.add(buildExpression(WhereType.APPLY, apply, null)); + return this; + } + + public SqlInfoConditionModel.Builder or() { + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.OR, null, null)); + return this; + } + + public SqlInfoConditionModel.Builder or(Consumer orBuilderConsumer) { + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.OR_BUILD, null, orBuilderConsumer)); + return this; + } + + public SqlInfoConditionModel.Builder and(Consumer andBuilderConsumer) { + conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.AND_BUILD, null, andBuilderConsumer)); + return this; + } + + + public SqlInfoWhereModel buildWhere() { + ISQLExpression expression = new BuildWhere(); + SqlInfoWhereModel whereModel = new SqlInfoWhereModel(); + List expressions = conditionModel.getExpressions(); + whereModel.setExpressions(expressions); + whereModel.setSqlExpression(expression); + return whereModel; + } + + public SqlInfoHavingModel buildHaving() { + ISQLExpression expression = new BuildHaving(); + + SqlInfoHavingModel havingModel = new SqlInfoHavingModel(); + List expressions = conditionModel.getExpressions(); + havingModel.setExpressions(expressions); + havingModel.setSqlExpression(expression); + return havingModel; + } + + public SqlInfoConditionModel build() { + return conditionModel; + } + } + + public List getExpressions() { + return expressions; + } + + + public enum WhereType { + GT, //> + GE, //>= + NE, //!= + EQ, //= + LT, //< + LE, //<= + BETWEEN, + NOT_BETWEEN, + IN, + NOT_IN, + LIKE, + NOT_LIKE, + LIKE_LEFT, + NOT_LIKE_LEFT, + LIKE_RIGHT, + NOT_LIKE_RIGHT, + IS_NULL, + IS_NOT_NULL, + OR, + OR_BUILD, + AND_BUILD, + APPLY + } + + private static ExpressionModel buildExpression(SqlInfoConditionModel.WhereType whereType, String column, Object... value) { + ExpressionModel expression = new ExpressionModel(); + expression.setWhereType(whereType); + expression.setColumn(column); + expression.setValue(value); + return expression; + } + + public void setExpressions(List expressions) { + this.expressions = expressions; + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoDeleteModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoDeleteModel.java new file mode 100644 index 0000000..0f7d0dd --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoDeleteModel.java @@ -0,0 +1,51 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.dql; + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.dql.BuildDelete; +import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; + +public class SqlInfoDeleteModel extends SqlInfoBaseModel { + private String tableName; + + private Boolean isReal; + + private SqlInfoDeleteModel(){} + + public static Builder builder(){ + return new Builder(); + } + + + public static class Builder { + + private SqlInfoDeleteModel sqlInfoDeleteModel = new SqlInfoDeleteModel(); + + public Builder setTableName(String tableName) { + sqlInfoDeleteModel.tableName = tableName; + sqlInfoDeleteModel.isReal=false;//逻辑删除 + return this; + } + + public Builder setTableName(String tableName,boolean isReal) { + sqlInfoDeleteModel.tableName = tableName; + sqlInfoDeleteModel.isReal=isReal; + return this; + } + + public SqlInfoDeleteModel build(){ + ISQLExpression expression = new BuildDelete(); + sqlInfoDeleteModel.setSqlExpression(expression); + return sqlInfoDeleteModel; + } + } + + public String getTableName() { + return tableName; + } + + public Boolean getReal() { + return isReal; + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoGroupModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoGroupModel.java new file mode 100644 index 0000000..55ae1ac --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoGroupModel.java @@ -0,0 +1,47 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.dql; + + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.dql.BuildDelete; +import com.jeelowcode.framework.plus.build.build.dql.BuildGroupBy; +import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; + +/** + * @author JX + * @create 2024-07-04 10:51 + * @dedescription: + */ +public class SqlInfoGroupModel extends SqlInfoBaseModel { + + private String[] columns; + + public String[] getColumns() { + return columns; + } + + public void setColumns(String... columns) { + this.columns = columns; + } + + public SqlInfoGroupModel (){} + + public static Builder builder (){ + return new Builder(); + } + public static class Builder{ + private SqlInfoGroupModel groupModel = new SqlInfoGroupModel(); + + public Builder setColumns(String... columns){ + groupModel.columns = columns; + return this; + } + + public SqlInfoGroupModel build(){ + ISQLExpression expression = new BuildGroupBy(); + groupModel.setSqlExpression(expression); + return groupModel; + } + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoHavingModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoHavingModel.java new file mode 100644 index 0000000..a0361a0 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoHavingModel.java @@ -0,0 +1,15 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.dql; + + +/** + * @author JX + * @create 2024-07-04 9:14 + * @dedescription: + */ +public class SqlInfoHavingModel extends SqlInfoConditionModel { + + + + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoInsertModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoInsertModel.java new file mode 100644 index 0000000..888a914 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoInsertModel.java @@ -0,0 +1,65 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.dql; + + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.dql.BuildInsert; +import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; + +import java.util.LinkedHashMap; +import java.util.Map; + +public class SqlInfoInsertModel extends SqlInfoBaseModel { + + private String tableName; + + private Map insertMap=new LinkedHashMap<>(); + + private SqlInfoInsertModel (){} + + public static Builder builder(){ + return new Builder(); + } + + public static class Builder{ + private SqlInfoInsertModel insertModel = new SqlInfoInsertModel(); + + public Builder setTableName(String tableName){ + insertModel.setTableName(tableName); + return this; + } + public Builder addColumn(String column,Object val){ + insertModel.insertMap.put(column,val); + return this; + } + + public Builder addMap(Map insertMap){ + insertModel.insertMap.putAll(insertMap); + return this; + } + + public SqlInfoInsertModel build(){ + ISQLExpression expression = new BuildInsert(); + insertModel.setSqlExpression(expression); + return insertModel; + } + + } + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public Map getInsertMap() { + return insertMap; + } + + public void setInsertMap(Map insertMap) { + this.insertMap = insertMap; + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoJoinModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoJoinModel.java new file mode 100644 index 0000000..9d5a71d --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoJoinModel.java @@ -0,0 +1,84 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.dql; + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.dql.BuildJoin; +import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; + +/** + * @author JX + * @create 2024-07-04 9:14 + * @dedescription: + */ +public class SqlInfoJoinModel extends SqlInfoBaseModel { + + private String tableName; + private JoinType joinType; + private String onStr; + + public static Builder builder(){ + return new Builder(); + } + + public static class Builder{ + private SqlInfoJoinModel joinModel = new SqlInfoJoinModel(); + + //构建having + public Builder joinTable(String tableName,String alias){ + joinModel.setTableName(tableName+" "+alias); + return this; + } + public Builder innerJoin(){ + joinModel.joinType= JoinType.INNER_JOIN; + return this; + } + public Builder leftJoin(){ + joinModel.joinType= JoinType.LEFT_JOIN; + return this; + } + public Builder rightJoin(){ + joinModel.joinType= JoinType.RIGHT_JOIN; + return this; + } + public Builder on(String leftStr,String rightStr){ + joinModel.onStr=leftStr+" = "+rightStr; + return this; + } + public SqlInfoJoinModel build(){ + ISQLExpression expression = new BuildJoin(); + joinModel.setSqlExpression(expression); + return joinModel; + } + } + + public enum JoinType{ + LEFT_JOIN, + RIGHT_JOIN, + INNER_JOIN + } + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public JoinType getJoinType() { + return joinType; + } + + public void setJoinType(JoinType joinType) { + this.joinType = joinType; + } + + public String getOnStr() { + return onStr; + } + + public void setOnStr(String onStr) { + this.onStr = onStr; + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoOrderModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoOrderModel.java new file mode 100644 index 0000000..08996fa --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoOrderModel.java @@ -0,0 +1,86 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.dql; + + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.dql.BuildOrderBy; +import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author JX + * @create 2024-07-04 9:14 + * @dedescription: + */ + +public class SqlInfoOrderModel extends SqlInfoBaseModel { + + private List orderByList=new ArrayList<>(); + + public static Builder builder(){ + return new Builder(); + } + + public static class OrderByModel{ + + public String[] columns;//列 + + public boolean asc;//是否是asc 升序 + + public void setColumns(String ... columns){ + this.columns = columns; + } + + public boolean isAsc() { + return asc; + } + + public void setAsc(boolean asc) { + this.asc = asc; + } + + public String[] getColumns() { + return columns; + } + } + + + public static class Builder{ + private SqlInfoOrderModel infoOrderModel = new SqlInfoOrderModel(); + + //升序 + public Builder setOrderByAsc(String ... columns){ + OrderByModel model=new OrderByModel(); + model.setAsc(true); + model.setColumns(columns); + infoOrderModel.orderByList.add(model); + return this; + } + + //降序 + public Builder setOrderByDesc(String ... columns ){ + OrderByModel model=new OrderByModel(); + model.setAsc(false); + model.setColumns(columns); + infoOrderModel.orderByList.add(model); + return this; + } + + public SqlInfoOrderModel build(){ + ISQLExpression expression = new BuildOrderBy(); + infoOrderModel.setSqlExpression(expression); + return infoOrderModel; + } + } + + public List getOrderByList() { + return orderByList; + } + + public void setOrderByList(List orderByList) { + this.orderByList = orderByList; + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoPublicModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoPublicModel.java new file mode 100644 index 0000000..91858aa --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoPublicModel.java @@ -0,0 +1,41 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.dql; + + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.dql.BuildPublicSql; +import com.jeelowcode.framework.plus.build.build.dql.BuildSelect; +import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; + +/** + * 通用sql + */ +public class SqlInfoPublicModel extends SqlInfoBaseModel { + + private String sql; + + public static Builder builder(){ + return new Builder(); + } + + + public static class Builder { + private SqlInfoPublicModel selectModel = new SqlInfoPublicModel(); + + public Builder setSql(String sql) { + selectModel.sql = sql; + return this; + } + + public SqlInfoPublicModel build() { + ISQLExpression expression = new BuildPublicSql(); + selectModel.setSqlExpression(expression); + return selectModel; + } + } + + public String getSql() { + return sql; + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoSelectModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoSelectModel.java new file mode 100644 index 0000000..fd8e768 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoSelectModel.java @@ -0,0 +1,66 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.dql; + + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.dql.BuildSelect; +import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; + +/** + * @author JX + * @create 2024-07-03 11:51 + * @dedescription: + */ +public class SqlInfoSelectModel extends SqlInfoBaseModel { + + private String tableName; + + private String[] columns; + + public static Builder builder(){ + return new Builder(); + } + + + public static class Builder { + private SqlInfoSelectModel selectModel = new SqlInfoSelectModel(); + + public Builder setTableName(String tableName) { + selectModel.tableName = tableName; + return this; + } + public Builder setTableName(String tableName,String alias) { + selectModel.tableName = tableName+" "+alias; + return this; + } + + public Builder setColumns(String ... columns){ + + selectModel.columns = columns; + return this; + } + + public SqlInfoSelectModel build() { + ISQLExpression expression = new BuildSelect(); + selectModel.setSqlExpression(expression); + return selectModel; + } + } + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public String[] getColumns() { + return columns; + } + + public void setColumns(String[] columns) { + this.columns = columns; + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoUpdateModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoUpdateModel.java new file mode 100644 index 0000000..55b7bbd --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoUpdateModel.java @@ -0,0 +1,65 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.dql; + + +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.dql.BuildUpdate; +import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; + +import java.util.LinkedHashMap; +import java.util.Map; + +public class SqlInfoUpdateModel extends SqlInfoBaseModel { + private String tableName; + + private Map updateMap=new LinkedHashMap<>(); + + private SqlInfoUpdateModel(){} + + public static Builder builder(){ + return new Builder(); + } + public static class Builder { + SqlInfoUpdateModel updateModel = new SqlInfoUpdateModel(); + + public Builder setTableName(String tableName) { + updateModel.tableName = tableName; + return this; + } + + public Builder addColumn(String column, Object val){ + updateModel.updateMap.put(column,val); + return this; + } + + public Builder addMap(Map updateMap){ + updateModel.updateMap.putAll(updateMap); + return this; + } + + + public SqlInfoUpdateModel build() { + ISQLExpression expression = new BuildUpdate(); + updateModel.setSqlExpression(expression); + return updateModel; + } + + } + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public Map getUpdateMap() { + return updateMap; + } + + public void setUpdateMap(Map updateMap) { + this.updateMap = updateMap; + } +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoWhereModel.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoWhereModel.java new file mode 100644 index 0000000..089cecd --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/dql/SqlInfoWhereModel.java @@ -0,0 +1,10 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.dql; + +/** + * @author JX + * @create 2024-07-03 10:12 + * @dedescription: + */ +public class SqlInfoWhereModel extends SqlInfoConditionModel { +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/wrapper/BaseWrapper.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/wrapper/BaseWrapper.java new file mode 100644 index 0000000..9350e54 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/wrapper/BaseWrapper.java @@ -0,0 +1,22 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.wrapper; + +import java.util.HashSet; +import java.util.Set; + +/** + * 公共 + */ +public class BaseWrapper { + public String BUILDER_INSERT="builderInsert"; + public String BUILDER_UPDATE="builderUpdate"; + public String BUILDER_DELETE="builderDelete"; + public String BUILDER_SELECT="builderSelect"; + public String BUILDER_WHERE="builderWhere"; + public String BUILDER_ORDERBY="builderOrderBy"; + public String BUILDER_GROUPBY="builderGroupBy"; + public String BUILDER_HAVING="builderHaving"; + public String BUILDER_JOIN="builderJoin"; + + Set initSet=new HashSet<>(); +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/wrapper/SqlInfoDeleteWrapper.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/wrapper/SqlInfoDeleteWrapper.java new file mode 100644 index 0000000..60a0741 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/wrapper/SqlInfoDeleteWrapper.java @@ -0,0 +1,81 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.wrapper; + +import com.jeelowcode.framework.plus.SqlHelper; +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.AndExpression; +import com.jeelowcode.framework.plus.build.build.dql.BuildDelete; +import com.jeelowcode.framework.plus.build.build.dql.BuildWhere; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoDeleteModel; +import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoWhereModel; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + +/** + * 删除-封装器 + */ +public class SqlInfoDeleteWrapper { + + public static Wrapper wrapper(String dbSchemaName){ + return new Wrapper(dbSchemaName); + } + + public static class Wrapper extends BaseWrapper { + + private String dbSchemaName; + private SqlInfoDeleteModel.Builder builderDelete = SqlInfoDeleteModel.builder(); + private SqlInfoWhereModel.Builder builderWhere = SqlInfoWhereModel.builder(); + + public Wrapper(String dbSchemaName) { + this.dbSchemaName = dbSchemaName; + } + + //逻辑删除 + public Wrapper setTableName(String tableName) { + builderDelete.setTableName(tableName); + initSet.add(BUILDER_DELETE); + return this; + } + //true=真实删除,物理删除 false=逻辑删除 + public Wrapper setTableName(String tableName, boolean isReal) { + builderDelete.setTableName(tableName,isReal); + initSet.add(BUILDER_DELETE); + return this; + } + + public Wrapper setWhere(Consumer whereBuilderConsumer) { + whereBuilderConsumer.accept(builderWhere); + initSet.add(BUILDER_WHERE); + return this; + } + public Wrapper build() { + return this; + } + + public SqlFormatModel buildSql() { + SQLInterpretContext context = new SQLInterpretContext(dbSchemaName); + SqlInfoDeleteModel buildDelete = builderDelete.build(); + SqlInfoWhereModel buildWhere = builderWhere.buildWhere(); + + List expressionList=new ArrayList<>(); + if(initSet.contains(BUILDER_DELETE)){ + context.setDeleteModel(buildDelete); + expressionList.add(new BuildDelete()); + } + if(initSet.contains(BUILDER_WHERE)){ + context.setWhereModel(buildWhere); + expressionList.add(new BuildWhere()); + } + + ISQLExpression expression = new AndExpression(expressionList); + List sqlFormatModelList = SqlHelper.sqlExpression(context, expression); + return sqlFormatModelList.get(0); + } + } + + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/wrapper/SqlInfoInsertWrapper.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/wrapper/SqlInfoInsertWrapper.java new file mode 100644 index 0000000..519c8e7 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/wrapper/SqlInfoInsertWrapper.java @@ -0,0 +1,68 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.wrapper; + +import com.jeelowcode.framework.plus.SqlHelper; +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.AndExpression; +import com.jeelowcode.framework.plus.build.build.dql.BuildInsert; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoInsertModel; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; + +import java.util.*; + +/** + * 新增-封装器 + */ +public class SqlInfoInsertWrapper { + + public static Wrapper wrapper(String dbSchemaName){ + return new Wrapper(dbSchemaName); + } + public static class Wrapper extends BaseWrapper { + + private String dbSchemaName; + private SqlInfoInsertModel.Builder builderInsert= SqlInfoInsertModel.builder(); + + public Wrapper(String dbSchemaName) { + this.dbSchemaName = dbSchemaName; + } + + public Wrapper setTableName(String tableName){ + builderInsert.setTableName(tableName); + return this; + } + public Wrapper setColumn(String column, Object val){ + builderInsert.addColumn(column,val); + initSet.add(BUILDER_INSERT); + return this; + } + + public Wrapper setMap(Map insertMap){ + builderInsert.addMap(insertMap); + initSet.add(BUILDER_INSERT); + return this; + } + public Wrapper build() { + return this; + } + + + public SqlFormatModel buildSql() { + SQLInterpretContext context = new SQLInterpretContext(dbSchemaName); + SqlInfoInsertModel buildInsert = builderInsert.build(); + + List expressionList=new ArrayList<>(); + if(initSet.contains(BUILDER_INSERT)){ + context.setInsertModel(buildInsert); + expressionList.add(new BuildInsert()); + } + + ISQLExpression expression = new AndExpression(expressionList); + List sqlFormatModelList = SqlHelper.sqlExpression(context, expression); + return sqlFormatModelList.get(0); + } + } + + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/wrapper/SqlInfoQueryWrapper.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/wrapper/SqlInfoQueryWrapper.java new file mode 100644 index 0000000..cf05ae4 --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/wrapper/SqlInfoQueryWrapper.java @@ -0,0 +1,220 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.wrapper; + +import com.jeelowcode.framework.plus.SqlHelper; +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.AndExpression; +import com.jeelowcode.framework.plus.build.build.dql.*; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.dql.*; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import com.jeelowcode.framework.utils.constant.JeeLowCodeConstant; +import com.jeelowcode.framework.utils.utils.FuncBase; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + +/** + * 查询-封装器 + */ +public class SqlInfoQueryWrapper { + + + public static Wrapper wrapper(String dbSchemaName) { + return new Wrapper(dbSchemaName); + } + + public static class Wrapper extends BaseWrapper { + + private String dataSourceType;//指定数据源 + + private Boolean tenantIgnore;//本次是否忽略租户 + + private String dbSchemaName; + private SqlInfoSelectModel.Builder builderSelect = SqlInfoSelectModel.builder(); + private SqlInfoWhereModel.Builder builderWhere = SqlInfoWhereModel.builder(); + private SqlInfoOrderModel.Builder builderOrderBy = SqlInfoOrderModel.builder(); + private SqlInfoGroupModel.Builder builderGroupBy = SqlInfoGroupModel.builder(); + private SqlInfoHavingModel.Builder builderHaving = SqlInfoHavingModel.builder(); + private SqlInfoJoinModel.Builder builderJoin = SqlInfoJoinModel.builder(); + + public Wrapper(String dbSchemaName) { + this.dbSchemaName = dbSchemaName; + } + + public Wrapper setTenantIgnore(Boolean tenantIgnore) { + this.tenantIgnore=tenantIgnore;//本次是否忽略租户 + return this; + } + + public Wrapper setDataSourceType(String dataSourceType) { + this.dataSourceType=dataSourceType;//外部数据源 + return this; + } + + public String getDataSourceType() { + return this.dataSourceType; + } + + //select 相关 + public Wrapper select(String... columns) { + if (FuncBase.isNotEmpty(columns)) { + builderSelect.setColumns(columns); + initSet.add(BUILDER_SELECT); + } + return this; + } + + public Wrapper select(List columnsList, boolean aliasFlag) { + if (FuncBase.isNotEmpty(columnsList)) { + //处理别名 + if (aliasFlag) { + columnsList = FuncBase.fieldCodeAlias(columnsList); + } + + builderSelect.setColumns(columnsList.toArray(new String[0])); + initSet.add(BUILDER_SELECT); + } + return this; + } + + public Wrapper setTableName(String tableName) { + //处理别名 + builderSelect.setTableName(tableName, JeeLowCodeConstant.TABLE_ALIAS); + initSet.add(BUILDER_SELECT); + return this; + } + + public Wrapper setTableSql(String tableNameSql) { + //处理别名 + String sql = String.format("(%s)", tableNameSql); + builderSelect.setTableName(sql, JeeLowCodeConstant.TABLE_ALIAS); + initSet.add(BUILDER_SELECT); + return this; + } + + //where 相关 + public Wrapper setWhere(Consumer whereBuilderConsumer) { + whereBuilderConsumer.accept(builderWhere); + initSet.add(BUILDER_WHERE); + return this; + } + + //order by相关 + public Wrapper orderByAsc(String... columns) { + builderOrderBy.setOrderByAsc(columns); + initSet.add(BUILDER_ORDERBY); + return this; + } + + public Wrapper orderByDesc(String... columns) { + builderOrderBy.setOrderByDesc(columns); + initSet.add(BUILDER_ORDERBY); + return this; + } + + //group by 相关 + public Wrapper groupByColumns(String... columns) { + builderGroupBy.setColumns(columns); + initSet.add(BUILDER_GROUPBY); + return this; + } + + //join 相关 + public Wrapper joinByinnerJoinTable(String tableName, String alias) { + builderJoin.joinTable(tableName, alias); + builderJoin.innerJoin(); + initSet.add(BUILDER_JOIN); + return this; + } + + public Wrapper joinByleftJoinTable(String tableName, String alias) { + builderJoin.joinTable(tableName, alias); + builderJoin.leftJoin(); + initSet.add(BUILDER_JOIN); + return this; + } + + public Wrapper joinByrightJoinTable(String tableName, String alias) { + builderJoin.joinTable(tableName, alias); + builderJoin.rightJoin(); + initSet.add(BUILDER_JOIN); + return this; + } + + public Wrapper joinOn(String leftStr, String rightStr) { + builderJoin.on(leftStr, rightStr); + initSet.add(BUILDER_JOIN); + return this; + } + + //构建having + public Wrapper setHaving(Consumer havingBuilderConsumer) { + havingBuilderConsumer.accept(builderHaving); + initSet.add(BUILDER_HAVING); + return this; + } + + public Wrapper build() { + return this; + } + + public SqlFormatModel buildSql() { + SQLInterpretContext context = new SQLInterpretContext(dbSchemaName); + SqlInfoSelectModel buildSelect = builderSelect.build(); + SqlInfoWhereModel buildWhere = builderWhere.buildWhere(); + SqlInfoOrderModel buildOrderBy = builderOrderBy.build(); + SqlInfoGroupModel buildGroupBy = builderGroupBy.build(); + SqlInfoJoinModel buildJoin = builderJoin.build(); + SqlInfoHavingModel buildHaving = builderHaving.buildHaving(); + + //本次是否忽略租户 + if(FuncBase.isNotEmpty(tenantIgnore)){ + context.setTenantIgnore(tenantIgnore); + } + + List expressionList = new ArrayList<>(); + if (initSet.contains(BUILDER_SELECT)) { + context.setSelectModel(buildSelect); + expressionList.add(new BuildSelect()); + } + if (initSet.contains(BUILDER_WHERE)) { + context.setWhereModel(buildWhere); + expressionList.add(new BuildWhere()); + } + if (initSet.contains(BUILDER_ORDERBY)) { + context.setOrderModel(buildOrderBy); + expressionList.add(new BuildOrderBy()); + } + if (initSet.contains(BUILDER_GROUPBY)) { + context.setGroupModel(buildGroupBy); + expressionList.add(new BuildGroupBy()); + } + if (initSet.contains(BUILDER_JOIN)) { + context.setJoinModel(buildJoin); + expressionList.add(new BuildJoin()); + } + if (initSet.contains(BUILDER_HAVING)) { + context.setHavingModel(buildHaving); + expressionList.add(new BuildHaving()); + } + + if(FuncBase.isEmpty(expressionList)){ + return new SqlFormatModel(); + } + List sqlFormatModelList = null; + + ISQLExpression expression = new AndExpression(expressionList); + if (initSet.contains(BUILDER_SELECT)) { + sqlFormatModelList = SqlHelper.sqlExpression(context, expression); + } else { + sqlFormatModelList = SqlHelper.parserExpression(context, expression); + } + + return sqlFormatModelList.get(0); + } + } + + +} diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/wrapper/SqlInfoUpdateWrapper.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/wrapper/SqlInfoUpdateWrapper.java new file mode 100644 index 0000000..fa37c6d --- /dev/null +++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/build/buildmodel/wrapper/SqlInfoUpdateWrapper.java @@ -0,0 +1,84 @@ + +package com.jeelowcode.framework.plus.build.buildmodel.wrapper; + +import com.jeelowcode.framework.plus.SqlHelper; +import com.jeelowcode.framework.plus.build.ISQLExpression; +import com.jeelowcode.framework.plus.build.build.AndExpression; +import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext; +import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoUpdateModel; +import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoWhereModel; +import com.jeelowcode.framework.plus.core.model.SqlFormatModel; +import com.jeelowcode.framework.plus.build.build.dql.BuildUpdate; +import com.jeelowcode.framework.plus.build.build.dql.BuildWhere; + +import java.util.*; +import java.util.function.Consumer; + +/** + * 更新-封装器 + */ +public class SqlInfoUpdateWrapper { + + public static Wrapper wrapper(String dbSchemaName){ + return new Wrapper(dbSchemaName); + } + public static class Wrapper extends BaseWrapper { + + private String dbSchemaName; + private SqlInfoUpdateModel.Builder builderUpdate=SqlInfoUpdateModel.builder();; + private SqlInfoWhereModel.Builder builderWhere = SqlInfoWhereModel.builder(); + + public Wrapper(String dbSchemaName) { + this.dbSchemaName = dbSchemaName; + } + + //update 相关 + public Wrapper setTableName(String tableName) { + builderUpdate.setTableName(tableName); + initSet.add(BUILDER_UPDATE); + return this; + } + + public Wrapper setColumn(String column, Object val){ + builderUpdate.addColumn(column,val); + initSet.add(BUILDER_UPDATE); + return this; + } + + public Wrapper setMap(Map updateMap){ + builderUpdate.addMap(updateMap); + initSet.add(BUILDER_UPDATE); + return this; + } + + public Wrapper setWhere(Consumer whereBuilderConsumer) { + whereBuilderConsumer.accept(builderWhere); + initSet.add(BUILDER_WHERE); + return this; + } + public Wrapper build() { + return this; + } + + public SqlFormatModel buildSql() { + SQLInterpretContext context = new SQLInterpretContext(dbSchemaName); + SqlInfoUpdateModel buildUpdate = builderUpdate.build(); + SqlInfoWhereModel buildWhere = builderWhere.buildWhere(); + + List expressionList=new ArrayList<>(); + if(initSet.contains(BUILDER_UPDATE)){ + context.setUpdateModel(buildUpdate); + expressionList.add(new BuildUpdate()); + } + if(initSet.contains(BUILDER_WHERE)){ + context.setWhereModel(buildWhere); + expressionList.add(new BuildWhere()); + } + ISQLExpression expression = new AndExpression(expressionList); + List sqlFormatModelList = SqlHelper.sqlExpression(context, expression); + return sqlFormatModelList.get(0); + } + } + + +}