From 0b79f47cb281e9cf8af759f397dafee22186ada8 Mon Sep 17 00:00:00 2001 From: WenG <450292408@qq.com> Date: Sun, 4 Apr 2021 11:35:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=E7=94=9F=E6=88=90mapper?= =?UTF-8?q?=E5=87=BA=E7=8E=B0=E7=9A=84=E9=97=AE=E9=A2=98=20=E5=A4=84?= =?UTF-8?q?=E7=90=86=E4=B8=AD=E6=96=87=E4=B9=B1=E7=A0=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/GenerateController.java | 2 +- .../factory/CheckBoxTableCellFactory.java | 30 ++++++-- .../code/factory/service/FieldService.java | 11 +++ .../code/factory/service/GenerateService.java | 29 +++++--- .../ink/wgink/code/factory/vos/FieldVO.java | 56 +++++---------- .../template/normal/mapper/mysql-mapper.ftl | 68 ++++++++++--------- 6 files changed, 109 insertions(+), 87 deletions(-) diff --git a/src/main/java/ink/wgink/code/factory/controller/GenerateController.java b/src/main/java/ink/wgink/code/factory/controller/GenerateController.java index 89d81fa..05d05c9 100644 --- a/src/main/java/ink/wgink/code/factory/controller/GenerateController.java +++ b/src/main/java/ink/wgink/code/factory/controller/GenerateController.java @@ -19,7 +19,6 @@ import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.TextField; import javafx.scene.control.cell.PropertyValueFactory; -import javafx.stage.DirectoryChooser; import javafx.stage.Stage; import org.apache.commons.lang3.StringUtils; @@ -103,6 +102,7 @@ public class GenerateController implements Initializable { this.generateService = new GenerateService(fieldTableView); this.fieldService.setTableView(fieldTableView); this.fieldService.setTableName(tableVO.getTableName()); + this.fieldService.setTableNamePrefix(this.tablePrefixTextField.getText()); this.fieldService.showField(); } diff --git a/src/main/java/ink/wgink/code/factory/factory/CheckBoxTableCellFactory.java b/src/main/java/ink/wgink/code/factory/factory/CheckBoxTableCellFactory.java index 981704c..fb78eaf 100644 --- a/src/main/java/ink/wgink/code/factory/factory/CheckBoxTableCellFactory.java +++ b/src/main/java/ink/wgink/code/factory/factory/CheckBoxTableCellFactory.java @@ -1,12 +1,9 @@ package ink.wgink.code.factory.factory; -import com.sun.deploy.uitoolkit.impl.fx.ui.FXUIFactory; +import ink.wgink.code.factory.service.FieldService; import ink.wgink.code.factory.vos.FieldVO; import javafx.beans.property.ReadOnlyObjectWrapper; -import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; -import javafx.fxml.FXML; -import javafx.fxml.FXMLLoader; import javafx.scene.control.CheckBox; import javafx.scene.control.TableColumn; import javafx.util.Callback; @@ -37,9 +34,32 @@ public class CheckBoxTableCellFactory implements Callback call(TableColumn.CellDataFeatures param) { FieldVO fieldVO = param.getValue(); CheckBox checkBox = new CheckBox(); + String tableName = param.getValue().getTableName(); + String tableNamePrefix = param.getValue().getTableNamePrefix(); if (StringUtils.equals(IS_FORM_SHOW, property)) { Boolean isFormShow = param.getValue().getFormShow(); - checkBox.setSelected(isFormShow == null || !isFormShow ? false : true); + // 如果是主键 + if (StringUtils.equals(String.format("%s_id", tableName.replace(tableNamePrefix, "")), param.getValue().getColumnName())) { + param.getValue().setFormShow(false); + checkBox.setSelected(false); + } else if(StringUtils.equals(FieldService.DEFAULT_COLUMN_CREATOR, param.getValue().getColumnName())) { + param.getValue().setFormShow(false); + checkBox.setSelected(false); + } else if(StringUtils.equals(FieldService.DEFAULT_COLUMN_GMT_CREATE, param.getValue().getColumnName())) { + param.getValue().setFormShow(false); + checkBox.setSelected(false); + } else if(StringUtils.equals(FieldService.DEFAULT_COLUMN_MODIFIER, param.getValue().getColumnName())) { + param.getValue().setFormShow(false); + checkBox.setSelected(false); + } else if(StringUtils.equals(FieldService.DEFAULT_COLUMN_GMT_MODIFIED, param.getValue().getColumnName())) { + param.getValue().setFormShow(false); + checkBox.setSelected(false); + } else if(StringUtils.equals(FieldService.DEFAULT_COLUMN_IS_DELETE, param.getValue().getColumnName())) { + param.getValue().setFormShow(false); + checkBox.setSelected(false); + } else { + checkBox.setSelected(isFormShow == null || !isFormShow ? false : true); + } } if (StringUtils.equals(IS_LIST_SHOW, property)) { Boolean isListShow = param.getValue().getListShow(); diff --git a/src/main/java/ink/wgink/code/factory/service/FieldService.java b/src/main/java/ink/wgink/code/factory/service/FieldService.java index 581c9d7..2d7baa6 100644 --- a/src/main/java/ink/wgink/code/factory/service/FieldService.java +++ b/src/main/java/ink/wgink/code/factory/service/FieldService.java @@ -47,6 +47,7 @@ public class FieldService { private ObservableList fields = FXCollections.observableArrayList(); private TableView tableView; private String tableName; + private String tableNamePrefix; private Stage fieldStage; /** @@ -114,6 +115,8 @@ public class FieldService { continue; } FieldVO fieldVO = new FieldVO(); + fieldVO.setTableName(tableName); + fieldVO.setTableNamePrefix(tableNamePrefix); fieldVO.setRowNumber(fieldIndex); fieldVO.setColumnName(columnName); fieldVO.setColumnType(field.get("COLUMN_TYPE").toString()); @@ -170,6 +173,14 @@ public class FieldService { this.tableName = tableName; } + public String getTableNamePrefix() { + return tableNamePrefix == null ? "" : tableNamePrefix.trim(); + } + + public void setTableNamePrefix(String tableNamePrefix) { + this.tableNamePrefix = tableNamePrefix; + } + public void removeField(String columnName) { new Service() { diff --git a/src/main/java/ink/wgink/code/factory/service/GenerateService.java b/src/main/java/ink/wgink/code/factory/service/GenerateService.java index b4fe6d1..f1b8217 100644 --- a/src/main/java/ink/wgink/code/factory/service/GenerateService.java +++ b/src/main/java/ink/wgink/code/factory/service/GenerateService.java @@ -1,6 +1,5 @@ package ink.wgink.code.factory.service; -import freemarker.cache.ClassTemplateLoader; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; @@ -18,10 +17,7 @@ import javafx.stage.Stage; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Writer; +import java.io.*; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.HashMap; @@ -41,6 +37,7 @@ import java.util.Map; @Slf4j public class GenerateService { + public static final String UTF_8 = "UTF-8"; private Stage fieldStage; private TableView tableView; Configuration freemarkerConfiguration = new Configuration(Configuration.getVersion()); @@ -53,7 +50,7 @@ public class GenerateService { // this.freemarkerConfiguration.setTemplateLoader(new ClassTemplateLoader(this.getClass(), "/template")); // 3.加载 jar中的模板 this.freemarkerConfiguration.setClassForTemplateLoading(this.getClass(), "/template"); - this.freemarkerConfiguration.setDefaultEncoding("utf-8"); + this.freemarkerConfiguration.setDefaultEncoding(UTF_8); } public void generateCode(TableVO tableVO, GenerateVO generateVO) throws IOException, TemplateException { @@ -68,6 +65,7 @@ public class GenerateService { String tableFullName = tableVO.getTableName(); String tableNameWithoutPrefix = tableFullName.replaceFirst(generateVO.getTablePrefix(), ""); String tableName = WStringUtil.underLine2LowerUpper(tableNameWithoutPrefix); + String underlineTableName = WStringUtil.lowerUpper2UnderLine(tableName); // 首字母大写驼峰表名 String firstUpperTableName = WStringUtil.firstToUpper(tableName); // 首字母小写驼峰表明 @@ -82,6 +80,7 @@ public class GenerateService { dataModel.put("tableFullName", tableFullName); dataModel.put("firstUpperTableName", firstUpperTableName); dataModel.put("firstLowerTableName", firstLowerTableName); + dataModel.put("underlineTableName", underlineTableName); dataModel.put("tableExplain", tableVO.getTableComment()); dataModel.put("author", "CodeFactory"); dataModel.put("date", DateUtil.getTime()); @@ -132,16 +131,22 @@ public class GenerateService { */ private void initFieldList(String tableNameWithoutPrefix, Map dataModel, ObservableList fields) { List> fieldList = new ArrayList<>(); + String idColumn = null; boolean hasId = false; + boolean idFormShow = false; boolean hasGmtCreate = false; boolean hasCreator = false; boolean hasGmtModified = false; + boolean gmtModifiedFormShow = false; boolean hasModifier = false; + boolean modifierFormShow = false; boolean hasIsDelete = false; for (int i = 0; i < fields.size(); i++) { FieldVO field = fields.get(i); if (!hasId && StringUtils.equals(String.format("%s_id", tableNameWithoutPrefix), field.getColumnName())) { hasId = true; + idColumn = field.getColumnName(); + idFormShow = field.getFormShow(); } if (!hasGmtCreate && StringUtils.equals(FieldService.DEFAULT_FIELD_GMT_CREATE, field.getPropertyName())) { hasGmtCreate = true; @@ -151,9 +156,11 @@ public class GenerateService { } if (!hasGmtModified && StringUtils.equals(FieldService.DEFAULT_FIELD_GMT_MODIFIED, field.getPropertyName())) { hasGmtModified = true; + gmtModifiedFormShow = field.getFormShow(); } if (!hasModifier && StringUtils.equals(FieldService.DEFAULT_FIELD_MODIFIER, field.getPropertyName())) { hasModifier = true; + modifierFormShow = field.getFormShow(); } if (!hasIsDelete && StringUtils.equals(FieldService.DEFAULT_FIELD_IS_DELETE, field.getPropertyName())) { hasIsDelete = true; @@ -176,11 +183,15 @@ public class GenerateService { fieldMap.put("fieldSplit", fieldSplit); fieldList.add(fieldMap); } + dataModel.put("idColumn", idColumn); dataModel.put("hasId", hasId); + dataModel.put("idFormShow", idFormShow); dataModel.put("hasGmtCreate", hasGmtCreate); dataModel.put("hasCreator", hasCreator); dataModel.put("hasGmtModified", hasGmtModified); + dataModel.put("gmtModifiedFormShow", gmtModifiedFormShow); dataModel.put("hasModifier", hasModifier); + dataModel.put("modifierFormShow", modifierFormShow); dataModel.put("hasIsDelete", hasIsDelete); dataModel.put("fieldList", fieldList); } @@ -308,7 +319,7 @@ public class GenerateService { if (!folder.exists()) { folder.mkdirs(); } - code(templateFtl, String.format("%s/%s-mapper.xml", outFolder, tableName), dataModel); + code(templateFtl, String.format("%s/%s-mapper.xml", outFolder, WStringUtil.lowerUpper2UnderLine(tableName).replaceAll("\\_", "-")), dataModel); } /** @@ -455,8 +466,8 @@ public class GenerateService { * @throws TemplateException */ private void code(String templateFtl, String outFile, Map dataModel) throws IOException, TemplateException { - Template template = freemarkerConfiguration.getTemplate(templateFtl); - Writer out = new FileWriter(outFile); + Template template = freemarkerConfiguration.getTemplate(templateFtl, UTF_8); + Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), UTF_8)); template.process(dataModel, out); out.close(); } diff --git a/src/main/java/ink/wgink/code/factory/vos/FieldVO.java b/src/main/java/ink/wgink/code/factory/vos/FieldVO.java index 09970fe..0713354 100644 --- a/src/main/java/ink/wgink/code/factory/vos/FieldVO.java +++ b/src/main/java/ink/wgink/code/factory/vos/FieldVO.java @@ -32,6 +32,8 @@ public class FieldVO { private Boolean isFormShow; private Boolean isListShow; private Boolean isNotNull; + private String tableName; + private String tableNamePrefix; public FieldVO() { this.rowNumber = new SimpleIntegerProperty(0); @@ -212,44 +214,20 @@ public class FieldVO { isNotNull = notNull; } - @Override - public String toString() { - final StringBuilder sb = new StringBuilder("{"); - sb.append("\"rowNumber\":") - .append(rowNumber); - sb.append(",\"columnName\":") - .append(columnName); - sb.append(",\"columnComment\":") - .append(columnComment); - sb.append(",\"columnDefault\":") - .append(columnDefault); - sb.append(",\"dataType\":\"") - .append(dataType).append('\"'); - sb.append(",\"columnType\":") - .append(columnType); - sb.append(",\"characterMaximum\":") - .append(characterMaximum); - sb.append(",\"numericPrecision\":") - .append(numericPrecision); - sb.append(",\"numericScale\":") - .append(numericScale); - sb.append(",\"propertyName\":") - .append(propertyName); - sb.append(",\"propertyType\":") - .append(propertyType); - sb.append(",\"propertyLength\":") - .append(propertyLength); - sb.append(",\"formFieldType\":\"") - .append(formFieldType).append('\"'); - sb.append(",\"formFieldValue\":\"") - .append(formFieldValue).append('\"'); - sb.append(",\"isFormShow\":") - .append(isFormShow); - sb.append(",\"isListShow\":") - .append(isListShow); - sb.append(",\"isNotNull\":") - .append(isNotNull); - sb.append('}'); - return sb.toString(); + public String getTableName() { + return tableName == null ? "" : tableName.trim(); } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public String getTableNamePrefix() { + return tableNamePrefix == null ? "" : tableNamePrefix.trim(); + } + + public void setTableNamePrefix(String tableNamePrefix) { + this.tableNamePrefix = tableNamePrefix; + } + } diff --git a/src/main/resources/template/normal/mapper/mysql-mapper.ftl b/src/main/resources/template/normal/mapper/mysql-mapper.ftl index 684c6f5..abf446e 100644 --- a/src/main/resources/template/normal/mapper/mysql-mapper.ftl +++ b/src/main/resources/template/normal/mapper/mysql-mapper.ftl @@ -50,7 +50,7 @@ is_delete = 1 WHERE <#if hasId> - ${tableName}_id IN + ${underlineTableName}_id IN ${r"#{"}${firstLowerTableName}${r"Ids[${index}]}"} @@ -66,7 +66,7 @@ ${tableFullName} WHERE <#if hasId> - ${tableName}_id IN + ${idColumn} IN ${r"#{"}${firstLowerTableName}${r"Ids[${index}]}"} @@ -81,36 +81,38 @@ ${tableFullName} SET <#list fieldList! as field> - <#if field.listShow> - <#if field.formFieldValue == "number" || field.formFieldValue == "double"> - + <#if field.formShow> + <#if field.formFieldValue == "number" || field.formFieldValue == "double"> + ${field.columnName} = ${r"#{"}${field.propertyName}${r"}"}, - - <#elseif field.formFieldValue == "radio" || field.formFieldValue == "checkbox" || field.formFieldValue == "select"> - + + <#elseif field.formFieldValue == "radio" || field.formFieldValue == "checkbox" || field.formFieldValue == "select"> + + ${field.columnName} = ${r"#{"}${field.propertyName}${r"}"},w + + <#else> + <#if field.columnName != idColumn> + ${field.columnName} = ${r"#{"}${field.propertyName}${r"}"}, - - <#else> - - ${field.columnName} = ${r"#{"}${field.propertyName}${r"}"}, - - - <#if hasGmtModified> - gmt_modified = ${r"#{gmtModified}"}, - - <#if hasModifier> - modifier = ${r"#{modifier}"}, - - - <#if hasId> - ${tableName}_id = ${tableName}_id - <#else> - + + + + <#if hasGmtModified && !gmtModifiedFormShow> + gmt_modified = ${r"#{gmtModified}"}, + + <#if hasModifier && !modifierFormShow> + modifier = ${r"#{modifier}"}, + + <#if hasId> + ${idColumn} = ${idColumn} + <#else> + + WHERE <#if hasId> - ${tableName}_id = ${r"#{"}${firstLowerTableName}${r"Id}"} + ${idColumn} = ${r"#{"}${firstLowerTableName}${r"Id}"} <#else> @@ -125,7 +127,7 @@ <#if hasId> - t1.${tableName}_id + t1.${idColumn} <#else> 1 @@ -140,7 +142,7 @@ <#if hasId> AND - t1.${tableName}_id = ${r"#{"}${firstLowerTableName}${r"Id}"} + t1.${idColumn} = ${r"#{"}${firstLowerTableName}${r"Id}"} <#else> @@ -164,7 +166,7 @@ <#if hasId> AND - t1.${tableName}_id = ${r"#{"}${firstLowerTableName}${r"Id}"} + t1.${idColumn} = ${r"#{"}${firstLowerTableName}${r"Id}"} <#else> @@ -188,7 +190,7 @@ <#if hasId> AND - t1.${tableName}_id = ${r"#{"}${firstLowerTableName}${r"Id}"} + t1.${idColumn} = ${r"#{"}${firstLowerTableName}${r"Id}"} <#else> @@ -231,7 +233,7 @@ <#if hasId> AND - t1.${tableName}_id IN + t1.${idColumn} IN ${r"#{"}${firstLowerTableName}${r"Ids[${index}]}"} @@ -272,7 +274,7 @@ <#if hasId> AND - t1.${tableName}_id IN + t1.${idColumn} IN ${r"#{"}${firstLowerTableName}${r"Ids[${index}]}"} @@ -313,7 +315,7 @@ <#if hasId> AND - t1.${tableName}_id IN + t1.${idColumn} IN ${r"#{"}${firstLowerTableName}${r"Ids[${index}]}"}