mybatis generator插件系列--注释插件 (为实体类生成数据库字段注释)

2023-10-26

我们都知道mybatis generator自动生成的注释没什么实际作用,而且还增加了代码量。如果能将注释从数据库中捞取到,不仅能很大程度上增加代码的可读性,而且减少了后期手动加注释的工作量。

1、首先定义注释生成插件

MyCommentGenerator.java 

package com.ilovey.mybatis.comment;


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;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

/**
 * mybatis generator生成注释插件
 * <p>
 * Created by huhaichao on 2017/5/15.
 */
public class MyCommentGenerator extends DefaultCommentGenerator {
    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 addFieldComment(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(" */");
    }

    public void addFieldComment(Field field, IntrospectedTable introspectedTable) {

    }

    public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {

    }

    public void addGetterComment(Method method, IntrospectedTable introspectedTable,
                                 IntrospectedColumn introspectedColumn) {

    }

    public void addSetterComment(Method method, IntrospectedTable introspectedTable,
                                 IntrospectedColumn introspectedColumn) {

    }

    public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {

    }

    public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {
    }


}

2、然后为mybatisgenerator配置插件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
    <context id="context1">
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
    
        <!-- 使用自定义的插件 -->
        <commentGenerator type="com.ilovey.mybatis.comment.MyCommentGenerator">

        </commentGenerator>


        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
         connectionURL="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF8"
         userId="root" password="123456">
        </jdbcConnection>
        
        <javaModelGenerator targetPackage="com.ilovey.biz.entity.base"
         targetProject="ilovey.biz/src/main/java"/>
        <sqlMapGenerator targetPackage="com.ilovey.biz.mapper.base"
         targetProject="ilovey.biz/src/main/resources"/>
        <javaClientGenerator targetPackage="com.ilovey.biz.mapper.base"
         targetProject="ilovey.biz/src/main/java" type="XMLMAPPER"/>
        
        <table tableName="us_user_info"  domainObjectName="UsUserInfo">
            <generatedKey column="id" sqlStatement="MySql" identity="true"/>
        </table>


    </context>
</generatorConfiguration>

 

3、生成效果

package com.ilovey.biz.entity.base;

import java.io.Serializable;
import java.util.Date;

public class UsUserInfo implements Serializable {
    /**
     * 
     */
    private Integer id;

    /**
     * 用户id
     */
    private Integer userId;

    /**
     * 昵称
     */
    private String nickName;

    /**
     * 头像
     */
    private String headImage;

    /**
     * 手机号码
     */
    private String mobile;

    /**
     * 性别(0保密,1男,2女)
     */
    private Integer sex;

    /**
     * 地区
     */
    private Integer region;

    /**
     * 个性签名
     */
    private String signature;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新时间
     */
    private Date updateTime;

    //setter 和 getter方法省略
}

这里虽然消灭看不懂的英文注释,改为友好的中文注释,但是生成的getter/setter方法仍然很长,经常还要生成toString/hashCode/Equals等方法,其实我们只需要几个属性定义了,却不得不生成几倍的代码,大家有没有因此而头痛呢?

是不是想说有什么方法可以解决吗,请参考我的接下里的文章《mybatis generator插件系列--lombok插件 (减少百分之九十bean代码)

