广告
返回顶部
首页 > 资讯 > 后端开发 > Python >mybatis-generator如何自定义注释生成
  • 427
分享到

mybatis-generator如何自定义注释生成

2024-04-02 19:04:59 427人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录前言正文1.实现CommentGenerator接口2.配置generator.xml3.运行方法1. java方式(个人推荐)方法2. Maven方式4.可能出现的问题4.1

前言

本文写于2016.2,是基于mybatis-generator 1.3.2版本来完成的.

目前正式版的mybatis-generator已更新至1.3.5版本,本文同样适用于1.3.3~1.3.5,不过CommentGenerator接口中新增一些方法需要额外实现,这点在使用本文提供的代码示例时需要注意下,毕竟本文是实现的1.3.2的接口.

理论上以后mybatis-generator即便是再有更新,只要接口不变架构不变,那么本文依旧适用,毕竟原理是一样的.

需要注意的是,从1.3.3版本开始在commentGenerator标签下新增了addRemarkComments属性(详情请见commentGenerator),某种程度下可替代本文的一些功能,可以先试下效果再来决定是否来自己实现注释生成.

-- 2016.08.27

完善了一些细节.对4.1出现的问题补充了新的解决方案.感谢评论区@Armeng 的提示.

-- 2016.09.28

之前第三步提供的运行方法只有maven方式,而java方式的放在了4.1中,对很多读者造成了不便,主要对此进行了调整(调整后3.1为java方式、3.2为maven方式),顺带完善了下java方式运行的示例代码.

-- 2018.12.26

正文

mybatis-generator 自动生成的代码注释是很反人类的,通常我们在使用的时候都是按照如下设置关闭注释:


<commentGenerator>
 <!--  关闭自动生成的注释  -->
 <property name="suppressAllComments" value="true" />
</commentGenerator>

不过在mybatis-generator官方文档中commentGenerator一节中有这么一段说明:

The default implementation is org.mybatis.generator.internal.DefaultCommentGenerator. The default implementation is designed for extensibility if you only want to modify certain behaviors.

既然是可扩展的,那么该如何做呢?文档中也有说明,只需要实现 org.mybatis.generator.api.CommentGenerator接口,同时有一个public的构造函数,然后为commentGenerator添加属性type,并将其值设置为实现类的全路径即可.

好吧,文档里面是这么说明的,来看看具体怎么做吧.

事先声明我用的是Eclipse+Maven来构建的.

1.实现CommentGenerator接口

当然首先你的工程中要有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>

正文,实现CommentGenerator接口,当然继承默认的实现DefaultCommentGenerator也行.然后实现或者是重写自己需要的方法.过程中最好是参照着DefaultCommentGenerator里面的代码来做.

没什么要多说的,下文是我的实现.


import static org.mybatis.generator.internal.util.StringUtility.isTrue;
import java.text.SimpleDateFORMat;
import java.util.Date;
import java.util.Properties;
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.CompilationUnit;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.InnerClass;
import org.mybatis.generator.api.dom.java.InnerEnum;
import org.mybatis.generator.api.dom.java.JavaElement;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.Parameter;
import org.mybatis.generator.api.dom.xml.XmlElement;
import org.mybatis.generator.config.MergeConstants;
import org.mybatis.generator.config.PropertyReGIStry;

public class MyCommentGenerator implements CommentGenerator {
private Properties properties;
private Properties systemPro;
private boolean suppressDate;
private boolean suppressAllComments;
private String currentDateStr;
public MyCommentGenerator() {
	super();
	properties = new Properties();
	systemPro = System.getProperties();
	suppressDate = false;
	suppressAllComments = false;
	currentDateStr = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date());
}
public void addJavaFileComment(CompilationUnit compilationUnit) {
	// add no file level comments by default
	return;
}

