码农知识堂 - 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包。

  • 相关阅读:
    【原创】基于Jsp+Servlet的茶叶商城(在线商城毕业设计源代码)
    SpringCloud怎么禁用sentinel
    web开发理论测试题
    详解7道经典指针运算笔试题!
    Tailwindcss 提取组件
    java计算机毕业设计基于springboot+vue+elementUI的垃圾分类网站系统(前后端分离)
    Vue
    林沛满--快递员的工作策略——TCP窗口
    springcloud20:springcloudalibaba之Nacos
    服务金融机构数字化升级,阿里云发布一体化金融移动端平台
  • 原文地址:https://blog.csdn.net/jdcdev_/article/details/127983059
    • 最新文章
    • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
      用 Hashids 优雅解决 C 端自增 ID 暴露问题
      V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
      LLVM Pass快速入门(四):代码插桩
      milkup:桌面端 markdown AI续写和即时渲染
      基于项目工程构建SBOM(软件物料清单)的研究
      鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
      .NET 中如何快速实现 List 集合去重?
      扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
      浅谈数据访问层
    • 热门文章
    • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
      奉劝各位学弟学妹们,该打造你的技术影响力了!
      五年了,我在 CSDN 的两个一百万。
      Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
      面试官都震惊,你这网络基础可以啊!
      你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
      心情不好的时候,用 Python 画棵樱花树送给自己吧
      通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
      13 万字 C 语言从入门到精通保姆级教程2021 年版
      10行代码集2000张美女图,Python爬虫120例,再上征途
    小工具 小游戏
    Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

    京公网安备 11010502049817号