本文所有代码及demo:https://gitee.com/chaocloud/generator-demo.git

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mybatis generator插件系列--注释插件 (为实体类生成数据库字段注释) 的相关文章

  • ReentrantReadWriteLock

    一ReentrantReadWriteLock 是Lock的另一种实现方式 我们知道ReentrantLock是一个排他锁 同一时间只允许一个线程访问 而ReentrantReadWriteLock允许多个读线程同时访问 但不允许写线程和读
  • Tcp协议中的3次握手与4次挥手过程分析

    转载https blog csdn net u012824097 article details 52490091 客户端与服务端的通信中步骤 1建立Tcp连接 3次握手 2再进行数据传输 3数据传输完成后 断开连接 4次挥手 建立Tcp连
  • Java多线程详解(线程同步)

    嗨喽 小伙伴们我来了 上一章 我们通过几个例子 点击跳转 介绍了线程安全问题 而说到线程安全就不得不提到线程同步 它是解决线程安全的一种重要方法 本章就来简单地介绍一下线程同步 从上一章的学习我们知道 当多个线程操作一个资源的时候 有可能由
  • 定时任务框架Quartz-(一)Quartz入门与Demo搭建

    一 什么是Quartz 什么是Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目 完全由Java开发 可以用来执行定时任务 类似于java util Timer 但是相较于Timer
  • @CallerSensitive

    CallerSensitive学习 代码位置 Reflection类 public class Reflection CallerSensitive public static native Class
  • Java开发:如何将model对象与json互相转换?

    model javabean 与json相互转换 文章声明 model对象与json之间互转网上有很多方法 此处只记录一种常用的 并且比较安全便捷的转换方法 使用gson 一 model转换json 1 首先创建一个model实体类 pac
  • java TreeSet 和 TreeMap 源码解读

    目录 一 前言 二 TreeSet详解 1 TreeSet简介 2 TreeSet的底层实现 0 准备工作 1 TreeSet构造器 2 匿名内部类实现接口的多态 3 TreeMap构造器 4 add方法 5 put方法和put方法 6 继
  • Java进阶--编译时注解处理器(APT)详解

    本文同步发布在掘金 未经本人允许不得转载 上篇文章 Java进阶 Java注解及其实例应用 我们使用注解 反射实现了一个仿ButterKnife功能的示例 考虑到反射是在运行时完成的 多少会影响程序性能 因此 ButterKnife本身并非
  • 【Python案例】一键自动抠图生成证件照

    0 效果与体验 不想去照相馆 担心肖像隐私被第三方获取 不会抠图 本文实现基于人工智能的一键自动抠图生成证件照 在进入正文之前 先看最终效果 为了让读者快速体验 我写了个小程序 证照工具箱 可打开直接体验 1 人脸检测 在制作证件照时 首选
  • Java进阶--Java垃圾回收机制全面解析

    本文同步发布在我的个人博客 如需转载请注明出处 提起Java的垃圾回收机制大家应该都有所了解 它不仅是面试的常客 也是Java体系中相当重要的一块知识 深入理解Java的GC机制 不仅有助于我们在开发中提高程序的性能 更有了在面试官面前炫
  • Java高并发- 锁的优化及 JVM 对锁优化所做的努力

    在高并发环境下 激烈的锁竞争会导致程序的性能下降 所以我们有必要讨论一下有关 锁 的性能问题及注意事项 如 避免死锁 减小锁粒度 锁分离等 一 锁优化 1 1 减小锁持有时间 在锁竞争过程中 单个线程对锁的持有时间与系统性能有着直接的关系
  • 会些java知识,然后要学习spring boot大概需要多长时间?

    Spring boot要学什么 要学到什么程度 以及相关的学习方法是什么 学习spring boot大概需要多长时间 每个人的学习能力 每天能花费时间来学习的时间也是不确定的 这些很难量化 但极好形容 需要学到能帮你找到一份工作的程度 任何
  • 论Java多线程如何引发OOM—多线程开发知识点

    Java ThreadLocal 如何引发 OOM Java 内存泄漏 ThreadLocal OOM 回顾ThreadLocal 强引用 软引用 弱引用 虚引用 Java 内存泄漏 内存溢出 Out Of Memory 是指应用系统中存在
  • Unsafe学习

    一 介绍 一个管理内存的类 Unsafe类是 final 的 不允许继承 且构造函数是private的 使用单列模式模式获取类对象 1 1 测试的类 public class UnsafeBean private static int st
  • Java多线程两种实现

    在java中实现多线程的方式有两种 一种是继承Thread类 另一个是实现Runnable接口 对于两种实现 各有优缺点 接下来进行对比总结一下 这两种方法 都可以实现多线程 以下为两种实现的写法 继承Thread类的方式 package
  • Kafka3.1安装配置,配置Kafka集群,Zookeeper集群

    1 下载Kafka安装包 Kafka官网下载地址 https kafka apache org downloads 2 解压压缩包 tar zxvf kafka 2 12 3 1 0 tgz c kafka 3 进入配置文件目录 cd ka
  • groovy语言单元测试(spock)

    一 spock groovy单元测试的五种情况 单元测试 given mock单测中指定mock数据 模拟入参 when 触发行为 比如调用指定方法或函数 then 做出断言表达式 expect 期望的行为 when then的精简版 si
  • 掌握了这 7 种 Spring Boot 吞吐量优化解决方案,感觉我又行了

    一 异步执行 实现方式二种 1 使用异步注解 aysnc 启动类 添加 EnableAsync注解 2 JDK 8本身有一个非常好用的Future类 CompletableFuture AllArgsConstructor public c
  • NotePad++安装HEX-Editor插件

    在菜单栏点击插件 插件管理 搜索HEX Editor并打钩 点击安装 然后重新打开notepad 会发现工具栏多了一个H的符号 此时点击H 即可以16进制的形式读取当前文件 还是没有的话建议多试几次
  • java Hashtable及其子类Properties 源码分析(通俗易懂)

    目录 一 前言 二 Hashtable详解 1 简介 2 特点 3 底层实现 4 HashMap VS Hashtable 三 Properties详解 1 简介 2 特点 3 具体使用 可以不看 四 完结撒 一 前言 大家好 本篇博文是对

