Maven插件mybatis-generator,如何让生成的PO类的field上有对应表字段的注释
前言
去年刚入职的时候,我就发现,po类(和数据库表对应的类)上,一片都是光秃秃的,什么注释都没有,类上没注释,field上也没注释。
在以前的项目中,其实我们都是有生成注释的,比如,对于下面这个表:
CREATE TABLE `t_user_info` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(100) DEFAULT NULL COMMENT '名字',
`email` varchar(128) DEFAULT NULL COMMENT '邮箱',
`create_time` datetime NOT NULL COMMENT '创建时间',
`modify_time` datetime NOT NULL COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
我们希望看到的po长这样,字段上有注释:
public class UserInfo {
/**
* 主键
*/
private Integer id;
/**
* 名字
*/
private String name;
...
}
我在前东家的时候,是有一个单独的mybatis-generator的工程,也是当年在网上瞎找着的,直接运行main类即可,就可以生成待注释的po,但原理了解不多,就是用用。
https://github.com/cctvckl/customed-mybatis-generator
来了现在公司,发现使用方式有点不一样。
它是直接在业务工程的pom里,加了这个mybatis-generator插件的配置,而且,这个mybatis-generator插件还有个dependencies,里面配置了两个依赖项:一个mysql,一个公司内部的依赖:
运行的话,是这个项目下面有个脚本,脚本最终执行:
mvn -Dmybatis.generator.overwrite=true
-Dmybatis.generator.configurationFile=./src/main/resources/mybatis/genCommonDb.xml mybatis-generator:generate -X
而mvn命令里的mybatis-generator的配置文件,大概长这样,可以看到,这里面的元素,配置的都是公司内部包名的class:
综上吧,刚到新公司报到,各种工作的事情也还不熟悉,看到这个又是不太懂的运行方式,而且还有一堆公司内部包名的plugin,这玩意也看不太懂,当时也就放下了。如今,过了一年多了,又要开始一个新项目,目前完成了表设计,建了一堆表,正是要用mybatis-generator来生成po等class的时候,这次就决定研究下这块。
maven的简要类加载机制
说说Maven框架和插件的契约,之前这篇公众号文章简单介绍了,刚看了下,文末留了个课后题,好像还是没写透。本篇也没打算写这块。
不过可以大概说下。
我们下载下来一个maven工具,其代码分布在两处,boot目录和lib目录
这两个是maven的核心代码,boot下的jar,由系统类加载器进行加载(AppClassloader),而去哪里加载maven核心代码呢,其实是有个配置文件。
maven就是根据这个配置文件,才知道自己的核心类在lib下的*.jar中,这么做,应该是为了保持扩展性和灵活性吧。
上面还写了main类是org.apache.maven.cli.MavenCli,这就是定义一个入口。于是,接下来转到org.apache.maven.cli.MavenCli开始执行。
org.apache.maven.cli.MavenCli执行过程,会按照pom.xml文件,开始整个生命周期,这个生命周期中的每个阶段的具体动作,都是由插件来实现的。
插件的jar包在哪里找呢?其实就是去本地maven仓库找。
大家看下面这个图,是在调试maven的source插件时候,查看插件的类加载器的截图:
可以看得到的是,这个类加载器,是专门去加载maven插件的依赖jar的,是去哪里找这个插件的依赖jar呢,从上图看到,是去本地的maven仓库找的。
如何调试maven插件的代码
我们现在知道了,maven找插件的jar的时候,是去本地仓库找。jar包里只有class,idea里如果没有对应的源码,就只有反编译后的代码,debug起来,可能不是很方便。
如果希望debug快乐一点,就要去找到对应的插件的源码工程,导入到idea里。
这里,以官方插件maven-source举例,这个插件是生成一个源码包,我们看看如何调试,了解一下这个插件是如何实现的。
如果我们想调试:某个project下的pom.xml,在这个pom.xml上执行mvn source:jar。
新建debug configuration
回头运行这个,就可以触发类似下面的一个命令:
这个命令最终也就是执行mvn source:jar,我们预期是,在执行这个的时候,会停在 source插件的代码里。
网上下载插件源码并导入idea
有人可能说,我不知道插件的坐标,如版本等,别急,下面就是,可以看到,是3.0.1版本。
这个插件由于是官方maven插件,所以在maven官方文档有记录该插件的仓库地址。
https://maven.apache.org/scm.html
然后导入idea就不说了吧。
断点调试
插件是实现maven的插件接口的,我们在插件接口这里打个断点就ok了。
甚至,这个办法,我们还可以修改源码,改了后发布到仓库,就可以jar包和源码能对上了,就可以调试我们修改后的代码了。
如何调试mybatis-generator及其插件
绕了一圈,我们终于回归正题了。其实和上面是类似的:找到mybatis-generator的源码(版本要找对),导入idea,打上断点,调试即可。
这个插件比较特别,特别的是,插件本身还支持扩展。
插件自身又是去哪里加载这些扩展类呢,其实也是maven本地仓库。所以,我个人在解决这个问题时,是找到了公司内部这个依赖的源码,导入到idea,打上断点,debug即可。
实践
代码我上传了https://gitee.com/ckl111/all-simple-demo-in-blog.git,其中两个module,一个是mybatis-generator-plugin,这个里面就只有一个类,用于生成注释的。另一个就是个测试工程。
mybatis-generator-plugin
然后把这个mybatis-generator依赖的jar,install到本地仓库。
测试工程
然后在配置文件中,引用我们的注释生成器:
接下来,在这个module下执行:
mvn -Dmybatis.generator.overwrite=true -Dmybatis.generator.configurationFile=./src/main/resources/generatorConfig.xml mybatis-generator:generate -X -f pom.xml
就会看到生成的class了:
总结
完结撒花,希望对大家有所帮助。代码路径再发一遍:
https://gitee.com/ckl111/all-simple-demo-in-blog.git
再扯点生活的事儿,最近一周把58集的电视剧《人世间》看了,自从大学看完过90多集的新三国后,好像再没看过这么长的剧了。
看的过程中,很多感悟,哭得不行,最近几年是年纪大了,泪点变低了,可能是因为被社会毒打多年,经历得多了,也更能理解各个生活场景了吧。
总体我觉得是部好剧,诚然会有一些不是特别合理的地方(剧本来源于生活,但毕竟不是生活,一般来说,矛盾点更加集中,现实生活中可能不会那么多事情一下全让大家给遇上),但是瑕不掩瑜吧。
还有一点就是,排除意外的情况下,人生还是大几十年呢,身体是非常重要的,大家保重身体,该躺平还是要躺。
Maven插件mybatis-generator,如何让生成的PO类的field上有对应表字段的注释的更多相关文章
- 使用eclipse插件mybatis generator来自动生成实体类及映射文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE generatorConfiguratio ...
- Mybatis Generator代码自动生成(实体类、dao层、映射文件)
写了一段时间增删改查有点厌烦,自己找了下网上的例子鼓捣了下自动生成. 首先得有一个配置文件: generatorConfig.xml <?xml version="1.0" ...
- Mybatis Generator的model生成中文注释,支持oracle和mysql(通过实现CommentGenerator接口的方法来实现)
自己手动实现的前提,对maven项目有基本的了解,在本地成功搭建了maven环境,可以参考我之前的文章:maven环境搭建 项目里新建表时model,mapper以及mapper.xml基本都是用My ...
- mybatis generator 使用教程(生成带注释的实体类)
引言: 最近的一个项目,由于数据库表巨多,导致需要创建N多个java实体.dao.mapper.xml映射文件,如果均使用纯手工编写,无疑需要耗费大量时间和精力.于是上网学习了mybatis gene ...
- 如果使用mybatis的逆向工程生成的po类及mapper,如果我们想要进行的对数据库的操作在mapper中没有对应的接口函数:比如生成的mapper接口中没有按照姓名及性别混合条件查询。我们的解决办法是:使用逆向工程生成的对应表的Example文件。
1.使用mybatis逆向工程生成的po类中包含UserExample文件(我的数据库表名为User). 2. 创建UserExample对象,然后对加入条件.对应的测试代码为: /* * 通过姓名和 ...
- Mybatis generator 数据库反向生成插件的使用
直接上干货: 可生成数据库表对应的po mpper接口文件 mapper.xml文件.文件中自动配置了部分常用的dao层方法.用于快速快发. 1.pom中引入插件: <plugin> & ...
- maven(18)-mybatis generator插件
generator的作用 使用mybatis框架,在初始项目或修改数据库时,相应的要在JAVA项目中去写一些数据模型文件,DAO,映射XML等配置,而这个插件的作用就是自动生成这些文件,以节省大 ...
- 利用maven的MyBatis Generator 插件自动创建代码
1.首先创建Maven工程 2.修改pom.xml文件代码如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xml ...
- JAVA入门[7]-Mybatis generator(MBG)自动生成mybatis代码
一.新建测试项目 新建Maven项目MybatisDemo2,修改pom.xml引入依赖.dependencies在上节基础上新增 <dependency> <groupId> ...
随机推荐
- 后缀自动机 (SAM)
后缀自动机 定义 定义 SAM 为一个有限状态自动机,接受且仅接受 \(S\) 的一个后缀. 同时,SAM 是这样的自动机中最小的那个,其中状态数至多为 \(2n - 1\),转移数至多为 \(3n ...
- 如何完整删除DISK DRILL
前两天装了DISK DRILL 右上角出现一个温度提示的图标 现在把DISK DRILL卸载了 但右上角的温度提示图标仍然存在 请问如何删除? 打开系统偏好设置----用户与群----管理员(点 ...
- @property基本概念
1.什么是@property @property是编译器的指令 什么是编译器的指令 ? 编译器指令就是用来告诉编译器要做什么! @property会让编译器做什么呢? @property 用在声明文件 ...
- tabbar选中按钮的标题颜色和字体
@implementation XMGTabBarController /* 问题: 1.选中按钮的图片被渲染 -> iOS7之后默认tabBar上按钮图片都会被渲染 1.修改图片 2.通过代码 ...
- go基础——数值传递与值传递
package main import "fmt" /* 1.值类型:存储的是数值本身,数据传递给其他变量时传递的是数据的副本. int,float,string,bool,arr ...
- mysql表查询、多表查询(增强查询的使用)子查询、合并查询,外连接,mysql5种约束,自增长
一.查询加强 1.在mysql中,日期类型可以直接比较,需要注意格式 2.%:表示0到多个字符, _:表示单个字符 exp:显示第二个字符为大写O的所有员工的姓名和工资 select name fr ...
- Solution Set - Stirling 数相关杂题
<好多题的题解> 「洛谷 P5408」第一类斯特林数·行 根据结论 \[x^{\overline{n}}=\sum_i{n\brack i}x^i, \] 我们只需要求出 \( ...
- CobaltStrike逆向学习系列(10):TeamServer 启动流程分析
这是[信安成长计划]的第 10 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 基本校验与解析 0x02 初始化 0x03 启动 Listeners 在之前的分析中,都是针对 Cob ...
- 使用工具john破解系统密码
下载解压得到一个存在着hash值的passwd的文件,还有一个压缩包解压得到的是一个密码本,应该就是需要使用爆破的密码本了 放在kali里面,根据题目的要求,将root的hash复制下来然后输入到一个 ...
- 华为eNSP环境,WLAN简介与组网,AP+AC详细配置
WLAN简单组网一.概述 无线局域网(Wireless Local Area Networks: WLAN)利用无线技术在空中传输数据.话音和视频信号.作为传统布线网络的一种替代方案或延伸,无线 ...