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
)
{
if (this.suppressAllComments
) {
return;
}
field
.addJavaDocLine("/**");
String remarks
= introspectedColumn
.getRemarks();
if ((this.addRemarkComments
) && (StringUtility
.stringHasValue(remarks
)))
{
field
.addJavaDocLine(" * Database Column Remarks:");
String
[] remarkLines
= remarks
.split(System
.getProperty("line.separator"));
for (String remarkLine
: remarkLines
) {
field
.addJavaDocLine(" * " + remarkLine
);
}
}
field
.addJavaDocLine(" *");
field
.addJavaDocLine(" * This field was generated by MyBatis Generator.");
StringBuilder sb
= new StringBuilder();
sb
.append(" * This field corresponds to the database column ");
sb
.append(introspectedTable
.getFullyQualifiedTable());
sb
.append('.');
sb
.append(introspectedColumn
.getActualColumnName());
field
.addJavaDocLine(sb
.toString());
addJavadocTag(field
, false);
field
.addJavaDocLine(" */");
}
public void addFieldComment(Field field
, IntrospectedTable introspectedTable
)
{
if (this.suppressAllComments
) {
return;
}
StringBuilder sb
= new StringBuilder();
field
.addJavaDocLine("/**");
field
.addJavaDocLine(" * This field was generated by MyBatis Generator.");
sb
.append(" * This field corresponds to the database table ");
sb
.append(introspectedTable
.getFullyQualifiedTable());
field
.addJavaDocLine(sb
.toString());
addJavadocTag(field
, false);
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、显示效果
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
;
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());
}
@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(" */");
}
@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(" */");
}
@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(" */");
}
}
四、生成目标文件(启动)