目录
1.2、在generatorConfig.xml 配置文件中添加
1、实现CommentGenerator 类
1.0、添加依赖
工程中要有mybatis-generator-core这个jar包.相关pom如下:
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<!-- 注意版本.示例代码使用的是1.3.2.采用更高版本自行再实现下新加的接口即可. -->
<version>1.3.2</version>
</dependency>
1.1、实现CommentGenerator 类
自动配置添加的注释
package com.crane.spring.comment;
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.internal.util.StringUtility;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.Set;
public class MyCommentGenerator implements CommentGenerator {
private Properties properties = new Properties();
/**
* 抑制日期 默认false:不抑制
*/
private boolean suppressDate = false;
/**
* 抑制注释 默认false:不抑制
*/
private boolean suppressAllComments = false;
/**
* 显示数据库comments 默认false:不显示
*/
private boolean addRemarkComments = false;
/**
* 日期格式
*/
private SimpleDateFormat dateFormat;
public MyCommentGenerator() {
super();
dateFormat = new SimpleDateFormat("yyyy/MM/dd");
}
/**
* 读取配置文件
*
* @param properties
*/
@Override
public void addConfigurationProperties(Properties properties) {
this.properties.putAll(properties);
this.suppressDate = StringUtility.isTrue(properties.getProperty("suppressDate"));
this.suppressAllComments = StringUtility.isTrue(properties.getProperty("suppressAllComments"));
this.addRemarkComments = StringUtility.isTrue(properties.getProperty("addRemarkComments"));
String dateFormatString = properties.getProperty("dateFormat");
if (StringUtility.stringHasValue(dateFormatString)) {
this.dateFormat = new SimpleDateFormat(dateFormatString);
}
}
/**
* 日期格式化
*
* @return 格式化后的日期
*/
protected String getDateString() {
if (this.suppressDate) {
return null;
} else {
return this.dateFormat != null ? this.dateFormat.format(new Date()) : (new Date()).toString();
}
}
/**
* 创建的数据表对应的类添加的注释
*
* @param topLevelClass
* @param introspectedTable
*/
@Override
public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
if (!this.suppressAllComments) {
topLevelClass.addJavaDocLine("/**");
topLevelClass.addJavaDocLine(" * @Description 对应数据表为:" + introspectedTable.getFullyQualifiedTable());
topLevelClass.addJavaDocLine(" * @Author lihe");
topLevelClass.addJavaDocLine(" * @Version V1.0 ");
topLevelClass.addJavaDocLine(" * @Date " + this.getDateString());
topLevelClass.addJavaDocLine(" */");
}
}
/**
* <p>生成xx.java文件(model)属性的注释</p>
*
* @param field
* @param introspectedTable
* @param introspectedColumn
*/
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
if (!this.suppressAllComments) {
// 注释开始的地方
field.addJavaDocLine("/**");
String remarks = introspectedColumn.getRemarks();
field.addJavaDocLine(" * " + remarks);
// 注释结束
field.addJavaDocLine(" */");
}
}
/**
* xxxMapper接口和xxxExample类方法注解
*
* @param method
* @param introspectedTable
*/
@Override
public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
if (!this.suppressAllComments) {
method.addJavaDocLine("/**");
method.addJavaDocLine(" * " + method.getName());
List<Parameter> parameters = method.getParameters();
parameters.forEach(parameter -> method.addJavaDocLine(" * @param " + parameter.getName()));
// 如果有返回类型,添加@return
String returnType = "void";
if (!returnType.equals(method.getReturnType())) {
method.addJavaDocLine(" * @return ");
}
method.addJavaDocLine(" */");
}
}
/**
* 数据库对应实体类的Getter方法注解
*
* @param method
* @param introspectedTable
* @param introspectedColumn
*/
@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());
sb.setLength(0);
sb.append(" * @return ");
sb.append(introspectedColumn.getActualColumnName());
sb.append(" ");
sb.append(introspectedColumn.getRemarks());
method.addJavaDocLine(sb.toString());
method.addJavaDocLine(" */");
}
/**
* 数据库对应实体类的Setter方法注解
*
* @param method
* @param introspectedTable
* @param introspectedColumn
*/
@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());
Parameter param = method.getParameters().get(0);
sb.setLength(0);
sb.append(" * @param ");
sb.append(param.getName());
sb.append(" ");
sb.append(introspectedColumn.getRemarks());
method.addJavaDocLine(sb.toString());
method.addJavaDocLine(" */");
}
/**
* 生成xxMapper.XML文件的注释
*
* @param xmlElement
*/
@Override
public void addComment(XmlElement xmlElement) {
}
@Override
public void addJavaFileComment(CompilationUnit compilationUnit) {
}
@Override
public void addRootComment(XmlElement rootElement) {
}
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
}
@Override
public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) {
}
@Override
public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {
}
@Override
public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {
}
}
1.2、在generatorConfig.xml 配置文件中添加
<!--注释:课可通过type自动配置-->
<commentGenerator type="cn.edu.nwafu.ssr.community.MyCommentGenerator">
<property name="addRemarkComments" value="true"/>
</commentGenerator>
1.3、运行
1.3.1、方式1:通过java方式启动mbg
package com.crane.spring.generator;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class MBGene {
public static void main(String[] args) {
// 执行中的异常信息会保存在warnings中
List<String> warnings = new ArrayList<String>();
try {
// true:生成的文件覆盖之前的
boolean overwrite = true;
// 读取配置,构造 Configuration 对象.
// 如果不想使用配置文件的话,也可以直接来 new Configuration(),然后给相应属性赋值.
File configFile = new File("src/main/resources/mybatis-generator-config.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (InvalidConfigurationException e) {
e.printStackTrace();
} catch (XMLParserException e) {
e.printStackTrace();
}
for (String warning : warnings){
System.out.println(warning);
}
}
}
1.3.2、方式2:maven方式
将MyCommentGenerator类打包生成jar,添加到maven库中,类似如下:
<dependency>
<groupId>com.saddestmoon</groupId>
<artifactId>MyCommentGenerator</artifactId>
<version>0.1.SNAPSHOT</version>
</dependency>
mybatis-generator-maven-plugin插件添加相关依赖:
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<dependencies>
<dependency>
<groupId>com.saddestmoon</groupId>
<artifactId>MyCommentGenerator</artifactId>
<version>0.1.SNAPSHOT</version>
</dependency>
</dependencies>
</plugin>
然后工程右键,run as -->maven,填写相关参数运行mybatis generator。
1.4、生成效果
/**
* @Description 对应数据表为:userinfo
* @Author li
* @Version V1.0
* @Date 2022/02/17
*/
public class UserInfoPO implements Serializable {
/**
* 主键
*/
private Integer id;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
private static final long serialVersionUID = 1L;
/**
* 主键
* @return id 主键
*/
public Integer getId() {
return id;
}
/**
* 主键
* @param id 主键
*/
public void setId(Integer id) {
this.id = id;
}
/**
* 用户名
* @return username 用户名
*/
public String getUsername() {
return username;
}
/**
* 用户名
* @param username 用户名
*/
public void setUsername(String username) {
this.username = username == null ? null : username.trim();
}
/**
* 密码
* @return password 密码
*/
public String getPassword() {
return password;
}
/**
* 密码
* @param password 密码
*/
public void setPassword(String password) {
this.password = password == null ? null : password.trim();
}
/**
* equals
* @param that
* @return
*/
@Override
public boolean equals(Object that) {
if (this == that) {
return true;
}
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
UserInfoPO other = (UserInfoPO) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getUsername() == null ? other.getUsername() == null : this.getUsername().equals(other.getUsername()))
&& (this.getPassword() == null ? other.getPassword() == null : this.getPassword().equals(other.getPassword()));
}
/**
* hashCode
* @return
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getUsername() == null) ? 0 : getUsername().hashCode());
result = prime * result + ((getPassword() == null) ? 0 : getPassword().hashCode());
return result;
}
}
参考:mybatis-generator自定义注释生成_一头磕在键盘上-CSDN博客_mybatisgenerator生成注释