From 93d2e8236da95efae2fc84581bedb279a965ad4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=97=B6=E9=97=B4=E6=B7=A1=E5=BF=98=E4=B8=80=E5=88=87?= <7990497@qq.com> Date: Tue, 25 Jul 2023 11:57:23 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=94=AF=E6=8C=81=E5=8D=95?= =?UTF-8?q?=E4=B8=AA=E6=96=87=E4=BB=B6=E7=94=9F=E6=88=90=20feat:=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=80=BB=E8=BE=91=E5=88=A0=E9=99=A4=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 3 +- .../MybatisFlexDocumentChangeHandler.java | 18 ++------- .../core/RenderMybatisFlexTemplate.java | 38 +++++++++++++++---- .../plugin/core/config/MybatisFlexConfig.java | 15 +++++++- .../core/constant/MybatisFlexConstant.java | 6 ++- .../MybatisFlexCompletionContributor.java | 5 +++ .../bigtian/mf/plugin/entity/ColumnInfo.java | 19 +++++++++- .../MybatisFlexCodeGenerateDialog.form | 15 ++++++-- .../MybatisFlexCodeGenerateDialog.java | 4 +- .../windows/MybatisFlexSettingDialog.form | 13 +++++++ .../windows/MybatisFlexSettingDialog.java | 3 ++ src/main/resources/META-INF/plugin.xml | 6 +++ .../templates/controllerTemplate.java.vm | 4 ++ .../resources/templates/implTemplate.java.vm | 7 +++- .../templates/interfaceTempalate.java.vm | 5 ++- .../templates/mapperTemplate.java.vm | 2 + .../resources/templates/modelTemplate.java.vm | 2 +- .../resources/templates/xmlTemplate.xml.vm | 3 +- 18 files changed, 134 insertions(+), 34 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 08640bf..73a8983 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -26,8 +26,7 @@ intellij { dependencies { implementation("com.alibaba.fastjson2:fastjson2:2.0.34") implementation("cn.hutool:hutool-core:5.8.20") -// implementation("org.eclipse.jdt:org.eclipse.jdt.core:3.34.0") - + implementation("org.dom4j:dom4j:2.1.4") } tasks { diff --git a/src/main/java/club/bigtian/mf/plugin/core/MybatisFlexDocumentChangeHandler.java b/src/main/java/club/bigtian/mf/plugin/core/MybatisFlexDocumentChangeHandler.java index 959f0ce..4d9fbcc 100644 --- a/src/main/java/club/bigtian/mf/plugin/core/MybatisFlexDocumentChangeHandler.java +++ b/src/main/java/club/bigtian/mf/plugin/core/MybatisFlexDocumentChangeHandler.java @@ -42,7 +42,6 @@ public class MybatisFlexDocumentChangeHandler implements DocumentListener, Edito private static final Logger LOG = Logger.getInstance(MybatisFlexDocumentChangeHandler.class); private final ScheduledExecutorService EXECUTOR_SERVICE = Executors.newScheduledThreadPool(1); private ScheduledFuture scheduledFuture; - FileDocumentManager fileDocumentManager = FileDocumentManager.getInstance(); public MybatisFlexDocumentChangeHandler() { @@ -57,9 +56,7 @@ public class MybatisFlexDocumentChangeHandler implements DocumentListener, Edito EditorFactoryListener.super.editorCreated(event); Editor editor = event.getEditor(); Document document = editor.getDocument(); - // if (getPsiJavaFile(editor)) { document.addDocumentListener(this); - // } } /** @@ -76,6 +73,7 @@ public class MybatisFlexDocumentChangeHandler implements DocumentListener, Edito } PsiManager psiManager = PsiManager.getInstance(Objects.requireNonNull(editor.getProject())); PsiFile psiFile = psiManager.findFile(currentFile); + // 支持java和kotlin if (!(psiFile instanceof PsiJavaFile) && !(psiFile instanceof KtFile)) { return false; @@ -95,9 +93,7 @@ public class MybatisFlexDocumentChangeHandler implements DocumentListener, Edito EditorFactoryListener.super.editorReleased(event); Editor editor = event.getEditor(); Document document = editor.getDocument(); - // if (getPsiJavaFile(editor)) { document.removeDocumentListener(this); - // } } @Override @@ -106,6 +102,7 @@ public class MybatisFlexDocumentChangeHandler implements DocumentListener, Edito if ((StrUtil.isBlank(newFragment) && StrUtil.isBlank(event.getOldFragment()))) { return; } + EditorFactory.getInstance().editors(event.getDocument()).findAny().ifPresent(editor -> { boolean flag = checkFile(editor); if (flag) { @@ -139,7 +136,6 @@ public class MybatisFlexDocumentChangeHandler implements DocumentListener, Edito }); } - private void compile(@NotNull DocumentEvent event) { EditorFactory.getInstance().editors(event.getDocument()).findFirst().ifPresent(editor -> { Project project = editor.getProject(); @@ -164,7 +160,6 @@ public class MybatisFlexDocumentChangeHandler implements DocumentListener, Edito } HashSet elementSet = new HashSet<>(); PsiClass[] classes = psiJavaFile.getClasses(); - Project project = psiJavaFile.getProject(); for (PsiClass psiClass : classes) { HashSet fieldSet = new HashSet<>(); @@ -176,35 +171,30 @@ public class MybatisFlexDocumentChangeHandler implements DocumentListener, Edito } PsiAnnotation annotation = psiClass.getAnnotation("lombok.Data"); for (PsiMethod psiMethod : psiClass.getMethods()) { - for (PsiAnnotation psiAnnotation : psiMethod.getAnnotations()) { - - } // 解决用户cv方法,导致编译错误 String text = psiMethod.getText(); for (PsiAnnotation psiMethodAnnotation : psiMethod.getAnnotations()) { text = text.replace(psiMethodAnnotation.getText(), "").trim(); } PsiCodeBlock body = psiMethod.getBody(); + assert body != null; text = text.replace(body.getText(), "").trim(); if (elementSet.contains(text)) { return true; } else { elementSet.add(text); } - + //TODO 注解必填项不填,导致编译错误 //get/set方法 if (ObjectUtil.isNull(annotation) && (psiMethod.getName().startsWith("get") || psiMethod.getName().startsWith("set"))) { // 解决用户修改字段后,get/set没有及时更新,导致编译报错 - if (psiMethod.getName().startsWith("get")) { - assert body != null; String bodyText = body.getText(); String aReturn = StrUtil.subBetween(bodyText, "return ", ";").trim(); if (!fieldSet.contains(aReturn)) { return true; } } else if (psiMethod.getName().startsWith("set")) { - assert body != null; String bodyText = body.getText(); String aReturn = StrUtil.subBetween(bodyText, "this.", "=").trim(); if (!fieldSet.contains(aReturn)) { diff --git a/src/main/java/club/bigtian/mf/plugin/core/RenderMybatisFlexTemplate.java b/src/main/java/club/bigtian/mf/plugin/core/RenderMybatisFlexTemplate.java index 165ce4a..b06904b 100644 --- a/src/main/java/club/bigtian/mf/plugin/core/RenderMybatisFlexTemplate.java +++ b/src/main/java/club/bigtian/mf/plugin/core/RenderMybatisFlexTemplate.java @@ -5,6 +5,7 @@ import club.bigtian.mf.plugin.core.util.CodeReformat; import club.bigtian.mf.plugin.core.util.Modules; import club.bigtian.mf.plugin.core.util.TableCore; import club.bigtian.mf.plugin.core.util.VirtualFileUtils; +import club.bigtian.mf.plugin.entity.ColumnInfo; import club.bigtian.mf.plugin.entity.TableInfo; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -23,10 +24,9 @@ import org.apache.velocity.app.VelocityEngine; import org.jetbrains.annotations.Nullable; import java.io.StringWriter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; /** * 渲染MybatisFlex模板 @@ -42,12 +42,13 @@ public class RenderMybatisFlexTemplate { VelocityEngine velocityEngine = new VelocityEngine(); VelocityContext context = new VelocityContext(); HashMap> templateMap = new HashMap<>(); - Map templates = config.getTemplates(); + Map templates = new ConcurrentHashMap<>(config.getTemplates()); Map suffixMap = config.getSuffix(); - Map packages = config.getPackages(); + Map packages = new ConcurrentHashMap<>(config.getPackages()); + removeEmptyPackage(packages, templates); Map modules = config.getModules(); PsiFileFactory factory = PsiFileFactory.getInstance(project); - + logicDelete(selectedTableInfo, config); for (TableInfo tableInfo : selectedTableInfo) { String className = TableCore.getClassName(tableInfo.getName(), config.getTablePrefix()); context.put("className", className); @@ -111,6 +112,29 @@ public class RenderMybatisFlexTemplate { } + private static void logicDelete(List selectedTableInfo, MybatisFlexConfig config) { + String logicDeleteField = config.getLogicDeleteField(); + if (StrUtil.isBlank(logicDeleteField)) { + return; + } + Set fieldSet = Arrays.stream(logicDeleteField.split(";")) + .collect(Collectors.toSet()); + for (TableInfo info : selectedTableInfo) { + for (ColumnInfo columnInfo : info.getColumnList()) { + columnInfo.setLogicDelete(fieldSet.contains(columnInfo.getName())); + } + } + } + + private static void removeEmptyPackage(Map packages, Map templates) { + for (Map.Entry entry : packages.entrySet()) { + if (StrUtil.isEmpty(entry.getValue())) { + packages.remove(entry.getKey()); + templates.remove(entry.getKey()); + } + } + } + /** * 渲染模板 diff --git a/src/main/java/club/bigtian/mf/plugin/core/config/MybatisFlexConfig.java b/src/main/java/club/bigtian/mf/plugin/core/config/MybatisFlexConfig.java index 5e0433a..f9a5c12 100644 --- a/src/main/java/club/bigtian/mf/plugin/core/config/MybatisFlexConfig.java +++ b/src/main/java/club/bigtian/mf/plugin/core/config/MybatisFlexConfig.java @@ -169,7 +169,12 @@ public class MybatisFlexConfig { /** * 是否泛型 */ - private boolean genericity; + private boolean genericity; + + /** + * 逻辑删除字段 + */ + private String logicDeleteField; public Map getSuffix() { Map data = new HashMap<>(); @@ -534,4 +539,12 @@ public class MybatisFlexConfig { public void setGenericity(boolean genericity) { this.genericity = genericity; } + + public String getLogicDeleteField() { + return logicDeleteField; + } + + public void setLogicDeleteField(String logicDeleteField) { + this.logicDeleteField = logicDeleteField; + } } diff --git a/src/main/java/club/bigtian/mf/plugin/core/constant/MybatisFlexConstant.java b/src/main/java/club/bigtian/mf/plugin/core/constant/MybatisFlexConstant.java index 266dcab..22e50b4 100644 --- a/src/main/java/club/bigtian/mf/plugin/core/constant/MybatisFlexConstant.java +++ b/src/main/java/club/bigtian/mf/plugin/core/constant/MybatisFlexConstant.java @@ -7,6 +7,10 @@ public class MybatisFlexConstant { */ public static final String CONTROLLER_TEMPLATE = "controllerTemplate.java"; public static final String TABLE_PREFIX = "tablePrefix"; + /** + * 逻辑删除 + */ + public static final String LOGIC_DELETE_FIELD = "logicDeleteField"; public static final String MODEL_TEMPLATE = "modelTemplate.java"; public static final String INTERFACE_TEMPLATE = "interfaceTempalate.java"; public static final String IMPL_TEMPLATE = "implTemplate.java"; @@ -21,7 +25,7 @@ public class MybatisFlexConstant { public static final String SINCE = "since"; public static final String MYBATIS_FLEX_CONFIG = "mybatisFlexConfig"; - public static final String MYBATIS_FLEX_CONFIGSINCE= "configSince"; + public static final String MYBATIS_FLEX_CONFIGSINCE = "configSince"; public static final String XML_COM_BOX = "xmlComBox"; public static final String MAPPER_COM_BOX = "mapperComBox"; public static final String SERVICE_IMPL_COM_BOX = "serviceImplComBox"; diff --git a/src/main/java/club/bigtian/mf/plugin/core/contributor/MybatisFlexCompletionContributor.java b/src/main/java/club/bigtian/mf/plugin/core/contributor/MybatisFlexCompletionContributor.java index cf3c871..2522574 100644 --- a/src/main/java/club/bigtian/mf/plugin/core/contributor/MybatisFlexCompletionContributor.java +++ b/src/main/java/club/bigtian/mf/plugin/core/contributor/MybatisFlexCompletionContributor.java @@ -3,6 +3,7 @@ package club.bigtian.mf.plugin.core.contributor; import club.bigtian.mf.plugin.core.util.KtFileUtil; import club.bigtian.mf.plugin.core.util.PsiJavaFileUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.intellij.codeInsight.completion.CompletionContributor; @@ -148,6 +149,7 @@ public class MybatisFlexCompletionContributor extends CompletionContributor { if (importSet.contains(importStaticStatement.getText())) { return; } + psiJavaFile.getImportList().add(importStaticStatement); } @@ -248,6 +250,9 @@ public class MybatisFlexCompletionContributor extends CompletionContributor { return null; } VirtualFile[] children = file.getChildren(); + if (ArrayUtil.isEmpty(children)) { + return null; + } for (VirtualFile child : children) { if (child.getName().startsWith("generated")) { return child; diff --git a/src/main/java/club/bigtian/mf/plugin/entity/ColumnInfo.java b/src/main/java/club/bigtian/mf/plugin/entity/ColumnInfo.java index 3b49112..166902c 100644 --- a/src/main/java/club/bigtian/mf/plugin/entity/ColumnInfo.java +++ b/src/main/java/club/bigtian/mf/plugin/entity/ColumnInfo.java @@ -44,6 +44,10 @@ public class ColumnInfo { * 是否必填 */ private boolean notNull; + /** + * 是否逻辑删除 + */ + private boolean logicDelete; public boolean isNotNull() { return notNull; @@ -118,14 +122,27 @@ public class ColumnInfo { } + public boolean isLogicDelete() { + return logicDelete; + } + + public void setLogicDelete(boolean logicDelete) { + this.logicDelete = logicDelete; + } + @Override public String toString() { return "ColumnInfo{" + "name='" + name + '\'' + + ", fieldName='" + fieldName + '\'' + + ", fieldType='" + fieldType + '\'' + ", type='" + type + '\'' + ", comment='" + comment + '\'' + - ", isPrimaryKey=" + primaryKey + + ", primaryKey=" + primaryKey + ", isAutoIncrement=" + isAutoIncrement + + ", methodName='" + methodName + '\'' + + ", notNull=" + notNull + + ", logicDelete=" + logicDelete + '}'; } } diff --git a/src/main/java/club/bigtian/mf/plugin/windows/MybatisFlexCodeGenerateDialog.form b/src/main/java/club/bigtian/mf/plugin/windows/MybatisFlexCodeGenerateDialog.form index 51d4632..f1fb839 100644 --- a/src/main/java/club/bigtian/mf/plugin/windows/MybatisFlexCodeGenerateDialog.form +++ b/src/main/java/club/bigtian/mf/plugin/windows/MybatisFlexCodeGenerateDialog.form @@ -18,7 +18,7 @@ - + @@ -28,7 +28,7 @@ - + @@ -37,12 +37,21 @@ - + + + + + + + + + + diff --git a/src/main/java/club/bigtian/mf/plugin/windows/MybatisFlexCodeGenerateDialog.java b/src/main/java/club/bigtian/mf/plugin/windows/MybatisFlexCodeGenerateDialog.java index 36b367d..e999ed0 100644 --- a/src/main/java/club/bigtian/mf/plugin/windows/MybatisFlexCodeGenerateDialog.java +++ b/src/main/java/club/bigtian/mf/plugin/windows/MybatisFlexCodeGenerateDialog.java @@ -1,12 +1,12 @@ package club.bigtian.mf.plugin.windows; -import club.bigtian.mf.plugin.core.util.Package; import club.bigtian.mf.plugin.core.RenderMybatisFlexTemplate; import club.bigtian.mf.plugin.core.Template; import club.bigtian.mf.plugin.core.config.MybatisFlexConfig; import club.bigtian.mf.plugin.core.persistent.MybatisFlexPluginConfigData; import club.bigtian.mf.plugin.core.render.TableListCellRenderer; import club.bigtian.mf.plugin.core.search.InvertedIndexSearch; +import club.bigtian.mf.plugin.core.util.Package; import club.bigtian.mf.plugin.core.util.*; import club.bigtian.mf.plugin.core.validator.InputValidatorImpl; import club.bigtian.mf.plugin.entity.ColumnInfo; @@ -67,6 +67,7 @@ public class MybatisFlexCodeGenerateDialog extends JDialog { private JTextField tableSearch; private FixedSizeButton sortBtn; private JProgressBar progressBar; + private JCheckBox strictComBox; private AnActionEvent actionEvent; List list = Arrays.asList(cotrollerCombox, modelCombox, serviceInteCombox, serviceImplComBox, mapperComBox, xmlComBox); @@ -218,6 +219,7 @@ public class MybatisFlexCodeGenerateDialog extends JDialog { }); setSelectTalbe(actionEvent); + strictComBox.addChangeListener(e -> generateBtn.setEnabled(!strictComBox.isSelected())); } private static Set search(String tableName, TableListCellRenderer cellRenderer, DefaultListModel model) { diff --git a/src/main/java/club/bigtian/mf/plugin/windows/MybatisFlexSettingDialog.form b/src/main/java/club/bigtian/mf/plugin/windows/MybatisFlexSettingDialog.form index 7e1e3f3..f2ad413 100644 --- a/src/main/java/club/bigtian/mf/plugin/windows/MybatisFlexSettingDialog.form +++ b/src/main/java/club/bigtian/mf/plugin/windows/MybatisFlexSettingDialog.form @@ -174,6 +174,19 @@ + + + + + + + + + + + + + diff --git a/src/main/java/club/bigtian/mf/plugin/windows/MybatisFlexSettingDialog.java b/src/main/java/club/bigtian/mf/plugin/windows/MybatisFlexSettingDialog.java index a5e8469..64509c6 100644 --- a/src/main/java/club/bigtian/mf/plugin/windows/MybatisFlexSettingDialog.java +++ b/src/main/java/club/bigtian/mf/plugin/windows/MybatisFlexSettingDialog.java @@ -65,6 +65,7 @@ public class MybatisFlexSettingDialog extends JDialog { private JButton restBtn; private JCheckBox swagger3CheckBox; private JButton returnBtn; + private com.intellij.ui.components.fields.ExpandableTextField logicTF; private Project project; public MybatisFlexSettingDialog(Project project) { @@ -215,6 +216,7 @@ public class MybatisFlexSettingDialog extends JDialog { cacheCheckBox.setSelected(Template.getChecBoxConfig(MybatisFlexConstant.CACHE)); overrideCheckBox.setSelected(Template.getChecBoxConfig(MybatisFlexConstant.OVERRIDE)); swagger3CheckBox.setSelected(Template.getChecBoxConfig(MybatisFlexConstant.SWAGGER3)); + logicTF.setText(Template.getConfigData(MybatisFlexConstant.LOGIC_DELETE_FIELD)); initSinceComBox(); } @@ -281,6 +283,7 @@ public class MybatisFlexSettingDialog extends JDialog { config.setCache(cacheCheckBox.isSelected()); config.setSwagger3(swagger3CheckBox.isSelected()); config.setOverrideCheckBox(overrideCheckBox.isSelected()); + config.setLogicDeleteField(logicTF.getText()); return config; } diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index c0374f2..e537df0 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -58,6 +58,7 @@ + @@ -73,6 +74,11 @@ + + + + + diff --git a/src/main/resources/templates/controllerTemplate.java.vm b/src/main/resources/templates/controllerTemplate.java.vm index 84e49ff..15e4f1c 100644 --- a/src/main/resources/templates/controllerTemplate.java.vm +++ b/src/main/resources/templates/controllerTemplate.java.vm @@ -9,8 +9,12 @@ import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.beans.factory.annotation.Autowired; +#if($config.interfacePackage.length() > 0) import ${config.interfacePackage}.${interfaceName}; +#end +#if($config.modelPackage.length() > 0) import ${config.modelPackage}.${modelName}; +#end import org.springframework.web.bind.annotation.RestController; import java.io.Serializable; diff --git a/src/main/resources/templates/implTemplate.java.vm b/src/main/resources/templates/implTemplate.java.vm index 72d949c..6b39b6e 100644 --- a/src/main/resources/templates/implTemplate.java.vm +++ b/src/main/resources/templates/implTemplate.java.vm @@ -3,16 +3,21 @@ package $config.implPackage; import org.springframework.stereotype.Service; +#if($config.interfacePackage.length() > 0) import ${config.interfacePackage}.${interfaceName}; +#end +#if($config.modelPackage.length() > 0) import ${config.modelPackage}.${modelName}; +#end +#if($config.mapperPackage.length() > 0) import $config.mapperPackage.${mapperName}; +#end #if($config.cache) import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.query.QueryWrapper; import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; - import java.io.Serializable; import java.util.Collection; import java.util.List; diff --git a/src/main/resources/templates/interfaceTempalate.java.vm b/src/main/resources/templates/interfaceTempalate.java.vm index 907d603..d291476 100644 --- a/src/main/resources/templates/interfaceTempalate.java.vm +++ b/src/main/resources/templates/interfaceTempalate.java.vm @@ -1,6 +1,9 @@ package $interfacePackage; -import ${config.modelPackage}.${className}Entity; + +#if($config.modelPackage.length() > 0) +import ${config.modelPackage}.${modelName}; +#end import com.mybatisflex.core.service.IService; /** diff --git a/src/main/resources/templates/mapperTemplate.java.vm b/src/main/resources/templates/mapperTemplate.java.vm index 0654184..24ace85 100644 --- a/src/main/resources/templates/mapperTemplate.java.vm +++ b/src/main/resources/templates/mapperTemplate.java.vm @@ -1,6 +1,8 @@ package $config.mapperPackage; +#if($config.modelPackage.length() > 0) import ${config.modelPackage}.${modelName}; +#end import com.mybatisflex.core.BaseMapper; import org.apache.ibatis.annotations.Mapper; diff --git a/src/main/resources/templates/modelTemplate.java.vm b/src/main/resources/templates/modelTemplate.java.vm index b97ac62..9b54d71 100644 --- a/src/main/resources/templates/modelTemplate.java.vm +++ b/src/main/resources/templates/modelTemplate.java.vm @@ -69,7 +69,7 @@ public class ${modelName} { #if($column.primaryKey) @Id(keyType = KeyType.$config.idType) #else - @Column("$column.name") + @Column(value="$column.name" #if($column.logicDelete),isLogicDelete = true #end) #end private $column.fieldType $column.fieldName; diff --git a/src/main/resources/templates/xmlTemplate.xml.vm b/src/main/resources/templates/xmlTemplate.xml.vm index 8f943f8..c4fe53c 100644 --- a/src/main/resources/templates/xmlTemplate.xml.vm +++ b/src/main/resources/templates/xmlTemplate.xml.vm @@ -3,6 +3,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +#if($config.modelPackage.length() > 0) #set($result = "") #foreach($column in $table.columnList) @@ -17,7 +18,7 @@ #end #end - +#end $result -- Gitee