![8bd0aa4b09f4da0da562be8d50542b01.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/26851474/1680693847532-5b79d4fd-818f-4c7a-a1c1-b954b80544f9.jpeg#averageHue=%231f3045&clientId=u0b785895-18c6-4&from=paste&height=540&id=ua2332f77&originHeight=1080&originWidth=1920&originalType=binary&ratio=2&rotation=0&showTitle=false&size=803671&status=done&style=none&taskId=u1d4e18d9-66a2-411a-97c6-63770f7bc2f&title=&width=960)
现在大多数的项目都是分多层结构
,经典的如遵循MVC规范(Model-View-Controller),如果按照DDD领域模型设计可能会划分更多层,每一层需要创建多个类似模式的类文件和内容,包括类名、注释、属性、方法等,基于数据模型生成代码的插件和工具有很多,比如mybatis-plus、mybatis-generator、mybatisx等,当然市面上也有许多代码自动生成的产品,这些代码生成方式大部分都是生成固定文件结构,但是大多公司一般有自己的一套框架结构或者重新设计的分层结构,这个时候就需要自定义代码生成文件格式,包括生成文件位置和内容格式,今天为大家带来基于mybatis-generator
插件的方式实现自定义代码结构,更好的适配现有代码工程。
基础配置
基于插件基本功能生成的代码,包括Do.java
、Example.java
、Mapper.java
、Mapper.xml
文件,其中生成内容没有对应的注释信息,或者配置生成的配置信息不够人性化,基本无用。
插件配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.4.2</version> <dependencies> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.4.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.32</version> </dependency> </dependencies> <configuration> <verbose>true</verbose> <overwrite>true</overwrite> <configurationFile>${basedir}/src/main/resources/generator-configuration.xml</configurationFile> </configuration> </plugin> </plugins>
|
配置Maven插件
,可以比较容易的触发生成代码。
![image.png](https://cdn.nlark.com/yuque/0/2023/png/26851474/1680672415609-f8c765d5-a2ae-460f-99c3-dfb4c9719909.png#averageHue=%23202020&clientId=ua437b34a-cb15-4&from=paste&height=301&id=u6a2c1bd4&originHeight=602&originWidth=1374&originalType=binary&ratio=2&rotation=0&showTitle=false&size=158205&status=done&style=none&taskId=u2b58d949-3a48-45df-b084-dd555b6c90b&title=&width=687)
配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <context id="default" targetRuntime="MyBatis3"> <plugin type="org.mybatis.generator.plugins.RowBoundsPlugin"/> <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>
<commentGenerator> <property name="suppressDate" value="true"/> <property name="suppressAllComments" value="true"/> </commentGenerator> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/code_gen?useSSL=false" userId="root" password="123456"/> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <javaModelGenerator targetPackage="com.example.codegen.domain" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="false"/> </javaModelGenerator> <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"> <property name="enableSubPackages" value="false"/> </sqlMapGenerator> <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.codegen.mapper" targetProject="src/main/java"> <property name="enableSubPackages" value="false"/> </javaClientGenerator>
<table tableName="system_users" domainObjectName="SystemUsersDo"/> </context> </generatorConfiguration>
|
配置注释信息写的比较清楚,这里给出部分配置信息,能够满足大部分需求,如有特殊需求可以参考 官方文档。
效果展示
**生成代码总览**
,具体生成内容介于文章内容就不做展示,大家可以实际配置生成。
![image.png](https://cdn.nlark.com/yuque/0/2023/png/26851474/1680672744310-ef123e02-a897-422f-a549-fb1a68171303.png#averageHue=%231e1d1c&clientId=ua437b34a-cb15-4&from=paste&height=421&id=ubfbe90ca&originHeight=842&originWidth=852&originalType=binary&ratio=2&rotation=0&showTitle=false&size=100298&status=done&style=none&taskId=u6072617c-2c1f-468d-b03f-09cb2f972f7&title=&width=426)
准备工作
进入正题配置我们的自定义插件配置,基于MybatisGenerator
提供的上下文信息可以方便的获取到元数据
信息,自定义插件有两种解决方案:
- 在项目工程中定义插件,执行生成代码可以动态加载对应的插件;
- 基于MybatisGenerator核心包修改,
不侵入项目工程
,可以方便的分享给其他人使用;
当然,本篇文章主要介绍基于MybatisGenerator核心包修改的方式,简单在GitHub上边搜索mybatis-generator-core发现魔改项目还挺多,接下来实际进行操作。
拉取核心包
可以从GitHub直接拉取魔改的仓库,或者直接下载源码解压
,我这里直接从仓库中找到源码并解压,mybatis-generator-core-1.4.2-sources。
![image.png](https://cdn.nlark.com/yuque/0/2023/png/26851474/1680674176927-0e51fff0-aa0c-4a01-a828-fb4893b09037.png#averageHue=%238c8881&clientId=ua437b34a-cb15-4&from=paste&height=149&id=ufc31d210&originHeight=298&originWidth=1538&originalType=binary&ratio=2&rotation=0&showTitle=false&size=100630&status=done&style=none&taskId=ud8237cf9-6c34-4dc1-8002-9646211c39a&title=&width=769)
导入工程
- 将源码包移动到
/src/main/java
中;
- 从/META-INF/maven/org.mybatis.generator/mybatis-generator-core中将pom.xml文件
复制
一份出来放到根目录下并删除部分内容;
修改坐标
,groupId或者artifactId都是可以的;1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>org.local.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.0.0</version> <name>mybatis-generator-core</name>
<properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties>
<dependencies> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>2.0.6</version> <scope>provided</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.20.0</version> <scope>provided</scope> <optional>true</optional> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> <scope>provided</scope> <optional>true</optional> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.4.5</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.10.13</version> <scope>provided</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <version>5.9.2</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.9.2</version> </dependency> <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>3.24.2</version> </dependency> <dependency> <groupId>org.hsqldb</groupId> <artifactId>hsqldb</artifactId> <version>2.7.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.github.javaparser</groupId> <artifactId>javaparser-core</artifactId> <version>3.25.0</version> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib</artifactId> <version>1.8.10</version> <scope>test</scope> </dependency> </dependencies> </project>
|
其中依赖版本从parent
获取,配置完成后移除parent,配置完成后注意执行mvn clean install
操作,将包install到仓库中
。
![image.png](https://cdn.nlark.com/yuque/0/2023/png/26851474/1680677226696-c1848363-9b46-49e1-b97b-65bfcc406b32.png#averageHue=%231d1d1d&clientId=ua437b34a-cb15-4&from=paste&height=640&id=u24653057&originHeight=1280&originWidth=818&originalType=binary&ratio=2&rotation=0&showTitle=false&size=159729&status=done&style=none&taskId=uf33bc6dd-07e6-4896-a19e-9e21c1eaa95&title=&width=409)
工程依赖自定义插件
![image.png](https://cdn.nlark.com/yuque/0/2023/png/26851474/1680677038800-627a1c6a-53b9-4cd7-b208-d6dd0d6f76c9.png#averageHue=%23181717&clientId=ua437b34a-cb15-4&from=paste&height=766&id=ubffca90c&originHeight=1532&originWidth=2056&originalType=binary&ratio=2&rotation=0&showTitle=false&size=284459&status=done&style=none&taskId=ua7e48ca5-281f-460d-969f-72a80b4d904&title=&width=1028)
依赖自定义的工程包,groupId和artifactId可以自行修改,我这里未变更,仅修改版本号
为1.0.0,执行生成代码查看效果,我这里执行无任何变化,需要注意的是一定需要修改坐标,不然可能遇到执行出现null的情况,目测是插件执行过程中验证了某些信息。
自定义插件
说了一堆前置条件,终于到了文章的重点,自定义插件逻辑实现,本篇文章主要介绍定制化Mapper.java
、实体注释优化、Service.java生成逻辑,可以参考生成更多内容,如Controller.java、Manager.java等等,生成逻辑都是相似的几乎可以CV CV CV,一个分层结构插件可能存在比较多的上下文,为了方便按照层拆分插件数量。
- JavaMapperPlugin插件:主要
定制化基础插件
功能生成的Do.java、Mapper.java文件;
- ServicePluginc插件:生成
Model.java
、Convertor.java
、Service.java
、ServiceImpl.java
文件;
添加配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <context id="default" targetRuntime="MyBatis3"> <property name="author" value="reboot"/> <property name="baseProject" value="/Users/xx/Codes/IdeaProjects/Demos/code-gen"/>
<plugin type="org.mybatis.generator.plugins.RowBoundsPlugin"/> <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/> <plugin type="org.mybatis.generator.plugins.custom.JavaMapperPlugin"/> <plugin type="org.mybatis.generator.plugins.custom.ServicePlugin"/>
<commentGenerator> <property name="suppressDate" value="true"/> <property name="suppressAllComments" value="true"/> </commentGenerator> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/code_gen?useSSL=false" userId="root" password="123456"/> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <javaModelGenerator targetPackage="com.example.codegen.domain" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="false"/> </javaModelGenerator> <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"> <property name="enableSubPackages" value="false"/> </sqlMapGenerator> <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.codegen.mapper" targetProject="src/main/java"> <property name="enableSubPackages" value="false"/> </javaClientGenerator>
<table tableName="system_users" domainObjectName="SystemUsersDo"> <property name="comment" value="系统用户"/> <generatedKey column="id" sqlStatement="Mysql" identity="true"/> </table> </context> </generatorConfiguration>
|
修改点如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <property name="author" value="reboot"/> <property name="baseProject" value="/Users/xx/Codes/IdeaProjects/Demos/code-gen"/>
<plugin type="org.mybatis.generator.plugins.custom.JavaMapperPlugin"/>
<plugin type="org.mybatis.generator.plugins.custom.ServicePlugin"/>
<table tableName="system_users" domainObjectName="SystemUsersDo"> <property name="comment" value="系统用户"/> <generatedKey column="id" sqlStatement="Mysql" identity="true"/> </table>
|
JavaMapperPlugin插件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| package org.mybatis.generator.plugins.custom;
import org.mybatis.generator.api.GeneratedJavaFile; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.PluginAdapter; import org.mybatis.generator.api.dom.DefaultJavaFormatter; import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType; import org.mybatis.generator.api.dom.java.Interface; import org.mybatis.generator.api.dom.java.JavaVisibility; import org.mybatis.generator.api.dom.java.TopLevelClass;
import java.util.ArrayList; import java.util.List;
public class JavaMapperPlugin extends PluginAdapter {
private List<String> warnings; private String tableComment; private String author; private String baseProject;
private static final String MAPPER_BASE = "/src/main/java"; private static final String MAPPER_PACKAGE = "com.example.codegen.mapper";
@Override public boolean validate(List<String> warnings) { this.warnings = warnings; return true; }
@Override public List<GeneratedJavaFile> contextGenerateAdditionalJavaFiles(IntrospectedTable introspectedTable) { tableComment = introspectedTable.getTableConfigurationProperty("comment"); author = introspectedTable.getContext().getProperty("author"); baseProject = introspectedTable.getContext().getProperty("baseProject");
List<GeneratedJavaFile> javaFiles = new ArrayList<>(); javaFiles.add(generateDoFile(introspectedTable)); javaFiles.add(generateMapperFile(introspectedTable));
return javaFiles; }
private GeneratedJavaFile generateDoFile(IntrospectedTable introspectedTable) { String fullDoName = introspectedTable.getBaseRecordType(); String doName = PluginUtils.getClassName(fullDoName);
PluginUtils.fileExistCheck(fullDoName, baseProject + MAPPER_BASE, warnings);
TopLevelClass doTopLevelClass = PluginUtils.generateEntity(introspectedTable, this.context, fullDoName, PluginUtils.classDoc(tableComment + "数据模型", doName, author)); return new GeneratedJavaFile(doTopLevelClass, baseProject + MAPPER_BASE, new DefaultJavaFormatter()); }
private GeneratedJavaFile generateMapperFile(IntrospectedTable introspectedTable) { String fullDoName = introspectedTable.getBaseRecordType(); String doName = PluginUtils.getClassName(fullDoName); String mapperName = doName + "Mapper"; String fullMapperName = MAPPER_PACKAGE + "." + mapperName; String exampleName = doName + "Example"; String fullExampleName = fullDoName + "Example";
PluginUtils.fileExistCheck(fullMapperName, baseProject + MAPPER_BASE, warnings);
Interface baseMapperInterface = new Interface(new FullyQualifiedJavaType(fullMapperName)); baseMapperInterface.addFileCommentLine(PluginUtils.fileComment()); baseMapperInterface.setVisibility(JavaVisibility.PUBLIC); baseMapperInterface.addJavaDocLine(PluginUtils.classDoc(tableComment + "Mapper", mapperName, author)); baseMapperInterface.addSuperInterface(new FullyQualifiedJavaType("BaseMapper<" + doName + "," + exampleName + ">"));
baseMapperInterface.addImportedType(new FullyQualifiedJavaType("com.example.codegen.mapper.BaseMapper")); baseMapperInterface.addImportedType(new FullyQualifiedJavaType(fullDoName)); baseMapperInterface.addImportedType(new FullyQualifiedJavaType(fullExampleName));
return new GeneratedJavaFile(baseMapperInterface, baseProject + MAPPER_BASE, new DefaultJavaFormatter()); } }
|
ServicePluginc插件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| package org.mybatis.generator.plugins.custom;
import org.mybatis.generator.api.GeneratedJavaFile; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.PluginAdapter; import org.mybatis.generator.api.dom.DefaultJavaFormatter; import org.mybatis.generator.api.dom.java.Field; import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType; import org.mybatis.generator.api.dom.java.JavaVisibility; import org.mybatis.generator.api.dom.java.TopLevelClass; import org.mybatis.generator.internal.util.JavaBeansUtil;
import java.util.ArrayList; import java.util.List;
public class ServicePlugin extends PluginAdapter {
private List<String> warnings; private String tableComment; private String author; private String baseProject;
private static final String SERVICE_BASE = "/src/main/java"; private static final String SERVICE_PACKAGE = "com.example.codegen.service"; private static final String MAPPER_PACKAGE = "com.example.codegen.mapper";
@Override public boolean validate(List<String> warnings) { this.warnings = warnings; return true; }
@Override public List<GeneratedJavaFile> contextGenerateAdditionalJavaFiles(IntrospectedTable introspectedTable) { tableComment = introspectedTable.getTableConfigurationProperty("comment"); author = introspectedTable.getContext().getProperty("author"); baseProject = introspectedTable.getContext().getProperty("baseProject");
List<GeneratedJavaFile> javaFiles = new ArrayList<>(); javaFiles.add(generateServiceFile(introspectedTable));
return javaFiles; }
private GeneratedJavaFile generateServiceFile(IntrospectedTable introspectedTable) { String fullDoName = introspectedTable.getBaseRecordType(); String doName = PluginUtils.getClassName(fullDoName); String serviceName = doName.replace("Do", "Service"); String fullServiceName = SERVICE_PACKAGE + "." + serviceName; String mapperName = doName + "Mapper"; String fullMapperName = MAPPER_PACKAGE + "." + mapperName;
PluginUtils.fileExistCheck(fullServiceName, baseProject + SERVICE_PACKAGE, warnings);
TopLevelClass serviceTopLevelClass = new TopLevelClass(fullServiceName); serviceTopLevelClass.addFileCommentLine(PluginUtils.fileComment()); serviceTopLevelClass.setVisibility(JavaVisibility.PUBLIC); serviceTopLevelClass.addJavaDocLine(PluginUtils.classDoc(tableComment + "领域服务实现", serviceName, author)); serviceTopLevelClass.addAnnotation("@Component"); Field mapperField = new Field(JavaBeansUtil.getValidPropertyName(mapperName), new FullyQualifiedJavaType(mapperName)); mapperField.setVisibility(JavaVisibility.PUBLIC); mapperField.addAnnotation("@Autowired"); serviceTopLevelClass.addField(mapperField);
serviceTopLevelClass.addImportedType("org.springframework.stereotype.Component"); serviceTopLevelClass.addImportedType("org.springframework.beans.factory.annotation.Autowired"); serviceTopLevelClass.addImportedType(fullMapperName);
return new GeneratedJavaFile(serviceTopLevelClass, baseProject + SERVICE_BASE, new DefaultJavaFormatter()); } }
|
抽取通用工具
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
| package org.mybatis.generator.plugins.custom;
import org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.dom.java.Field; import org.mybatis.generator.api.dom.java.JavaVisibility; import org.mybatis.generator.api.dom.java.TopLevelClass; import org.mybatis.generator.config.Context; import org.mybatis.generator.internal.util.JavaBeansUtil;
import java.io.File; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List;
public class PluginUtils {
public static void fileExistCheck(String fullName, String basePath, List<String> warnings) { String path = String.join(File.separator, basePath, fullName.replace(".", File.separator), ".java"); if (new File(path).exists()) { warnings.add("java file" + fullName + " already exists in " + basePath + " and will be overridden."); } }
public static String getClassName(String recordType) { return recordType.substring(recordType.lastIndexOf(".") + 1); }
public static String fileComment() { return "/* 文件头 2023 */"; }
public static String classDoc(String remark, String className, String author) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm"); StringBuilder javaDoc = new StringBuilder(); javaDoc.append("/**\n"); javaDoc.append(" * " + remark + "\n"); javaDoc.append(" *\n"); javaDoc.append(" * @author " + author + "\n"); javaDoc.append(" * @version " + className + ".java, v0.1 " + LocalDateTime.now().format(dateTimeFormatter) + " " + author + "\n"); javaDoc.append(" */"); return javaDoc.toString(); }
public static String fieldDoc(String remark) { StringBuilder fieldDoc = new StringBuilder(); fieldDoc.append("/**\n"); fieldDoc.append("\t * " + remark); fieldDoc.append("\n"); fieldDoc.append("\t */"); return fieldDoc.toString(); }
public static TopLevelClass generateEntity(IntrospectedTable introspectedTable, Context context, String fullName, String javaDoc) { TopLevelClass topLevelClass = new TopLevelClass(fullName); topLevelClass.addFileCommentLine(fileComment()); topLevelClass.setVisibility(JavaVisibility.PUBLIC); topLevelClass.addAnnotation("@Data"); topLevelClass.addImportedType("lombok.Data"); topLevelClass.addJavaDocLine(javaDoc); for (IntrospectedColumn introspectedColumn : introspectedTable.getAllColumns()) { Field field = JavaBeansUtil.getJavaBeansField(introspectedColumn, context, introspectedTable); field.addJavaDocLine(fieldDoc(introspectedColumn.getRemarks())); topLevelClass.addField(field); topLevelClass.addImportedType(field.getType()); } return topLevelClass; } }
|
验证效果
![image.png](https://cdn.nlark.com/yuque/0/2023/png/26851474/1680686024159-8eb5eb30-d4a3-46a6-bf4f-0e1b2c9ad6d6.png#averageHue=%231d1d1c&clientId=u981150c8-d087-4&from=paste&height=482&id=u86661994&originHeight=964&originWidth=814&originalType=binary&ratio=2&rotation=0&showTitle=false&size=114812&status=done&style=none&taskId=u6a8da3c6-8557-4ecc-af08-534e75500dd&title=&width=407)