Mybatis Generator 結合Lombok使用,不生成get,set,生成資料庫註釋
阿新 • • 發佈:2019-02-13
今天折騰了大半天,就搞這東西了,不太熟悉這個東西,需要匯出找資料和文件。
也感謝網上的一些小夥伴提供的一些資料,提供了很多幫助,也讓我有了一些想法:
可以參考這位小夥伴的操作步驟,我也是在這基礎上再做的一些改進。
在這位小夥伴的基礎上,我發現有很多東西沒有生成,或者生成有問題,比如:
- 專案實體類如果有父類,子類還是會生成父類中已經包含的欄位
- 實體類中沒有生成serialVersionUID(本人有強迫症,看著一堆警告難受)
- 沒有註釋,或者註釋不是我們需要表達的意思
針對上面提出的問題一項一項進行優化。
- 專案實體類如果有父類,子類還是會生成父類中已經包含的欄位
首先需要定義我們哪些欄位需要忽略。(當然也有很多人是將公共實體的父類打包成jar來實現的)private final String IGNORE_FIELDS = "ignoreFields";
然後針對配置進行解析(我這裡偷懶了,直接逗號分隔欄位名稱。。。實用就好)
// 將需要忽略生成的屬性過濾掉 String ignoreFields = getIgnoreFields(); if (null != ignoreFields && !"".equals(ignoreFields)) { String[] field = ignoreFields.split(","); for (String ignoreField : field) { for (int i = 0; i < fields.size(); i++) { Field tableField = fields.get(i); if (ignoreField.equalsIgnoreCase(tableField.getName())) { fields.remove(tableField); i--; } } } }
最後再附上generatorConfig.xml中的配置程式碼
<plugin type="org.mybatis.generator.plugins.LombokPlugin"> <property name="generatorSerialVersionUID" value="true" /> <property name="ignoreFields" value="id,enabled,createTime,createBy,lastUpdateBy,lastUpdateTime" /> </plugin>
- 實體類中沒有生成serialVersionUID
serialVersionUID在generatorConfig.xml的屬性配置在上面已經貼出來了,就不再貼了,主要給看看java部分吧String generatorSerialVersionUID = properties.getProperty(GENERATOR_SERIAL_VERSION_UID); if ("true".equals(generatorSerialVersionUID)) { generatorSerialVersionUID(topLevelClass); } /** * 生成serialVersionUID值 * * @param topLevelClass */ private void generatorSerialVersionUID(TopLevelClass topLevelClass) { Field field = new Field(); field.setFinal(true); field.setInitializationString("1L"); field.setName("serialVersionUID"); field.setStatic(true); field.setType(new FullyQualifiedJavaType("long")); field.setVisibility(JavaVisibility.PRIVATE); // context.getCommentGenerator().addFieldComment(field, introspectedTable); topLevelClass.getFields().add(0, field); }
- 沒有註釋,獲取資料庫欄位的註釋
這個東西當然不是必須,有了是錦上添花的事兒// 新增domain的註解 topLevelClass.addAnnotation("@Data"); topLevelClass.addAnnotation("@EqualsAndHashCode(callSuper = true)"); // topLevelClass.addAnnotation("@Builder"); // topLevelClass.addAnnotation("@NoArgsConstructor"); // topLevelClass.addAnnotation("@AllArgsConstructor"); // 新增domain的註釋 StringBuilder sb = new StringBuilder("/**"); sb.append("\r\n * ").append(introspectedTable.getFullyQualifiedTable()); sb.append("\r\n * ").append(introspectedTable.getRemarks()); sb.append("\r\n * ").append("@Date ").append(getDateString()); sb.append("\r\n */"); topLevelClass.addJavaDocLine(sb.toString()); // 為每個屬性添加註釋 List<Field> fields = topLevelClass.getFields(); for (Field field : fields) { StringBuilder fieldSb = new StringBuilder(); field.addJavaDocLine("/**"); fieldSb.append(" * "); String fieldName = field.getName(); // java欄位名是駝峰的,需要轉成下劃線分割 String underlineFieldName = camelToUnderline(fieldName); IntrospectedColumn introspectedColumn = introspectedTable.getColumn(underlineFieldName); if (null == introspectedColumn) { continue; } fieldSb.append(introspectedColumn.getRemarks()); field.addJavaDocLine(fieldSb.toString().replace("\n", " ")); field.addJavaDocLine(" */"); }
最後,記得在pom.xml中配置mybatis-generator哦
<dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.6</version> </dependency>
將編譯好的class檔案替換進mybatis-generator-core中就好了,直接執行就OK了。
想偷懶的小夥伴就直接上這裡來下載已經編譯好的jar和原始碼包吧
https://download.csdn.net/download/yyhlichao/10811284