public void addComment(XmlElement xmlElement) {
	return;
}
public void addRootComment(XmlElement rootElement) {
	// add no document level comments by default
	return;
}
public void addConfigurationProperties(Properties properties) {
	this.properties.putAll(properties);
	suppressDate = isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE));
	suppressAllComments = isTrue(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 = currentDateStr;
	}
	return result;
}
public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {
	if (suppressAllComments) {
		return;
	}
	StringBuilder sb = new StringBuilder();
	innerClass.addJavaDocLine("");
}
public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) {
	if (suppressAllComments) {
		return;
	}
	
	StringBuilder sb = new StringBuilder();
	
	innerEnum.addJavaDocLine("");
}
public void addFieldComment(Field field, IntrospectedTable introspectedTable,
		IntrospectedColumn introspectedColumn) {
	if (suppressAllComments) {
		return;
	}
	StringBuilder sb = new StringBuilder();
	field.addJavaDocLine("");
}
public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
	if (suppressAllComments) {
		return;
	}
	
	StringBuilder sb = new StringBuilder();
	
	field.addJavaDocLine("");
}
public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
	if (suppressAllComments) {
		return;
	}
	//		method.addJavaDocLine("");
}
public void addGetterComment(Method method, IntrospectedTable introspectedTable,
		IntrospectedColumn introspectedColumn) {
	if (suppressAllComments) {
		return;
	}
	method.addJavaDocLine("");
}
public void addSetterComment(Method method, IntrospectedTable introspectedTable,
		IntrospectedColumn introspectedColumn) {
	if (suppressAllComments) {
		return;
	}
	method.addJavaDocLine("");
}
public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {
	if (suppressAllComments) {
		return;
	}
	StringBuilder sb = new StringBuilder();
	innerClass.addJavaDocLine("");
}

2.配置generator.xml

按照如下配置即可,注意type的值为 MyCommentGenerator类的全路径.


<commentGenerator type="MyCommentGenerator">
</commentGenerator>

3.运行

MBG(注: 即 MyBatis Generator 的英文缩写)支持多种方式运行,本文只罗列两种(java方式及maven方式)

如果需要以命令行或其他方式运行参照官网文档:

方法1. java方式(个人推荐)

直接以main方法运行,主要是省事不易出错.代码如下:


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("generatorConfig.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);
    }
}

方法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.

最后自动生成的代码应该是类似如下:


 
private String fileCd;

public String getFileCd() {
    return fileCd;
}

public void setFileCd(String fileCd) {
    this.fileCd = fileCd;
}

4.可能出现的问题

大多数情况下,到第三步就算是结束了.下面的,都是踩的坑.

4.1 提示找不到MyCommentGenerator

这个一般是使用Maven命令运行MBG时才会出现的错误.

原因是mybatis-generator-core与MyCommentGenerator不在同一个ClassPath下,解决方法如下:

参照第3.2,一定要打包生成jar,然后在pom文件mybatis-generator-maven-plugin插件中添加相关依赖.

使用Java方式(参照3.1)运行MBG可以避免该问题,也不用打包成jar:

4.2 获取不到字段注释

没错,就是introspectedColumn.getRemarks()获取不到字段的注释,生成的javabean里面应该显示字段注释的地方显示的是null.

配置文件中我们对<jdbcConnection>做如下修改即可:


<jdbcConnection driverClass="${driver}"
 connectionURL="{url}" userId="${username}" passWord="${password}">
 <!-- 针对oracle数据库 -->
 <property name="remarksReporting" value="true"></property>
 <!-- 针对Mysql数据库 -->
    <property name="useInformationSchema" value="true"></property>
</jdbcConnection>

问题解决

关于此问题的详细解决思路,参见另一篇文章 Mybatis Generator 获取不到字段注释.如果你用的不是Oracle或mysql,那么最好看下.

4.3生成的javabean中字段注释中文乱码

这个需要手动设置生成文件的编码.

在官方文档<context>一节中<Property >有相关说明,如下.

javaFileEncoding Use this property to specify an encoding to use when working with Java files. Newly generated Java files will be written to the file system in this encoding, and existing Java files will be read with this encoding when performing a merge. If not specified, then the platform default encoding will be used.

所以在配置文件<context>中添加如下子元素即可:


<property name="javaFileEncoding" value="UTF-8"/>

注意:<context>下的子元素是必须按照规定顺序来的,否则运行会报错!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: mybatis-generator如何自定义注释生成

