Mybatis-generator反转生成(配置+注释 ORACLE)

it2024-12-17  34

Mybatis-generator反转生成(配置+注释)

前言一、generator配置文件二、引入依赖三、添加注释1、更改源生的方法2、显示效果3、完整的文件 四、生成目标文件(启动)


前言

提示:使用场景 IDEA + ORACLE + SSM


一、generator配置文件

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "> <generatorConfiguration> <!-- 数据库jar包是本地的 --> <classPathEntry location="D:\MavenRepository\repository1.0\com\oracle\ojdbc6\11.2.0.3\ojdbc6-11.2.0.3.jar" /> <context id="context1" > <!-- 是否 去除/阻止 自动生成的注释 --> <commentGenerator> <property name="suppressAllComments" value="true" /> <property name="suppressDate" value="true" /> </commentGenerator> <!--生成toString --> <plugin type="org.mybatis.generator.plugins.ToStringPlugin" /> <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal --> <!-- <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver>--> <!--连接数据库 --> <jdbcConnection connectionURL="jdbc:oracle:thin:@//10.83.163.116:1521/esales" driverClass="oracle.jdbc.driver.OracleDriver" password="" userId="" /> <!--生成文件的时候注意生成的路径问题--> <!-- 生成模型的包名和位置 --> <javaModelGenerator targetPackage="com.xxx.dbpojo" targetProject="xxxx"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false"/> <!-- 从数据库返回的值被清理前后的空格 --> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- 生成映射文件的包名和位置--> <sqlMapGenerator targetPackage="mybatis" targetProject="xxxx" /> <!-- 生成DAO的包名和位置--> <javaClientGenerator targetPackage="com.xxx.dao" targetProject="xxxx" type="XMLMAPPER" /> <!-- 1,schema:数据库的schema; 2,catalog:数据库的catalog; 3,alias:为数据表设置的别名,如果设置了alias,那么生成的所有的SELECT SQL语句中,列名会变成:alias_actualColumnName 4,domainObjectName:生成的domain类的名字,如果不设置,直接使用表名作为domain类的名字;可以设置为somepck.domainName,那么会自动把domainName类再放到somepck包里面; 5,enableInsert(默认true):指定是否生成insert语句; 6,enableSelectByPrimaryKey(默认true):指定是否生成按照主键查询对象的语句(就是getById或get); 7,enableSelectByExample(默认true):MyBatis3Simple为false,指定是否生成动态查询语句; 8,enableUpdateByPrimaryKey(默认true):指定是否生成按照主键修改对象的语句(即update)9,enableDeleteByPrimaryKey(默认true):指定是否生成按照主键删除对象的语句(即delete); 10,enableDeleteByExample(默认true):MyBatis3Simple为false,指定是否生成动态删除语句; 11,enableCountByExample(默认true):MyBatis3Simple为false,指定是否生成动态查询总条数语句(用于分页的总条数查询); 12,enableUpdateByExample(默认true):MyBatis3Simple为false,指定是否生成动态修改语句(只修改对象中不为空的属性); 13,modelType:参考context元素的defaultModelType,相当于覆盖; 14,delimitIdentifiers:参考tableName的解释,注意,默认的delimitIdentifiers是双引号,如果类似MYSQL这样的数据库,使用的是`(反引号,那么还需要设置context的beginningDelimiter和endingDelimiter属性) 15,delimitAllColumns:设置是否所有生成的SQL中的列名都使用标识符引起来。默认为false,delimitIdentifiers参考context的属性 16,useActualColumnNames 如果设置为true,生成的model类会直接使用column本身的名字,而不会再使用驼峰命名方法, 比如BORN_DATE,生成的属性名字就是BORN_DATE,而不会是bornDate --> <table schema="ESALES" tableName="AZCL_FILE_COMMON" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> </context> </generatorConfiguration>

二、引入依赖

<groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.7</version> <configuration> <verbose>true</verbose> <overwrite>true</overwrite> <configurationFile>generatorConfig1.xml</configurationFile> </configuration> <dependencies> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>4.0.3</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.7</version> </dependency> </dependencies> </plugin>

三、添加注释

1、更改源生的方法

文件目录: *D:\MavenRepository\repository1.0\org\mybatis\generator\mybatis-generator-core\1.3.7\mybatis-generator-core-1.3.7.jar\org\mybatis\generator\internal*

这个自己来做的话涉及到反编译,可以用jd_gui直接保存到本地java类型更改,然后再编译

配置中的控制字段 : suppressAllComments

源生:

public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) /* */ { /* 276 */ if (this.suppressAllComments) { /* 277 */ return; /* */ } /* 280 */ field.addJavaDocLine("/**"); /* */ /* 282 */ String remarks = introspectedColumn.getRemarks(); /* 283 */ if ((this.addRemarkComments) && (StringUtility.stringHasValue(remarks))) /* */ { /* 284 */ field.addJavaDocLine(" * Database Column Remarks:"); /* 285 */ String[] remarkLines = remarks.split(System.getProperty("line.separator")); /* 286 */ for (String remarkLine : remarkLines) { /* 287 */ field.addJavaDocLine(" * " + remarkLine); /* */ } /* */ } /* 291 */ field.addJavaDocLine(" *"); /* 292 */ field /* 293 */ .addJavaDocLine(" * This field was generated by MyBatis Generator."); /* */ /* 295 */ StringBuilder sb = new StringBuilder(); /* 296 */ sb.append(" * This field corresponds to the database column "); /* 297 */ sb.append(introspectedTable.getFullyQualifiedTable()); /* 298 */ sb.append('.'); /* 299 */ sb.append(introspectedColumn.getActualColumnName()); /* 300 */ field.addJavaDocLine(sb.toString()); /* */ /* 302 */ addJavadocTag(field, false); /* */ /* 304 */ field.addJavaDocLine(" */"); /* */ } /* */ /* */ public void addFieldComment(Field field, IntrospectedTable introspectedTable) /* */ { /* 309 */ if (this.suppressAllComments) { /* 310 */ return; /* */ } /* 313 */ StringBuilder sb = new StringBuilder(); /* */ /* 315 */ field.addJavaDocLine("/**"); /* 316 */ field /* 317 */ .addJavaDocLine(" * This field was generated by MyBatis Generator."); /* */ /* 319 */ sb.append(" * This field corresponds to the database table "); /* 320 */ sb.append(introspectedTable.getFullyQualifiedTable()); /* 321 */ field.addJavaDocLine(sb.toString()); /* */ /* 323 */ addJavadocTag(field, false); /* */ /* 325 */ field.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(" */"); }

2、显示效果

/** * 父级ID pid */ private Integer id;

3、完整的文件

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(" */"); } }

四、生成目标文件(启动)

最新回复(0)