diff --git a/README.md b/README.md
index 13db9f9..54a1949 100644
--- a/README.md
+++ b/README.md
@@ -70,13 +70,12 @@
# 更新预告
1.计划加入AI来帮忙生成更多样式的模板
-2.计划使用AI来改善现有模板
-3.深度支持Select SQL模式,以及探索JSON模式更多可能
+2.改进JSqlParser Engine (Select SQL and Create SQL)
# Update Logs
| 更新日期 | 更新内容 |
|:-----------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| 2025.09.13 | Create SQL by JSqlParser Engine升级
更新SpringBoot等类库版本,修复漏洞
修复CDN问题,切换为staticfile.org |
+| 2025.09.13 | JSqlParser Engine全新升级,目前Select SQL模式相对稳定!
更新SpringBoot等类库版本,修复漏洞
修复CDN问题,切换为staticfile.org |
| 2025.03.31 | 优化说明 |
| 2025.03.16 | NewUI V2前端优化:
移除不必要内容,优化Local和CDN静态文件引入。
修复由于SQL类型大写导致无法转换的问题。(感谢@zzy-design的反馈)
JPA模板优化(感谢@PenroseYang的反馈):
修复不开启Lombok情况下Set/Get方法生成问题;
修复importDdate判断为true后没有引入日期类的问题
|
| 2024.12.29 | 优化前端加载速度,优化输出代码着色,CDN改字节跳动静态资源公共库。
|
diff --git a/generator-web/src/main/java/com/softdev/system/generator/controller/GeneratorController.java b/generator-web/src/main/java/com/softdev/system/generator/controller/GeneratorController.java
index caa967d..3a9142b 100644
--- a/generator-web/src/main/java/com/softdev/system/generator/controller/GeneratorController.java
+++ b/generator-web/src/main/java/com/softdev/system/generator/controller/GeneratorController.java
@@ -88,7 +88,7 @@ public class GeneratorController {
classInfo = generatorService.generateSelectSqlBySQLPraser(paramInfo);
break;
case "create-sql":
- //SelectSqlBySQLPraser模式:parse select sql by JSqlParser
+ //CreateSqlBySQLPraser模式:parse create sql by JSqlParser
classInfo = generatorService.generateCreateSqlBySQLPraser(paramInfo);
break;
default:
diff --git a/generator-web/src/main/java/com/softdev/system/generator/service/GeneratorServiceImpl.java b/generator-web/src/main/java/com/softdev/system/generator/service/GeneratorServiceImpl.java
index b4658c4..e6ec491 100644
--- a/generator-web/src/main/java/com/softdev/system/generator/service/GeneratorServiceImpl.java
+++ b/generator-web/src/main/java/com/softdev/system/generator/service/GeneratorServiceImpl.java
@@ -96,6 +96,7 @@ public class GeneratorServiceImpl implements GeneratorService {
if (!CollectionUtils.isEmpty(tableNameList)) {
String tableName = tableNameList.get(0).trim();
classInfo.setTableName(tableName);
+ classInfo.setOriginTableName(tableName);
String className = StringUtilsPlus.upperCaseFirst(StringUtilsPlus.underlineToCamelCase(tableName));
if (className.contains("_")) {
className = className.replaceAll("_", "");
@@ -121,21 +122,15 @@ public class GeneratorServiceImpl implements GeneratorService {
fieldName=fieldName.contains(".")?fieldName.substring(fieldName.indexOf(".")+1):fieldName;
//转换前
fieldInfo.setColumnName(fieldName);
- switch ((String) paramInfo.getOptions().get("nameCaseType")) {
- case ParamInfo.NAME_CASE_TYPE.CAMEL_CASE:
+ fieldName = switch ((String) paramInfo.getOptions().get("nameCaseType")) {
+ case ParamInfo.NAME_CASE_TYPE.CAMEL_CASE ->
// 2024-1-27 L&J 适配任意(maybe)原始风格转小写驼峰
- fieldName = StringUtilsPlus.toLowerCamel(aliasName);
- break;
- case ParamInfo.NAME_CASE_TYPE.UNDER_SCORE_CASE:
- fieldName = StringUtilsPlus.toUnderline(aliasName, false);
- break;
- case ParamInfo.NAME_CASE_TYPE.UPPER_UNDER_SCORE_CASE:
- fieldName = StringUtilsPlus.toUnderline(aliasName.toUpperCase(), true);
- break;
- default:
- fieldName = aliasName;
- break;
- }
+ StringUtilsPlus.toLowerCamel(aliasName);
+ case ParamInfo.NAME_CASE_TYPE.UNDER_SCORE_CASE -> StringUtilsPlus.toUnderline(aliasName, false);
+ case ParamInfo.NAME_CASE_TYPE.UPPER_UNDER_SCORE_CASE ->
+ StringUtilsPlus.toUnderline(aliasName.toUpperCase(), true);
+ default -> aliasName;
+ };
//转换后
fieldInfo.setFieldName(fieldName);
@@ -157,62 +152,57 @@ public class GeneratorServiceImpl implements GeneratorService {
@Override
public ClassInfo generateCreateSqlBySQLPraser(ParamInfo paramInfo) throws Exception {
ClassInfo classInfo = new ClassInfo();
- Statement statement = CCJSqlParserUtil.parse(paramInfo.getTableSql());
- CCJSqlParserManager parserManager = new CCJSqlParserManager();
- statement = parserManager.parse(new StringReader(paramInfo.getTableSql()));
- TablesNamesFinder tablesNamesFinder = new TablesNamesFinder(); // 创建表名发现者对象
- List tableNameList = tablesNamesFinder.getTableList(statement); // 获取到表名列表
- //一般这里应该只解析到一个表名,除非多个表名,取第一个
- if (!CollectionUtils.isEmpty(tableNameList)) {
- String tableName = tableNameList.get(0).trim();
- classInfo.setTableName(tableName);
- String className = StringUtilsPlus.upperCaseFirst(StringUtilsPlus.underlineToCamelCase(tableName));
- if (className.contains("_")) {
- className = className.replaceAll("_", "");
- }
- classInfo.setClassName(className);
- classInfo.setClassComment(paramInfo.getTableSql());
+ Statement statement = null;
+ try {
+ statement = CCJSqlParserUtil.parse(paramInfo.getTableSql().trim());
+ }catch (Exception e) {
+ e.printStackTrace();
+ throw new SqlException("SQL语法错误:"+e.getMessage());
}
- //解析查询元素
- Select select = null;
- select = (Select) CCJSqlParserUtil.parse(paramInfo.getTableSql());
- PlainSelect plainSelect = (PlainSelect) select.getSelectBody();
- List> selectItems = plainSelect.getSelectItems();
- // field List
+ // 确保是CREATE TABLE语句
+ if (!(statement instanceof CreateTable createTable)) {
+ throw new SqlException("检测到SQL语句不是DLL CREATE TABLE语句");
+ }
+
+ // 提取表名
+ String tableName = createTable.getTable().getName();
+ classInfo.setTableName(tableName);
+ String className = StringUtilsPlus.upperCaseFirst(StringUtilsPlus.underlineToCamelCase(tableName));
+ if (className.contains("_")) {
+ className = className.replaceAll("_", "");
+ }
+ classInfo.setClassName(className);
+ classInfo.setOriginTableName(tableName);
+ classInfo.setClassComment(paramInfo.getTableSql());
+
+ // 提取字段信息
List fieldList = new ArrayList();
- selectItems.forEach(t->{
- FieldInfo fieldInfo = new FieldInfo();
- String fieldName = ((Column)t.getExpression()).getColumnName();
- String aliasName = t.getAlias() != null ? t.getAlias().getName() : ((Column)t.getExpression()).getColumnName();
- //存储原始字段名
- fieldInfo.setFieldComment(aliasName);fieldInfo.setColumnName(aliasName);
- //处理字段名是t.xxx的情况
- fieldName=fieldName.contains(".")?fieldName.substring(fieldName.indexOf(".")+1):fieldName;
- //转换前
- fieldInfo.setColumnName(fieldName);
- switch ((String) paramInfo.getOptions().get("nameCaseType")) {
- case ParamInfo.NAME_CASE_TYPE.CAMEL_CASE:
- // 2024-1-27 L&J 适配任意(maybe)原始风格转小写驼峰
- fieldName = StringUtilsPlus.toLowerCamel(aliasName);
- break;
- case ParamInfo.NAME_CASE_TYPE.UNDER_SCORE_CASE:
- fieldName = StringUtilsPlus.toUnderline(aliasName, false);
- break;
- case ParamInfo.NAME_CASE_TYPE.UPPER_UNDER_SCORE_CASE:
- fieldName = StringUtilsPlus.toUnderline(aliasName.toUpperCase(), true);
- break;
- default:
- fieldName = aliasName;
- break;
+ List columnDefinitions = createTable.getColumnDefinitions();
+
+ if (columnDefinitions != null) {
+ for (ColumnDefinition columnDefinition : columnDefinitions) {
+ FieldInfo fieldInfo = new FieldInfo();
+ String columnName = columnDefinition.getColumnName();
+ fieldInfo.setColumnName(columnName);
+ fieldInfo.setFieldComment(columnDefinition.toString());
+
+ // 根据命名规则转换字段名
+ String fieldName = switch ((String) paramInfo.getOptions().get("nameCaseType")) {
+ case ParamInfo.NAME_CASE_TYPE.CAMEL_CASE -> StringUtilsPlus.toLowerCamel(columnName);
+ case ParamInfo.NAME_CASE_TYPE.UNDER_SCORE_CASE -> StringUtilsPlus.toUnderline(columnName, false);
+ case ParamInfo.NAME_CASE_TYPE.UPPER_UNDER_SCORE_CASE ->
+ StringUtilsPlus.toUnderline(columnName.toUpperCase(), true);
+ default -> columnName;
+ };
+ fieldInfo.setFieldName(fieldName);
+
+ // 设置字段类型为String(因为无法准确推测类型)
+ fieldInfo.setFieldClass("String");
+ fieldList.add(fieldInfo);
}
- //转换后
- fieldInfo.setFieldName(fieldName);
-
- //无法推测类型,所有都set为String
- fieldInfo.setFieldClass("String");
- fieldList.add(fieldInfo);
- });
+ }
+
classInfo.setFieldList(fieldList);
log.info("classInfo:{}", JSON.toJSONString(classInfo));
return classInfo;
diff --git a/generator-web/src/main/java/com/softdev/system/generator/util/SqlException.java b/generator-web/src/main/java/com/softdev/system/generator/util/SqlException.java
new file mode 100644
index 0000000..de6ccdb
--- /dev/null
+++ b/generator-web/src/main/java/com/softdev/system/generator/util/SqlException.java
@@ -0,0 +1,35 @@
+package com.softdev.system.generator.util;
+
+import java.io.Serial;
+
+/**
+ * @author xuxueli 2018-05-02 21:10:28
+ */
+public class SqlException extends RuntimeException {
+
+ @Serial
+ private static final long serialVersionUID = 42L;
+
+ public SqlException() {
+ super();
+ }
+
+ public SqlException(String msg) {
+ super(msg);
+ }
+
+ public SqlException(String msg, Throwable cause) {
+ super(msg, cause);
+ }
+
+ public SqlException(Throwable cause) {
+ super(cause);
+ }
+
+ public SqlException(String message, Throwable cause,
+ boolean enableSuppression,
+ boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
+ }
+
+}
diff --git a/generator-web/src/main/resources/application-dev.yml b/generator-web/src/main/resources/application-dev.yml
index e7c6fc1..de3c237 100644
--- a/generator-web/src/main/resources/application-dev.yml
+++ b/generator-web/src/main/resources/application-dev.yml
@@ -59,4 +59,4 @@ OEM:
returnUtilSuccess: ResponseUtil.success
returnUtilFailure: ResponseUtil.error
outputStr: http://zhengkai.blog.csdn.net
- mode: CDN
+ mode: local
diff --git a/generator-web/src/main/resources/application.yml b/generator-web/src/main/resources/application.yml
index 6857c9d..caf4dfc 100644
--- a/generator-web/src/main/resources/application.yml
+++ b/generator-web/src/main/resources/application.yml
@@ -1,3 +1,3 @@
spring:
profiles:
- active: bejson
\ No newline at end of file
+ active: dev
\ No newline at end of file
diff --git a/generator-web/src/main/resources/statics/js/main.js b/generator-web/src/main/resources/statics/js/main.js
index 101b56f..e714a1a 100644
--- a/generator-web/src/main/resources/statics/js/main.js
+++ b/generator-web/src/main/resources/statics/js/main.js
@@ -123,8 +123,9 @@ const vm = new Vue({
//get value from codemirror
vm.formData.tableSql=$.inputArea.getValue();
axios.post(basePath+"/code/generate",vm.formData).then(function(res){
- if(res.code===500){
- error("生成失败,请检查SQL语句!!!");
+ if(res.status===500||res.data.code===500){
+ console.log(res);
+ error("生成失败,请检查SQL语句!!!"+res.data.msg);
return;
}
setAllCookie();
diff --git a/generator-web/src/main/resources/templates/newui2.html b/generator-web/src/main/resources/templates/newui2.html
index be1da78..a831a67 100644
--- a/generator-web/src/main/resources/templates/newui2.html
+++ b/generator-web/src/main/resources/templates/newui2.html
@@ -100,7 +100,7 @@
-
+