本文链接: https://www.lsjlt.com/news/135064.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mybatis-generator如何自定义注释生成
    目录前言正文1.实现CommentGenerator接口2.配置generator.xml3.运行方法1. java方式(个人推荐)方法2. maven方式4.可能出现的问题4.1 ...
    99+
    2022-11-12
  • mybatis代码生成+自定义注解+自定义注释实例
    目录mybatis代码生成配置文件配置类自定义的lombok注解配置代码注释配置mybatis代码生成 <!--mybatis的包和反向生成的包__用来生成...
    99+
    2022-11-12
  • Mybatis-Generator扩展自定义的生成
    Mybatis-Generator 可自动生成Model、Dao、Mapper代码,但其自带生成的代码存在以下问题:生成的注释不是我们想要的,我们期望的是根据数据库表、字段生成不同的注释;分页代码生成缺失,...
    99+
    2022-10-18
  • 什么是Mybatis-Generator扩展自定义生成
    这篇文章给大家介绍什么是Mybatis-Generator扩展自定义生成,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Mybatis-Generator 可自动生成Model、Dao、...
    99+
    2022-10-18
  • 代码演示Mybatis-Generator 扩展自定义生成
    生成的注释不是我们想要的,我们期望的是根据数据库表、字段生成不同的注释; 分页代码生成缺失,每个公司的分页方式不同,尤其是老久项目或已发布API,不能随意变动,那么如何自适应分页代码生成; Mapper.xml没有group by相关代码...
    99+
    2020-05-21
    代码演示Mybatis-Generator 扩展自定义生成
  • 如何解决mybatis-generator生成器添加类注释方法无效的问题
    本篇内容主要讲解“如何解决mybatis-generator生成器添加类注释方法无效的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决mybatis-generator生成器添加类注释...
    99+
    2023-06-20
  • 解决mybatis-generator生成器添加类注释方法无效的问题
    遇到的问题! 注:自定义CommentGenerator的都知道 通过实现CommentGenerator接口的一些不足,毕竟只是实现了CommentGenerator接口,在里面的...
    99+
    2022-11-12
  • 使用MyBatis-Generator如何自动生成映射文件
    目录MyBatis-Generator自动生成映射文件1、使用cmd命令方式生成2、使用maven方式生成3、如果开发工具为eclipse自动生成MyBatis映射文件工具问题MyB...
    99+
    2022-11-13
  • SSM框架如何通过mybatis-generator自动生成代码
    这篇文章主要为大家展示了“SSM框架如何通过mybatis-generator自动生成代码”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SSM框架如何通过mybatis-generator自动生...
    99+
    2023-05-30
    mybatis generator ssm
  • 第十四章:mybatis-plus 自定义ID生成策略
    在mybatis-plus中ID生成策略主要是注解@TableId(type=IdType,XXXX)来生成,主要有以下类别 public enum IdType { AUTO(0), //数据库 ID 自增 NONE(1), //无状态,...
    99+
    2023-09-01
    mybatis java mysql
  • Android Studio如何生成函数注释
    这篇文章主要介绍Android Studio如何生成函数注释,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Android Studio生成函数注释的实现方法1、函数名上输入---> /**,然后回车,即自动生成...
    99+
    2023-05-30
    android studio 函数
  • MyBatis-Plus如何自定义SQL
    这篇文章主要为大家展示了“MyBatis-Plus如何自定义SQL”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MyBatis-Plus如何自定义SQL”这篇文章吧。一、在src/main/re...
    99+
    2023-06-29
  • 如何读取php注释生成文档
    要读取PHP注释并生成文档,可以使用PHP文档生成工具,如phpDocumentor或ApiGen。以下是使用phpDocument...
    99+
    2023-10-25
    php
  • 使用代码生成器自定义Entity的部分注解
    目录代码生成器自定义Entity部分注解前因查找了我的代码生成器那个配置类随后在templates/entity.java.ftl里还有一点代码生成器最新版配置方案代码生成器自定义E...
    99+
    2022-11-13
  • 如何使用代码生成器自定义Entity
    今天小编给大家分享一下如何使用代码生成器自定义Entity的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。代码生成器自定义En...
    99+
    2023-06-30
  • MyBatis如何自定义映射resultMap
    这篇文章主要讲解了“MyBatis如何自定义映射resultMap”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MyBatis如何自定义映射resultMap”吧!1 准备工作1.1 建表t...
    99+
    2023-07-05
  • Mybatis如何自动生成sql语句
    目录Mybatis自动生成sql语句Mybatis的动态sql语句if标签的使用where标签的使用foreach标签的使用sql语句的简化编写Mybatis自动生成sql...
    99+
    2022-11-12
  • Vue结合原生js如何实现自定义组件自动生成
    这篇文章主要介绍Vue结合原生js如何实现自定义组件自动生成,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!就目前三大前端主流数据驱动框架(vue,ng,react)而言,均具有创建自...
    99+
    2022-10-19
  • 如何利用Mybatis-Plus自动生成代码(超详细注解)
    如何利用Mybatis-Plus自动生成代码(超详细注解) 1、简介2、代码生成器3、详细使用教程3.1 两个mysql数据库:3.2 创建springboot项目3.3 添加依赖3.5 编辑...
    99+
    2023-08-31
    mybatis java mysql 数据库
  • 微信、支付宝,收款二维码实时生成,自定义金额 备注生成
    <font size='6px'>微信 支付宝 个人收款二维码实时生成</font>微信 支付宝-二维码生成,监控系统软件实现流程:     app通过实现,对外提供we...
    99+
    2023-06-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作