增加不受控文件
This commit is contained in:
@@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
package com.jeelowcode.framework.plus.build;
|
||||||
|
|
||||||
|
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
|
||||||
|
import net.sf.jsqlparser.JSQLParserException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param <T> 返回值
|
||||||
|
*/
|
||||||
|
public interface ISQLExpression<T> {
|
||||||
|
|
||||||
|
|
||||||
|
//解析器
|
||||||
|
T interpret(SQLInterpretContext contextT) throws JSQLParserException;
|
||||||
|
}
|
||||||
@@ -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<List<SqlFormatModel>> {
|
||||||
|
|
||||||
|
private ISQLExpression[] expressions;
|
||||||
|
|
||||||
|
public AndExpression(ISQLExpression... expressions) {
|
||||||
|
this.expressions = expressions;
|
||||||
|
}
|
||||||
|
public AndExpression(List<ISQLExpression> 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<SqlFormatModel> interpret(SQLInterpretContext context) throws JSQLParserException {
|
||||||
|
List<SqlFormatModel> sqlFormatModelList = this.getDDL(context);
|
||||||
|
if (FuncBase.isNotEmpty(sqlFormatModelList)) {
|
||||||
|
return sqlFormatModelList;
|
||||||
|
}
|
||||||
|
SqlFormatModel sqlFormatModel = this.getDQL(context);
|
||||||
|
return Collections.singletonList(sqlFormatModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取ddl
|
||||||
|
private List<SqlFormatModel> getDDL(SQLInterpretContext context) throws JSQLParserException {
|
||||||
|
|
||||||
|
List<ISQLExpression> 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<SqlFormatModel> resultModelList=new ArrayList<>();
|
||||||
|
for (ISQLExpression<SqlFormatModel> 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<SqlFormatModel>)obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return resultModelList;
|
||||||
|
}
|
||||||
|
|
||||||
|
private SqlFormatModel getDQL(SQLInterpretContext context) throws JSQLParserException {
|
||||||
|
List<ISQLExpression> expressionList = this.getDQLExpression();
|
||||||
|
if (FuncBase.isEmpty(expressionList)) {
|
||||||
|
throw new JeeLowCodeException("表达式为空");
|
||||||
|
}
|
||||||
|
String sql = "";
|
||||||
|
Map<String, Object> dataMap = new LinkedHashMap<>();
|
||||||
|
int step = 0;
|
||||||
|
for (ISQLExpression expression : expressionList) {//buildselect buildwhere buidlorderby
|
||||||
|
SqlFormatModel sqlFormatModel = (SqlFormatModel) expression.interpret(context);
|
||||||
|
String tmpSql = sqlFormatModel.getSql();
|
||||||
|
Map<String, Object> tmpMap = sqlFormatModel.getDataMap();
|
||||||
|
if (FuncBase.isEmpty(tmpMap)) {
|
||||||
|
sql += " " + tmpSql;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 首先,将entrySet中的元素复制到一个列表中
|
||||||
|
List<Map.Entry<String, Object>> entrieList = new ArrayList<>(tmpMap.entrySet());
|
||||||
|
Collections.reverse(entrieList);
|
||||||
|
|
||||||
|
for (Map.Entry<String, Object> 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<ISQLExpression> getDQLExpression() {
|
||||||
|
|
||||||
|
List<ISQLExpression> 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<ISQLExpression> sortList = new ArrayList<>();
|
||||||
|
|
||||||
|
//下面是dql,需要安装sql标准查询的格式来凭接
|
||||||
|
ISQLExpression tmpSelect = null;
|
||||||
|
List<ISQLExpression> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<String,Object> 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<String,Object> 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<SqlFormatModel> 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<SqlFormatModel> 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<SqlFormatModel> sqlFormatModelList = build.interpret(context);
|
||||||
|
System.out.println(FuncBase.json2Str(sqlFormatModelList));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testBuildCreate() throws JSQLParserException {
|
||||||
|
|
||||||
|
List<FieldModel> 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<SqlFormatModel> 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<SqlFormatModel> sqlFormatModelList = build.interpret(context);
|
||||||
|
System.out.println(FuncBase.json2Str(sqlFormatModelList));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testBuildAndUpdateExpression() throws JSQLParserException {
|
||||||
|
|
||||||
|
//构建update语句
|
||||||
|
Map<String,Object> 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<SqlFormatModel> 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<SqlInfoWhereModel> contextWhereOr = new SQLInterpretContext<>(whereOrModel);
|
||||||
|
BuildWhere buildWhereOr=new BuildWhere(contextWhereOr);*//*
|
||||||
|
|
||||||
|
*//* SqlInfoWhereModel whereOrModel2 = SqlInfoWhereModel.builder()
|
||||||
|
.le("age", 182)
|
||||||
|
.notLike("name", "张三2")
|
||||||
|
.or(buildWhereOr)
|
||||||
|
.build();
|
||||||
|
SQLInterpretContext<SqlInfoWhereModel> contextWhereOr2 = new SQLInterpretContext<>(whereOrModel2);
|
||||||
|
BuildWhere buildWhereOr2=new BuildWhere(contextWhereOr2);*//*
|
||||||
|
|
||||||
|
|
||||||
|
SqlInfoWhereModel whereAndModel = SqlInfoWhereModel.builder()// 18<x<65
|
||||||
|
.ge("age", 18)
|
||||||
|
.le("age",65)
|
||||||
|
.buildWhere();
|
||||||
|
SQLInterpretContext contextWhereAnd = new SQLInterpretContext();
|
||||||
|
contextWhereAnd.setWhereModel(whereAndModel);
|
||||||
|
BuildWhere buildWhereAnd=new BuildWhere();
|
||||||
|
buildWhereAnd.setContext(contextWhereAnd);
|
||||||
|
|
||||||
|
SqlInfoWhereModel whereModel = SqlInfoWhereModel.builder()
|
||||||
|
.gt("id", 12)
|
||||||
|
//.or(buildWhereOr)
|
||||||
|
//.or(buildWhereOr2)
|
||||||
|
.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);
|
||||||
|
|
||||||
|
|
||||||
|
//update语句+where语句
|
||||||
|
AndExpression expression=new AndExpression(buildWhere,buildSelect,buildOrderBy,buildGroupBy);
|
||||||
|
List<SqlFormatModel> 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<SqlFormatModel> 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<SqlFormatModel> 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<SqlFormatModel> 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<SqlFormatModel> 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<SqlFormatModel> sqlFormatModelList = expression.interpret(context);
|
||||||
|
System.out.println(FuncBase.json2Str(sqlFormatModelList));
|
||||||
|
}*/
|
||||||
|
}
|
||||||
@@ -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<List<SqlFormatModel>> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<SqlFormatModel> interpret(SQLInterpretContext context) throws JSQLParserException {
|
||||||
|
DbColunmTypesEntity dbColunmTypes = context.getDbColunmTypes();
|
||||||
|
SqlInfoAlterModel alterModel = context.getAlterModel();
|
||||||
|
|
||||||
|
if(FuncBase.isEmpty(alterModel)){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
//存在自定义ddl
|
||||||
|
List<String> 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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<List<SqlFormatModel>> {
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<SqlFormatModel> interpret(SQLInterpretContext context) throws JSQLParserException {
|
||||||
|
SqlInfoCommentModel commentModel = context.getCommentModel();
|
||||||
|
if (FuncBase.isEmpty(commentModel)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
//存在自定义ddl
|
||||||
|
List<String> 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<FieldModel> fieldModelList = commentModel.getFieldModelList();
|
||||||
|
|
||||||
|
List<String> ddlList = new ArrayList<>();
|
||||||
|
String tableDdl = this.tableComment(schemaName, tableName, tableAlias);
|
||||||
|
if (FuncBase.isNotEmpty(tableDdl)) {
|
||||||
|
ddlList.add(tableDdl);
|
||||||
|
}
|
||||||
|
List<String> 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<String> columnComment(DbColunmTypesEntity dbColunmTypes, String schemaName, String tableName, List<FieldModel> fieldModelList) {
|
||||||
|
|
||||||
|
if (FuncBase.isEmpty(fieldModelList)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String symbol = dbColunmTypes.getSymbol();
|
||||||
|
Boolean upperFlag = dbColunmTypes.getUpperFlag();
|
||||||
|
|
||||||
|
List<String> 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<List<SqlFormatModel>> {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<SqlFormatModel> interpret(SQLInterpretContext context) throws JSQLParserException {
|
||||||
|
SqlInfoCreateIndexModel model = context.getCreateIndexModel();
|
||||||
|
DbColunmTypesEntity dbColunmTypes = context.getDbColunmTypes();
|
||||||
|
if(FuncBase.isEmpty(model)){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
//存在自定义ddl
|
||||||
|
List<String> 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<String> indexFieldCodeList = model.getIndexFieldCodeList();
|
||||||
|
|
||||||
|
List<String> 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);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<List<SqlFormatModel>> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<SqlFormatModel> interpret(SQLInterpretContext context) throws JSQLParserException {
|
||||||
|
DbColunmTypesEntity dbColunmTypes = context.getDbColunmTypes();
|
||||||
|
SqlInfoCreateModel creteModel = context.getCreateModel();
|
||||||
|
if(FuncBase.isEmpty(creteModel)){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
//存在自定义ddl
|
||||||
|
List<String> executeDdlList = creteModel.getExecuteDdlList();
|
||||||
|
if(FuncBase.isNotEmpty(executeDdlList)){
|
||||||
|
return PlusUtils.ddl2SqlFormatModel(executeDdlList);
|
||||||
|
}
|
||||||
|
|
||||||
|
String tableName = creteModel.getTableName();
|
||||||
|
String schemaName = context.getSchemaName();
|
||||||
|
List<FieldModel> 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<FieldModel> 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<List<SqlFormatModel>> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<SqlFormatModel> interpret(SQLInterpretContext context) throws JSQLParserException {
|
||||||
|
SqlInfoDdlModel ddlModel = context.getDdlModel();
|
||||||
|
if (FuncBase.isEmpty(ddlModel)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
//存在自定义ddl
|
||||||
|
List<String> executeDdlList = ddlModel.getExecuteDdlList();
|
||||||
|
if (FuncBase.isEmpty(executeDdlList)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return PlusUtils.ddl2SqlFormatModel(executeDdlList);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<List<SqlFormatModel>> {
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<SqlFormatModel> interpret(SQLInterpretContext context) throws JSQLParserException {
|
||||||
|
SqlInfoDropModel dropModel = context.getDropModel();
|
||||||
|
if (FuncBase.isEmpty(dropModel)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
//存在自定义ddl
|
||||||
|
List<String> 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<List<SqlFormatModel>> {
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<SqlFormatModel> interpret(SQLInterpretContext context) throws JSQLParserException {
|
||||||
|
SqlInfoPrimaryKeyModel primaryKeyModel = context.getPrimaryKeyModel();
|
||||||
|
|
||||||
|
if (FuncBase.isEmpty(primaryKeyModel)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
//存在自定义ddl
|
||||||
|
List<String> 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<String> tmpkeyList = primaryKeyModel.getKeyList();
|
||||||
|
if(FuncBase.isEmpty(tmpkeyList)){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> 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);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<Object> wrapper = new JeeLowCodeQueryWrapper();
|
||||||
|
|
||||||
|
public SQLInterpretContext context;
|
||||||
|
|
||||||
|
|
||||||
|
public SqlFormatModel context2Condition(SqlInfoConditionModel conditionModel){
|
||||||
|
List<ExpressionModel> 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<SqlInfoConditionModel.Builder>) value[0]);
|
||||||
|
break;
|
||||||
|
case AND_BUILD:
|
||||||
|
andBuild((Consumer<SqlInfoConditionModel.Builder>) value[0]);
|
||||||
|
break;
|
||||||
|
case APPLY:
|
||||||
|
apply(column);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
String sqlStr = "";
|
||||||
|
|
||||||
|
if(conditionModel instanceof SqlInfoHavingModel){
|
||||||
|
sqlStr=wrapper.getHavingCustomSqlSegment();
|
||||||
|
}else{
|
||||||
|
sqlStr=wrapper.getCustomSqlSegment();
|
||||||
|
}
|
||||||
|
Map<String, Object> 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<Object> 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<Object> 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<SqlInfoConditionModel.Builder> condition) {
|
||||||
|
try{
|
||||||
|
SqlInfoConditionModel.Builder builder = new SqlInfoConditionModel.Builder();
|
||||||
|
condition.accept(builder);
|
||||||
|
SqlInfoConditionModel<BuildCondition> build = builder.build();
|
||||||
|
BuildCondition buildCondition = new BuildCondition();
|
||||||
|
SqlFormatModel sqlFormatModel = buildCondition.context2Condition(build);
|
||||||
|
|
||||||
|
String tmpSql = sqlFormatModel.getSql();
|
||||||
|
tmpSql=tmpSql.substring(6);
|
||||||
|
Map<String, Object> tmpMap = sqlFormatModel.getDataMap();
|
||||||
|
if (FuncBase.isEmpty(tmpMap)) {//没有参数的情况下
|
||||||
|
String newSql=String.format("( 1!=1 OR %s) ",tmpSql);
|
||||||
|
wrapper.apply(newSql);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//存在参数的情况下
|
||||||
|
List<Map.Entry<String, Object>> entrieList = new ArrayList<>(tmpMap.entrySet());
|
||||||
|
Collections.reverse(entrieList);
|
||||||
|
|
||||||
|
int step=0;
|
||||||
|
Object[] objects=new Object[entrieList.size()];
|
||||||
|
|
||||||
|
// 然后,从列表的末尾开始遍历
|
||||||
|
for (Map.Entry<String, Object> 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<SqlInfoConditionModel.Builder> condition) {
|
||||||
|
try{
|
||||||
|
|
||||||
|
SqlInfoConditionModel.Builder builder = new SqlInfoConditionModel.Builder();
|
||||||
|
condition.accept(builder);
|
||||||
|
SqlInfoConditionModel<BuildCondition> build = builder.build();
|
||||||
|
BuildCondition buildCondition = new BuildCondition();
|
||||||
|
SqlFormatModel sqlFormatModel = buildCondition.context2Condition(build);
|
||||||
|
|
||||||
|
String tmpSql = sqlFormatModel.getSql();
|
||||||
|
tmpSql=tmpSql.substring(6);
|
||||||
|
Map<String, Object> tmpMap = sqlFormatModel.getDataMap();
|
||||||
|
if (FuncBase.isEmpty(tmpMap)) {//没有参数的情况下
|
||||||
|
String newSql=String.format("(%s) ",tmpSql);
|
||||||
|
wrapper.apply(newSql);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//存在参数的情况下
|
||||||
|
List<Map.Entry<String, Object>> entrieList = new ArrayList<>(tmpMap.entrySet());
|
||||||
|
Collections.reverse(entrieList);
|
||||||
|
|
||||||
|
int step=0;
|
||||||
|
Object[] objects=new Object[entrieList.size()];
|
||||||
|
|
||||||
|
// 然后,从列表的末尾开始遍历
|
||||||
|
for (Map.Entry<String, Object> 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<Object> getWrapper() {
|
||||||
|
return wrapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWrapper(JeeLowCodeQueryWrapper<Object> wrapper) {
|
||||||
|
this.wrapper = wrapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SQLInterpretContext getContext() {
|
||||||
|
return this.context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContext(SQLInterpretContext context) {
|
||||||
|
this.context = context;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<SqlFormatModel> {
|
||||||
|
|
||||||
|
|
||||||
|
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<String,Object> paramNameValuePairs = updateWrapper.getParamNameValuePairs();
|
||||||
|
|
||||||
|
//处理null值
|
||||||
|
for (Map.Entry<String,Object> 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;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<SqlFormatModel> {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<SqlFormatModel> {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SqlFormatModel interpret(SQLInterpretContext context) throws JSQLParserException {
|
||||||
|
|
||||||
|
SqlInfoHavingModel havingModel = context.getHavingModel();
|
||||||
|
SqlFormatModel sqlFormatModel = super.context2Condition(havingModel);
|
||||||
|
return sqlFormatModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<SqlFormatModel> {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SqlFormatModel interpret(SQLInterpretContext context){
|
||||||
|
SqlInfoInsertModel sqlInfo = context.getInsertModel();
|
||||||
|
String tableName = sqlInfo.getTableName();
|
||||||
|
|
||||||
|
Map<String, Object> insertMap = sqlInfo.getInsertMap();
|
||||||
|
|
||||||
|
JeeLowCodeInsertWrapper insertWrapper = new JeeLowCodeInsertWrapper<>();
|
||||||
|
for (Map.Entry<String, Object> entry : insertMap.entrySet()) {
|
||||||
|
insertWrapper.set(entry.getKey(),entry.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//封装
|
||||||
|
String sqlSet = insertWrapper.getSqlSet();
|
||||||
|
String customSqlSegment = insertWrapper.getCustomSqlSegment();
|
||||||
|
Map<String, Object> paramNameValuePairs = insertWrapper.getParamNameValuePairs();
|
||||||
|
for (Map.Entry<String,Object> entry : paramNameValuePairs.entrySet()) {
|
||||||
|
Object value = entry.getValue();
|
||||||
|
if(FuncBase.isEmpty(value)){
|
||||||
|
entry.setValue(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> fieldList=new ArrayList<>();
|
||||||
|
List<String> valueList=new ArrayList<>();
|
||||||
|
List<String> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<SqlFormatModel> {
|
||||||
|
|
||||||
|
|
||||||
|
@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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<SqlFormatModel> {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SqlFormatModel interpret(SQLInterpretContext context) throws JSQLParserException {
|
||||||
|
JeeLowCodeQueryWrapper wrapper=new JeeLowCodeQueryWrapper();
|
||||||
|
|
||||||
|
SqlInfoOrderModel sqlInfoOrderModel = context.getOrderModel();
|
||||||
|
List<SqlInfoOrderModel.OrderByModel> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<SqlFormatModel> {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SqlFormatModel interpret(SQLInterpretContext context) throws JSQLParserException {
|
||||||
|
SqlInfoPublicModel sqlInfo = context.getPublicModel();
|
||||||
|
String sql = sqlInfo.getSql();//获取原有的sql
|
||||||
|
return new SqlFormatModel(sql);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<SqlFormatModel> {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<SqlFormatModel> {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SqlFormatModel interpret(SQLInterpretContext context){
|
||||||
|
SqlInfoUpdateModel sqlInfo = context.getUpdateModel();
|
||||||
|
String tableName = sqlInfo.getTableName();
|
||||||
|
JeeLowCodeUpdateWrapper updateWrapper = new JeeLowCodeUpdateWrapper(tableName);
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, Object> updateMap = sqlInfo.getUpdateMap();
|
||||||
|
updateMap.forEach((k,v)->{
|
||||||
|
updateWrapper.set(k,v);
|
||||||
|
});
|
||||||
|
|
||||||
|
String sqlSet = updateWrapper.getSqlSet();
|
||||||
|
Map<String,Object> paramNameValuePairs = updateWrapper.getParamNameValuePairs();
|
||||||
|
|
||||||
|
String newSqlSet="";
|
||||||
|
|
||||||
|
|
||||||
|
List<String> 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<String,Object> 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<SqlFormatModel> {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<T> 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<List<SqlFormatModel>> alterExpression = new BuildAlter();
|
||||||
|
|
||||||
|
public Builder setTableName(String tableName){
|
||||||
|
alterModel.tableName = tableName;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
//增加字段
|
||||||
|
public SqlInfoAlterModel<BuildAlter> buildAddColumn(FieldModel fieldModel){
|
||||||
|
alterModel.alterType = AlterType.ADD_COLUMN;
|
||||||
|
alterModel.fieldModel =fieldModel;
|
||||||
|
alterModel.setSqlExpression(alterExpression);
|
||||||
|
return alterModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
//更新字段
|
||||||
|
public SqlInfoAlterModel<BuildAlter> 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<String> executeDdlList;
|
||||||
|
|
||||||
|
public List<String> getExecuteDdlList() {
|
||||||
|
return executeDdlList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExecuteDdlList(List<String> executeDdlList) {
|
||||||
|
this.executeDdlList = executeDdlList;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<T> extends SqlInfoBaseDdlModel {
|
||||||
|
|
||||||
|
String tableName;
|
||||||
|
String tableAlias;
|
||||||
|
List<FieldModel> fieldModelList;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private SqlInfoCommentModel(){}
|
||||||
|
|
||||||
|
//构建表备注
|
||||||
|
public static Builder builder(){
|
||||||
|
return new Builder();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Builder{
|
||||||
|
|
||||||
|
private SqlInfoCommentModel model = new SqlInfoCommentModel();
|
||||||
|
ISQLExpression<List<SqlFormatModel>> 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<FieldModel> fieldModelList){
|
||||||
|
model.fieldModelList = fieldModelList;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
//增加字段
|
||||||
|
public SqlInfoCommentModel<BuildComment> build(){
|
||||||
|
model.setSqlExpression(commentExpression);
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTableName() {
|
||||||
|
return tableName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTableAlias() {
|
||||||
|
return tableAlias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<FieldModel> getFieldModelList() {
|
||||||
|
return fieldModelList;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<T> extends SqlInfoBaseDdlModel {
|
||||||
|
|
||||||
|
String tableName;//表
|
||||||
|
//index
|
||||||
|
private String indexName;//索引名称
|
||||||
|
|
||||||
|
private String indexType;//索引类型
|
||||||
|
|
||||||
|
private List<String> indexFieldCodeList;//索引值
|
||||||
|
|
||||||
|
|
||||||
|
public static Builder builder(){
|
||||||
|
return new Builder();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Builder{
|
||||||
|
private SqlInfoCreateIndexModel sqlInfoCreateModel = new SqlInfoCreateIndexModel();
|
||||||
|
ISQLExpression<List<SqlFormatModel>> 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<String> indexFieldCodeList) {
|
||||||
|
sqlInfoCreateModel.indexFieldCodeList = indexFieldCodeList;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setIndexType(String indexType) {
|
||||||
|
sqlInfoCreateModel.indexType = indexType;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SqlInfoCreateIndexModel<BuildCreateIndex> build() {
|
||||||
|
ISQLExpression<List<SqlFormatModel>> 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<String> getIndexFieldCodeList() {
|
||||||
|
return indexFieldCodeList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIndexFieldCodeList(List<String> indexFieldCodeList) {
|
||||||
|
this.indexFieldCodeList = indexFieldCodeList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIndexType() {
|
||||||
|
return indexType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIndexType(String indexType) {
|
||||||
|
this.indexType = indexType;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<T> extends SqlInfoBaseDdlModel {
|
||||||
|
|
||||||
|
String tableName;//表
|
||||||
|
List<FieldModel> tableOptions;
|
||||||
|
|
||||||
|
public static Builder builder(){
|
||||||
|
return new Builder();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Builder{
|
||||||
|
private SqlInfoCreateModel sqlInfoCreateModel = new SqlInfoCreateModel();
|
||||||
|
ISQLExpression<List<SqlFormatModel>> createTableExpression = new BuildCreateTable();
|
||||||
|
public Builder setTableName(String tableName) {
|
||||||
|
sqlInfoCreateModel.tableName = tableName;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setTableOptions(List<FieldModel> tableOptions) {
|
||||||
|
sqlInfoCreateModel.tableOptions = tableOptions;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SqlInfoCreateModel<BuildCreateTable> build() {
|
||||||
|
sqlInfoCreateModel.setSqlExpression(createTableExpression);
|
||||||
|
return sqlInfoCreateModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getTableName() {
|
||||||
|
return tableName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTableName(String tableName) {
|
||||||
|
this.tableName = tableName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<FieldModel> getTableOptions() {
|
||||||
|
return tableOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTableOptions(List<FieldModel> tableOptions) {
|
||||||
|
this.tableOptions = tableOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<T> extends SqlInfoBaseDdlModel {
|
||||||
|
|
||||||
|
private DdlType type;//操作类型
|
||||||
|
|
||||||
|
private Map<String,Object> map;//参数
|
||||||
|
|
||||||
|
private SqlInfoDdlModel(){}
|
||||||
|
|
||||||
|
public static Builder builder(){
|
||||||
|
return new Builder();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static class Builder{
|
||||||
|
|
||||||
|
private SqlInfoDdlModel ddlModel = new SqlInfoDdlModel();
|
||||||
|
|
||||||
|
ISQLExpression<List<SqlFormatModel>> expression = new BuildDdl();
|
||||||
|
|
||||||
|
public SqlInfoDdlModel<BuildDdl> buildIndexExist(String tableName,String indexName){
|
||||||
|
Map<String,Object> 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<BuildDdl> buildIndexAllByTable(String tableName){
|
||||||
|
Map<String,Object> map=new HashMap<>();
|
||||||
|
map.put("tableName",tableName);
|
||||||
|
ddlModel.type= DdlType.INDEX_ALL;
|
||||||
|
ddlModel.map=map;
|
||||||
|
ddlModel.setSqlExpression(expression);
|
||||||
|
return ddlModel;
|
||||||
|
}
|
||||||
|
public SqlInfoDdlModel<BuildDdl> buildTableExist(String tableName){
|
||||||
|
Map<String,Object> map=new HashMap<>();
|
||||||
|
map.put("tableName",tableName);
|
||||||
|
ddlModel.type= DdlType.TABLE_EXIST;
|
||||||
|
ddlModel.map=map;
|
||||||
|
ddlModel.setSqlExpression(expression);
|
||||||
|
return ddlModel;
|
||||||
|
}
|
||||||
|
public SqlInfoDdlModel<BuildDdl> buildGetAllTableName(){
|
||||||
|
Map<String,Object> map=new HashMap<>();
|
||||||
|
ddlModel.type= DdlType.ALL_TABLE_NAME;
|
||||||
|
ddlModel.map=map;
|
||||||
|
ddlModel.setSqlExpression(expression);
|
||||||
|
return ddlModel;
|
||||||
|
}
|
||||||
|
public SqlInfoDdlModel<BuildDdl> buildFieldComment(String tableName){
|
||||||
|
Map<String,Object> map=new HashMap<>();
|
||||||
|
map.put("tableName",tableName);
|
||||||
|
ddlModel.type= DdlType.TABLE_FIELD_COMMENT;
|
||||||
|
ddlModel.map=map;
|
||||||
|
ddlModel.setSqlExpression(expression);
|
||||||
|
return ddlModel;
|
||||||
|
}
|
||||||
|
public SqlInfoDdlModel<BuildDdl> buildTableComment(String tableName){
|
||||||
|
Map<String,Object> 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<String, Object> getMap() {
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<T> 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<List<SqlFormatModel>> expression = new BuildDrop();
|
||||||
|
|
||||||
|
public SqlInfoDropModel<BuildDrop> buildDropTable(String tableName){
|
||||||
|
dropModel.tableName = tableName;
|
||||||
|
dropModel.dropType = DropType.DROP_TABLE;
|
||||||
|
dropModel.setSqlExpression(expression);
|
||||||
|
return dropModel;
|
||||||
|
}
|
||||||
|
public SqlInfoDropModel<BuildDrop> buildDropColumn(String tableName,String column){
|
||||||
|
dropModel.tableName = tableName;
|
||||||
|
dropModel.cloumnCode=column;
|
||||||
|
dropModel.dropType = DropType.DROP_COLUMN;
|
||||||
|
dropModel.setSqlExpression(expression);
|
||||||
|
return dropModel;
|
||||||
|
}
|
||||||
|
public SqlInfoDropModel<BuildDrop> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<T> extends SqlInfoBaseDdlModel {
|
||||||
|
|
||||||
|
String tableName;//表
|
||||||
|
List<String> keyList;
|
||||||
|
|
||||||
|
public static Builder builder(){
|
||||||
|
return new Builder();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Builder{
|
||||||
|
private SqlInfoPrimaryKeyModel sqlInfoCreateModel = new SqlInfoPrimaryKeyModel();
|
||||||
|
ISQLExpression<List<SqlFormatModel>> primaryKeyExpression = new BuildPrimaryKey();
|
||||||
|
public Builder setTableName(String tableName) {
|
||||||
|
sqlInfoCreateModel.tableName = tableName;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setPrimaryKey(List<String> 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<String> getKeyList() {
|
||||||
|
return keyList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKeyList(List<String> keyList) {
|
||||||
|
this.keyList = keyList;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<T> extends SqlInfoBaseModel {
|
||||||
|
|
||||||
|
|
||||||
|
private List<ExpressionModel> 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<Object> tmpList = (List<Object>) 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<SqlInfoConditionModel.Builder> orBuilderConsumer) {
|
||||||
|
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.OR_BUILD, null, orBuilderConsumer));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SqlInfoConditionModel.Builder and(Consumer<SqlInfoConditionModel.Builder> andBuilderConsumer) {
|
||||||
|
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.AND_BUILD, null, andBuilderConsumer));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public SqlInfoWhereModel<BuildWhere> buildWhere() {
|
||||||
|
ISQLExpression<SqlFormatModel> expression = new BuildWhere();
|
||||||
|
SqlInfoWhereModel whereModel = new SqlInfoWhereModel();
|
||||||
|
List<ExpressionModel> expressions = conditionModel.getExpressions();
|
||||||
|
whereModel.setExpressions(expressions);
|
||||||
|
whereModel.setSqlExpression(expression);
|
||||||
|
return whereModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SqlInfoHavingModel<BuildHaving> buildHaving() {
|
||||||
|
ISQLExpression<SqlFormatModel> expression = new BuildHaving();
|
||||||
|
|
||||||
|
SqlInfoHavingModel havingModel = new SqlInfoHavingModel();
|
||||||
|
List<ExpressionModel> expressions = conditionModel.getExpressions();
|
||||||
|
havingModel.setExpressions(expressions);
|
||||||
|
havingModel.setSqlExpression(expression);
|
||||||
|
return havingModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SqlInfoConditionModel<BuildCondition> build() {
|
||||||
|
return conditionModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ExpressionModel> 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<ExpressionModel> expressions) {
|
||||||
|
this.expressions = expressions;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<T> 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<BuildDelete> build(){
|
||||||
|
ISQLExpression<SqlFormatModel> expression = new BuildDelete();
|
||||||
|
sqlInfoDeleteModel.setSqlExpression(expression);
|
||||||
|
return sqlInfoDeleteModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTableName() {
|
||||||
|
return tableName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getReal() {
|
||||||
|
return isReal;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<T> 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<BuildDelete> build(){
|
||||||
|
ISQLExpression<SqlFormatModel> expression = new BuildGroupBy();
|
||||||
|
groupModel.setSqlExpression(expression);
|
||||||
|
return groupModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
package com.jeelowcode.framework.plus.build.buildmodel.dql;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author JX
|
||||||
|
* @create 2024-07-04 9:14
|
||||||
|
* @dedescription:
|
||||||
|
*/
|
||||||
|
public class SqlInfoHavingModel<T> extends SqlInfoConditionModel {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<T> extends SqlInfoBaseModel {
|
||||||
|
|
||||||
|
private String tableName;
|
||||||
|
|
||||||
|
private Map<String,Object> 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<String,Object> insertMap){
|
||||||
|
insertModel.insertMap.putAll(insertMap);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SqlInfoInsertModel<BuildInsert> build(){
|
||||||
|
ISQLExpression<SqlFormatModel> expression = new BuildInsert();
|
||||||
|
insertModel.setSqlExpression(expression);
|
||||||
|
return insertModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTableName() {
|
||||||
|
return tableName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTableName(String tableName) {
|
||||||
|
this.tableName = tableName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> getInsertMap() {
|
||||||
|
return insertMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInsertMap(Map<String, Object> insertMap) {
|
||||||
|
this.insertMap = insertMap;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<T> 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<SqlFormatModel> build(){
|
||||||
|
ISQLExpression<SqlFormatModel> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<T> extends SqlInfoBaseModel {
|
||||||
|
|
||||||
|
private List<OrderByModel> 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<BuildOrderBy> build(){
|
||||||
|
ISQLExpression<SqlFormatModel> expression = new BuildOrderBy();
|
||||||
|
infoOrderModel.setSqlExpression(expression);
|
||||||
|
return infoOrderModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<OrderByModel> getOrderByList() {
|
||||||
|
return orderByList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrderByList(List<OrderByModel> orderByList) {
|
||||||
|
this.orderByList = orderByList;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<T> 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<BuildSelect> build() {
|
||||||
|
ISQLExpression<SqlFormatModel> expression = new BuildPublicSql();
|
||||||
|
selectModel.setSqlExpression(expression);
|
||||||
|
return selectModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSql() {
|
||||||
|
return sql;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<T> 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<BuildSelect> build() {
|
||||||
|
ISQLExpression<SqlFormatModel> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<T> extends SqlInfoBaseModel {
|
||||||
|
private String tableName;
|
||||||
|
|
||||||
|
private Map<String,Object> 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<String,Object> updateMap){
|
||||||
|
updateModel.updateMap.putAll(updateMap);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public SqlInfoUpdateModel<BuildUpdate> build() {
|
||||||
|
ISQLExpression<SqlFormatModel> expression = new BuildUpdate();
|
||||||
|
updateModel.setSqlExpression(expression);
|
||||||
|
return updateModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTableName() {
|
||||||
|
return tableName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTableName(String tableName) {
|
||||||
|
this.tableName = tableName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> getUpdateMap() {
|
||||||
|
return updateMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUpdateMap(Map<String, Object> updateMap) {
|
||||||
|
this.updateMap = updateMap;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
|
||||||
|
package com.jeelowcode.framework.plus.build.buildmodel.dql;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author JX
|
||||||
|
* @create 2024-07-03 10:12
|
||||||
|
* @dedescription:
|
||||||
|
*/
|
||||||
|
public class SqlInfoWhereModel<T> extends SqlInfoConditionModel {
|
||||||
|
}
|
||||||
@@ -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<String> initSet=new HashSet<>();
|
||||||
|
}
|
||||||
@@ -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<SqlInfoWhereModel.Builder> 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> buildDelete = builderDelete.build();
|
||||||
|
SqlInfoWhereModel<BuildWhere> buildWhere = builderWhere.buildWhere();
|
||||||
|
|
||||||
|
List<ISQLExpression> 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<SqlFormatModel> sqlFormatModelList = SqlHelper.sqlExpression(context, expression);
|
||||||
|
return sqlFormatModelList.get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<String,Object> 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> buildInsert = builderInsert.build();
|
||||||
|
|
||||||
|
List<ISQLExpression> expressionList=new ArrayList<>();
|
||||||
|
if(initSet.contains(BUILDER_INSERT)){
|
||||||
|
context.setInsertModel(buildInsert);
|
||||||
|
expressionList.add(new BuildInsert());
|
||||||
|
}
|
||||||
|
|
||||||
|
ISQLExpression expression = new AndExpression(expressionList);
|
||||||
|
List<SqlFormatModel> sqlFormatModelList = SqlHelper.sqlExpression(context, expression);
|
||||||
|
return sqlFormatModelList.get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<String> 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<SqlInfoWhereModel.Builder> 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<SqlInfoHavingModel.Builder> 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> buildSelect = builderSelect.build();
|
||||||
|
SqlInfoWhereModel<BuildWhere> buildWhere = builderWhere.buildWhere();
|
||||||
|
SqlInfoOrderModel<BuildOrderBy> buildOrderBy = builderOrderBy.build();
|
||||||
|
SqlInfoGroupModel<BuildDelete> buildGroupBy = builderGroupBy.build();
|
||||||
|
SqlInfoJoinModel<SqlFormatModel> buildJoin = builderJoin.build();
|
||||||
|
SqlInfoHavingModel<BuildHaving> buildHaving = builderHaving.buildHaving();
|
||||||
|
|
||||||
|
//本次是否忽略租户
|
||||||
|
if(FuncBase.isNotEmpty(tenantIgnore)){
|
||||||
|
context.setTenantIgnore(tenantIgnore);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ISQLExpression> 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<SqlFormatModel> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<String,Object> updateMap){
|
||||||
|
builderUpdate.addMap(updateMap);
|
||||||
|
initSet.add(BUILDER_UPDATE);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Wrapper setWhere(Consumer<SqlInfoWhereModel.Builder> 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> buildUpdate = builderUpdate.build();
|
||||||
|
SqlInfoWhereModel<BuildWhere> buildWhere = builderWhere.buildWhere();
|
||||||
|
|
||||||
|
List<ISQLExpression> 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<SqlFormatModel> sqlFormatModelList = SqlHelper.sqlExpression(context, expression);
|
||||||
|
return sqlFormatModelList.get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user