随机推荐

  • libevent源码学习(4):线程锁、条件变量(二)(调试锁)

    目录 EVUTIL ASSERT宏 开启调试锁 调试锁结构 调试锁函数 debug lock alloc debug lock free debug lock lock 加锁检测 debug lock unlock 解锁检测 调试锁下的条件
  • Java intern函数详解

    先看一个例子如果你会了那这篇文章你没必要看了 如果不会那请看下去 你一定会有收获 String s new String hello String str1 s world String str3 helloworld system out
  • Linux安装sftp服务

    处理步骤 1 关闭防火墙和selinux root localhost systemctl status firewalld firewalld service firewalld dynamic firewall daemon Loade
  • PN结图示(全网都不舍得放的图片)

    这是从必应随手搜到的 PN结的图示 很直观的可以让人理解 P 和 N 在术语里的意思 而这是从国内百度搜的国人给的图示 说实话我搜了N年 愣是没找到跟图上一样的 咱也不懂为什么 PN结图示 全网都不舍得放的图片 这里会涉及到两个基本术语 正
  • scriptmanager控件使用

    今天用到scriptmanager 顺便整理一下 网络资料 一 控件概述 ScriptManager控件包括在ASP NET 2 0 AJAX Extensions中 它用来处理页面上的所有组件以及页面局部更新 生成相关的客户端代理脚本以便
  • mysql sql 除法运算_SQL语句怎么表示除法运算?

    展开全部 select case when 除数 0 then 0 else 被除数 除数 end 一 基本概念 SQL语言 是结构化查询语言 Structured Query Language 的简称 e69da5e6ba90626169
  • 线性光耦原理与电路设计[HCNR200,HCNR201]

    1 线形光耦介绍 光隔离是一种很常用的信号隔离形式 常用光耦器件及其外围电路组成 由于光耦电路简单 在数字隔离电路或数据传输电路中常常用到 如UART协议的20mA电流环 对于模拟信号 光耦因为输入输出的线形较差 并且随温度变化较大 限制了
  • python编程题

    7 1 jmu Java Python 统计一段文字中的单词个数并按单词的字母顺序排序后输出 10 分 现需要统计若干段文字 英文 中的不同单词数量 如果不同的单词数量不超过10个 则将所有单词输出 按字母顺序 否则输出前10个单词 注1
  • 【BUUCTF】Web题目 WriteUp

    Web类题目 Basic 极客大挑战 Secret File F12查看源码 发现一个网址 点击查看 进入后 发现转跳连接action php 点击后显示查阅结束 考虑使用burp抓包 直接查看secr3t php 发现flag php 但
  • 如何在 CentOS 里下载 RPM 包及其所有依赖包

    https blog csdn net linuxnews article details 53244315 方法一 利用 Downloadonly 插件下载 RPM 软件包及其所有依赖包 默认情况下 这个命令将会下载并把软件包保存到 va
  • 如何解决深度学习中的过拟合问题?

    在深度学习中 过拟合是一个常见的问题 它指的是模型在训练集上表现良好 但在测试集或新样本上表现较差的现象 过拟合的出现主要是由于模型过度拟合训练数据 过多地记住了训练集中的噪声和细节 导致模型在泛化到未见过的数据时失效 然而 我们可以采取一
  • SpringMVC和SpringBoot接收复杂集合参数,集合对象

    在SpringMVC和SpringBoot中 我们有这样一个场景 就是接受前端复杂的对象数组 或者多个数组 这是我们可以用 RequestBody注解 来解析请求体中的数据 但是值得注意的是在GET请求是不能进行该种方式的操作 因为GET请
  • Kali实现msfvenom在Windows和Linux靶机下后门漏洞

    项目场景 Kali实现msfvenom在Windows和Linux靶机下后门漏洞 情景复现 实验环境 Kali Debian 6 64位 Windows10 Centos7 环境 版本 kali Debian 6 64位 Windows w
  • 五十二.L1-063 吃鱼还是吃肉

    include
  • Qt子线程控制主界面UI控件

    在子线程里控制主界面的UI控件有两种方法 第一种是在子线程中发送信号 然后在主线程中去更新 第二种方法是在子线程中创建同样的对象 然后把主界面中控件的指针赋给创建的对象 第一种方法在此不做实例展示 在此通过一个简单的例子展示第二种方法 下面
  • qt操作文件进行读写操作

    一 加上头文件 include
  • electron自动更新版本electron-updater

    首先来看效果图 打包electron生成新的exe安装包 npm run dist 使用simplehttpserver开启存放打包好的exe安装包与yml文件的本地服务 打包目录里有这两个文件 安装simplehttpserver npm
  • springboot maven配置log4j以及Idea控制台根据等级配置颜色

    目录 效果 pom依赖 log4j properties LoggerUtil CCPRestSDK class 测试 console颜色 效果 废话不多说 直接放代码 pom依赖
  • Eclipse安装中文简体语言包(官方下载安装教程)

    目录 方法一 1 下载中文语言包 2 将文件下载后 解压 方法二 获得最新语言包网址 点击获得 配置JAVA HOME方法 一些历史版本的语言包网址 补充2021 3 7 语言包官方下载链接汇总 浏览器打开 长期有效 更新2021 3 4
  • mybatis generator插件系列--注释插件 (为实体类生成数据库字段注释)

    我们都知道mybatis generator自动生成的注释没什么实际作用 而且还增加了代码量 如果能将注释从数据库中捞取到 不仅能很大程度上增加代码的可读性 而且减少了后期手动加注释的工作量 1 首先定义注释生成插件 MyCommentGe