在我早期搭建我的个人博客的时候,由于当时比较空闲,所以就没有使用mybatis-generator框架来生成mybatis文件,都还是自己一个个的亲手写,这次重构的时候,就想着将它框架集成进去,但也不知道为了点儿啥,就是生成不了mysql表字段的注释。
-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
我使用的mybatis-generator框架是1.3.6版本,上面是我的generatorConfig.xml配置文件,这个配置文件是我从其他项目拷贝过来的,除了修改数据库信息以外,并没有其他改动。
平时使用的时候,我都是直接通过maven插件的方式运行的,都能正确生成javabean的字段注释,但是在这个项目运行的时候,就是生成不了,就算是将注释配置打开,生成的也都是框架本身自带的一堆英文,debug了一圈,发现它就是不走生成自定义注释的那段代码,百思不得其解(唯一不一样的地方,就在于正常的是springboot项目,而我这个是springmvc项目,诡异,,,如果后面我找到问题原因了,会再写文章做详细分析)。
在网上找了一圈,也没有发现什么好的解决方案,不过倒是看到了另外一种思路:不使用maven插件方式,自定义一个CommentGenerator,最终问题得到了解决。。。
1、自定义一个CommentGenerator;
package com.wolffy.jwcz.dao.plugin;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
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.InnerClass;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.internal.DefaultCommentGenerator;
/**
* 自定义注释生成器
* Created by SongFei on 2020/09/21.
*/
public classMyCommentGeneratorextendsDefaultCommentGenerator{
private Properties properties;
private Properties systemPro;
private boolean suppressDate;
private boolean suppressAllComments;
private String currentDateStr;
publicMyCommentGenerator(){
super();
properties = new Properties();
systemPro = System.getProperties();
suppressDate = false;
suppressAllComments = false;
currentDateStr = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date());
}
publicvoidaddFieldComment(Field field, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn){
if (suppressAllComments) {
return;
}
StringBuilder sb = new StringBuilder();
field.addJavaDocLine("/**");
sb.append(" * ");
sb.append(introspectedColumn.getRemarks());
field.addJavaDocLine(sb.toString().replace("\n", " "));
field.addJavaDocLine(" */");
}
publicvoidaddFieldComment(Field field, IntrospectedTable introspectedTable){
}
publicvoidaddGeneralMethodComment(Method method, IntrospectedTable introspectedTable){
}
publicvoidaddGetterComment(Method method, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn){
}
publicvoidaddSetterComment(Method method, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn){
}
publicvoidaddClassComment(InnerClass innerClass, IntrospectedTable introspectedTable,booleanmarkAsDoNotDelete){
}
publicvoidaddClassComment(InnerClass innerClass, IntrospectedTable introspectedTable){
}
}
2、在配置文件中引入自定义的CommentGenerator(上面的generatorConfig.xml中已经写了,这里不再重复);
3、写一个main方法,运行自定义的CommentGenerator;
package com.wolffy.jwcz.dao;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
/**
* 快速生成mybatis配置文件
* Created by SongFei on 2020/09/21.
*/
public class MybatisGenerator{
public static void main(String[] args){
MybatisGenerator generator = new MybatisGenerator();
System.out.println(System.getProperty("user.dir"));
System.out.println(generator.getClass().getResource("/").getPath());
generator.run();
}
public void run(){
try {
InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("generatorConfig.xml");
List warnings = new ArrayList<>();
ConfigurationParser parser = new ConfigurationParser(warnings);
Configuration config = parser.parseConfiguration(resourceAsStream);
DefaultShellCallback callback = new DefaultShellCallback(true);
MyBatisGenerator generator = new MyBatisGenerator(config, callback, warnings);
generator.generate(null);
for (String warning : warnings) {
System.err.println(">" + warning);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}