码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 把Mybatis Generator生成的代码加上想要的注释


    作者:王建乐

    1 前言

    在日常开发工作中,我们经常用Mybatis Generator根据表结构生成对应的实体类和Mapper文件。但是Mybatis Generator默认生成的代码中,注释并不是我们想要的,所以一般在Generator配置文件中,会设置不自动生成注释。带来的问题就是自动生成代码之后,我们还要自己去类文件中把注释加上,如果生成的类较少还好,如果有生成很多类文件,自己加注释是一件繁琐的工作。

    通过重写Mybatis Generator的CommentGenerator接口,可以方便地生成自己想要的注释,减少重复工作。

    2 使用Java方式执行Mybatis Generator

    2.1 IDEA中新建Maven项目

    pom.xml中引入jar包

    
    
        4.0.0
    
        org.example
        MyGenerator
        1.0-SNAPSHOT
    
        
            8
            8
        
    
        
            
                mysql
                mysql-connector-java
                8.0.16
            
            
                org.mybatis.generator
                mybatis-generator-core
                1.3.7
            
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    2.2 创建generatorConfig.xml

    随便找个目录放,我放在src/main/resources目录下

    
    
    
        
            
            
            
            
            
            
            
                
            
            
            
                
                
            
            
            
                
            
            
            
                
            
            
            
                
            
            
            
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    2.3 创建main方法,运行Generator
    public class Generator {
    
        public static void main(String[] args) throws Exception {
            List warnings = new ArrayList<>(2);
            ConfigurationParser cp = new ConfigurationParser(warnings);
    
            File configFile = new File("src/main/resources/generatorConfig.xml");
            Configuration config = cp.parseConfiguration(configFile);
    
            DefaultShellCallback callback = new DefaultShellCallback(true);
    
            MyBatisGenerator = new MyBatisGenerator(config, callback, warnings);
            myBatisGenerator.generate(null);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    运行main方法,生成默认注释如下,并不是我们想要的注释,所以一般会配置为注释不生成:

    在这里插入图片描述

    2.4 实现CommentGenerator接口

    重写以下方法,自定义注释

    public class MySQLCommentGenerator implements CommentGenerator {
        private final Properties properties;
        public MySQLCommentGenerator() {
            properties = new Properties();
        }
        @Override
        public void addConfigurationProperties(Properties properties) {
            // 获取自定义的 properties
            this.properties.putAll(properties);
        }
        /**
         * 重写给实体类加的注释
         */
        @Override
        public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
            String author = properties.getProperty("author");
            String dateFormat = properties.getProperty("dateFormat", "yyyy-MM-dd");
            SimpleDateFormat dateFormatter = new SimpleDateFormat(dateFormat);
            // 获取表注释
            String remarks = introspectedTable.getRemarks();
            topLevelClass.addJavaDocLine("/**");
            topLevelClass.addJavaDocLine(" * " + remarks);
            topLevelClass.addJavaDocLine(" *");
            topLevelClass.addJavaDocLine(" * @author " + author);
            topLevelClass.addJavaDocLine(" * @date   " + dateFormatter.format(new Date()));
            topLevelClass.addJavaDocLine(" */");
        }
        /**
         * 重写给实体类字段加的注释
         */
        @Override
        public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
            // 获取列注释
            String remarks = introspectedColumn.getRemarks();
            field.addJavaDocLine("/**");
            field.addJavaDocLine(" * " + remarks);
            field.addJavaDocLine(" */");
        }
        /**
         * 重写给实体类get方法加的注释
         */
        @Override
        public void addGetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
            // 获取表注释
            String remarks = introspectedColumn.getRemarks();
            method.addJavaDocLine("/**");
            method.addJavaDocLine(" * " + method.getName());
            method.addJavaDocLine(" */");
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    2.5 修改generatorConfig.xml配置

    将generatorConfig.xml文件中的commentGenerator做如下修改,type属性选择自己的实现类

    
        
        
    
    
    • 1
    • 2
    • 3
    • 4

    运行main方法,生成注释如下:

    在这里插入图片描述

    3 使用Maven方式执行Mybatis Generator

    Pom.xml文件中增加以下配置,需要引入generator插件时,依赖实现CommentGenerator接口的jar包,要先把自己的jar包install到本地仓库。

    否则会报com.generator.MySQLCommentGenerator找不到,其他配置同上。

    
        compile
        
            
                org.mybatis.generator
                mybatis-generator-maven-plugin
                1.4.0
                
                    src/main/resources/generatorConfig.xml
                    true
                    true
                
                
                    
                    
                        mysql
                        mysql-connector-java
                        8.0.16
                    
                    
                    
                        org.example
                        MyGenerator
                        1.0-SNAPSHOT
                    
                
            
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    4 源码分析

    查看执行Mybatis Generator的main方法,主要分为两部分,解析指定的配置文件与调用生成java文件和Mapper文件的方法

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T73pImTv-1669100514285)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/160df2ea4d98419fb661b1023219ce81~tplv-k3u1fbpfcp-zoom-1.image)]

    4.1 解析指定的xml配置文件

    跟踪解析xml文件的方法cp.parseConfiguration(configFile)发现,底层以Document形式读取xml文件,根据标签名解析各标签属性,保存到Configuration实例中。

    在这里插入图片描述

    其中解析commentGenerator标签的方法parseCommentGenerator(context, childNode)中,会获取commentGenerator标签的type属性值,也就是自定义的”com.generator.MySQLCommentGenerator”类,放到Context实例中。
    在这里插入图片描述

    4.2 调用生成java文件和Mapper文件的方法

    xml配置文件解析完成,得到Configuration实例,后面生成文件的工作都会从Configuration实例中获取所需数据。生成文件的方法主要步骤为:1.连接数据库,查询表信息与列信息,2.生成文件内容,3.写入生成文件。

    其中生成文件内容时,会根据Context的type属性反射创建MySQLCommentGenerator实例,然后调用自定义的生成注释方法。

    如:生成实体类文件的注释,调用addModelClassComment方法

    在这里插入图片描述

    生成字段注释,调用addFieldComment方法

    在这里插入图片描述

    生成Get方法注释,调用addGetterComment方法

    在这里插入图片描述

    在调用addModelClassComment,addFieldComment,addGetterComment等生成注释的方法时,执行的都是MySQLCommentGenerator类的方法,这样就实现了生成自定义注释的功能。

    5 总结

    通过使用自定义实现CommentGenerator接口,让自动生成的代码加上我们想要的注释,可以省去自己加注释的麻烦。

    与一般使用Mybatis Generator生成代码的方式一样,多实现个接口即可。
    使用Maven方式运行时,需要在pom.xml引入插件时,依赖自己jar包。

  • 相关阅读:
    SaaS企业如何构建与自身增长目标相匹配的市场力?
    开源存储这么香,为何我们还要坚持自研?
    勒索病毒趋势分析
    Jeston ros1 环境下 编译RealSense SDK
    数据库DQL数据查询语言
    Azure DevOps 中 Dapr项目自动部署流程实践
    常用电子元器件基础知识
    超高速PCIe实时运动控制卡与应用方案将亮相深圳NEPCON,正运动技术邀您前来体验!
    19.spring beanfactory与applicationcontext
    电机应用-控制系统、PID
  • 原文地址:https://blog.csdn.net/jdcdev_/article/details/127983059
    • 最新文章
    • 攻防演习之三天拿下官网站群
      数据安全治理学习——前期安全规划和安全管理体系建设
      企业安全 | 企业内一次钓鱼演练准备过程
      内网渗透测试 | Kerberos协议及其部分攻击手法
      0day的产生 | 不懂代码的"代码审计"
      安装scrcpy-client模块av模块异常,环境问题解决方案
      leetcode hot100【LeetCode 279. 完全平方数】java实现
      OpenWrt下安装Mosquitto
      AnatoMask论文汇总
      【AI日记】24.11.01 LangChain、openai api和github copilot
    • 热门文章
    • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
      奉劝各位学弟学妹们,该打造你的技术影响力了!
      五年了,我在 CSDN 的两个一百万。
      Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
      面试官都震惊,你这网络基础可以啊!
      你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
      心情不好的时候,用 Python 画棵樱花树送给自己吧
      通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
      13 万字 C 语言从入门到精通保姆级教程2021 年版
      10行代码集2000张美女图,Python爬虫120例,再上征途
    Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
    正则表达式工具 cron表达式工具 密码生成工具

    京公网安备 11010502049817号