Mybatis-generator生成字段注释

    xiaoxiao2022-07-02  109

    Mybatis自动生成工具能够根据数据库表/视图等自动生成相应的bean和mapper,大大的简化了开发工作。 但默认的生成bean并没有将数据库表中的字段注释也放到生成的bean的属性上。 本文记录如何让mybatis-generator根据数据库表字段注释生成bean的属性注释。

    零.写在前边

    评论区有些朋友在使用过程中可能出现了某些类找不的问题,那我再补充一些前置操作。 1.maven项目加上插件

    <build> <finalName>目标包名</finalName> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysqlDriver.version}</version> </dependency> <dependency> <groupId>本项目groupId</groupId> <artifactId>本项目artifactId</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${basedir}/target/目标包名.jar</systemPath> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.2.5</version> </dependency> </dependencies> </plugin> </plugins> </build>

    2.按照下边的方案写好之后要记得maven install或package,生成目标jar包 3.使用maven插件mybatis-generator:generate -f pom.xml 4.【或者】推荐,使用idea的右侧maven快捷操作,直接鼠标点两下maven install和mybatis-genneator就行了。

    一.编写自定义注释生成工具

    首先我们要实现CommentGenerator这个接口,编写一个自定义注释生成工具 当然也可以继承DefaultCommentGenerator这个类,直接重写getter、setter、字段等生成注释的方法即可。

    import org.mybatis.generator.api.CommentGenerator; import org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.dom.java.*; import org.mybatis.generator.api.dom.xml.XmlElement; import org.mybatis.generator.config.MergeConstants; import org.mybatis.generator.config.PropertyRegistry; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Properties; /** * @author HelSing * @date 2019/3/18 */ public class MybatisCommentGenerator implements CommentGenerator { private Properties properties; private Properties systemPro; private boolean suppressDate; private boolean suppressAllComments; private String nowTime; public MybatisCommentGenerator() { super(); properties = new Properties(); systemPro = System.getProperties(); suppressDate = false; suppressAllComments = false; nowTime = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(new Date()); } /** * 类的注释 * @param innerClass * @param introspectedTable * @param markAsDoNotDelete */ @Override public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) { if (suppressAllComments) { return; } StringBuilder sb = new StringBuilder(); innerClass.addJavaDocLine("/**"); sb.append(" * "); sb.append(introspectedTable.getFullyQualifiedTable()); innerClass.addJavaDocLine(sb.toString().replace("\n", " ")); sb.setLength(0); sb.append(" * @author "); sb.append(systemPro.getProperty("user.name")); sb.append(" "); sb.append(nowTime); innerClass.addJavaDocLine(" */"); } @Override public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) { if (suppressAllComments) { return; } StringBuilder sb = new StringBuilder(); innerClass.addJavaDocLine("/**"); sb.append(" * "); sb.append(introspectedTable.getFullyQualifiedTable()); sb.append(" "); sb.append(getDateString()); innerClass.addJavaDocLine(sb.toString().replace("\n", " ")); innerClass.addJavaDocLine(" */"); } /** * 设置字段注释 */ @Override public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { if (suppressAllComments) { return; } StringBuilder sb = new StringBuilder(); field.addJavaDocLine("/**"); sb.append(" * "); sb.append(introspectedColumn.getRemarks() + " " + introspectedColumn.getActualColumnName()); field.addJavaDocLine(sb.toString().replace("\n", " ")); field.addJavaDocLine(" */"); } @Override public void addFieldComment(Field field, IntrospectedTable introspectedTable) { if (suppressAllComments) { return; } StringBuilder sb = new StringBuilder(); field.addJavaDocLine("/**"); sb.append(" * "); sb.append(introspectedTable.getFullyQualifiedTable()); field.addJavaDocLine(sb.toString().replace("\n", " ")); field.addJavaDocLine(" */"); } /** * 设置setter方法注释 */ @Override public void addSetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { if (suppressAllComments) { return; } method.addJavaDocLine("/**"); StringBuilder sb = new StringBuilder(); sb.append(" * "); sb.append(introspectedColumn.getRemarks()); method.addJavaDocLine(sb.toString().replace("\n", " ")); sb.setLength(0); sb.append(" * @author "); sb.append(systemPro.getProperty("user.name")); method.addJavaDocLine(sb.toString().replace("\n", " ")); sb.setLength(0); if(suppressDate){ sb.append(" * @date " + nowTime); method.addJavaDocLine(sb.toString().replace("\n", " ")); sb.setLength(0); } Parameter parm = method.getParameters().get(0); sb.append(" * @param "); sb.append(parm.getName()); sb.append(" "); sb.append(introspectedColumn.getRemarks()); method.addJavaDocLine(sb.toString().replace("\n", " ")); method.addJavaDocLine(" */"); } /** * 设置getter方法注释 */ @Override public void addGetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { if (suppressAllComments) { return; } method.addJavaDocLine("/**"); StringBuilder sb = new StringBuilder(); sb.append(" * "); sb.append(introspectedColumn.getRemarks()); method.addJavaDocLine(sb.toString().replace("\n", " ")); sb.setLength(0); sb.append(" * @author "); sb.append(systemPro.getProperty("user.name")); method.addJavaDocLine(sb.toString().replace("\n", " ")); sb.setLength(0); if(suppressDate){ sb.append(" * @date " + nowTime); method.addJavaDocLine(sb.toString().replace("\n", " ")); sb.setLength(0); } sb.append(" * @return "); sb.append(introspectedColumn.getActualColumnName()); sb.append(" "); sb.append(introspectedColumn.getRemarks()); method.addJavaDocLine(sb.toString().replace("\n", " ")); method.addJavaDocLine(" */"); } @Override public void addJavaFileComment(CompilationUnit compilationUnit) { if (suppressAllComments) { return; } return; } @Override public void addComment(XmlElement xmlElement) { return; } @Override public void addRootComment(XmlElement rootElement) { return; } @Override public void addConfigurationProperties(Properties properties) { this.properties.putAll(properties); suppressDate = Boolean.valueOf(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE)); suppressAllComments = Boolean.valueOf(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_ALL_COMMENTS)); } protected void addJavadocTag(JavaElement javaElement, boolean markAsDoNotDelete) { javaElement.addJavaDocLine(" *"); StringBuilder sb = new StringBuilder(); sb.append(" * "); sb.append(MergeConstants.NEW_ELEMENT_TAG); if (markAsDoNotDelete) { sb.append(" do_not_delete_during_merge"); } String s = getDateString(); if (s != null) { sb.append(' '); sb.append(s); } javaElement.addJavaDocLine(sb.toString()); } protected String getDateString() { String result = null; if (!suppressDate) { result = nowTime; } return result; } @Override public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) { if (suppressAllComments) { return; } StringBuilder sb = new StringBuilder(); innerEnum.addJavaDocLine("/**"); sb.append(" * "); sb.append(introspectedTable.getFullyQualifiedTable()); innerEnum.addJavaDocLine(sb.toString().replace("\n", " ")); innerEnum.addJavaDocLine(" */"); } @Override public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) { if (suppressAllComments) { return; } method.addJavaDocLine("/**"); addJavadocTag(method, false); method.addJavaDocLine(" */"); } }

    二.使用第一步编写的自定义注释生成工具

    在mybatis-generator的配置文件generatorConfig.xml中配置好自定义的注释生成工具

    <generatorConfiguration> <context id="default" targetRuntime="MyBatis3"> <!-- optional,旨在创建class时,对注释进行控制 --> <commentGenerator type="com.xxx.generator.MybatisCommentGenerator"> <!--<property name="suppressDate" value="true"/>--> <!--<property name="suppressAllComments" value="true" />--> <!-- 是否生成注释代时间戳--> <property name="suppressDate" value="true"/> </commentGenerator> </context> </generatorConfiguration>

    三.还是按照以前的生成操作执行即可

    public class Organization extends BaseBean { /** * 主键ID id */ private Integer id; /** * 父级ID pid */ private Integer pid; /** * 机构名称 name */ private String name; /** * 主键ID * @author Helsing * @date 2019-04-06 15:48:47 * @return id 主键ID */ public Integer getId() { return id; } /** * 主键ID * @author Helsing * @date 2019-04-06 15:48:47 * @param id 主键ID */ public void setId(Integer id) { this.id = id; } /** * 父级ID * @author Helsing * @date 2019-04-06 15:48:47 * @return pid 父级ID */ public Integer getPid() { return pid; } /** * 父级ID * @author Helsing * @date 2019-04-06 15:48:47 * @param pid 父级ID */ public void setPid(Integer pid) { this.pid = pid; } }

    四.参考

    Mybatis自动生成字段注释

    最新回复(0)