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> ...
随机推荐
- 计算机网络-5-10-TCP运输连接管理
TCP的运输连接管理 TCP是面向连接的通信,运输连接是用来传送TCP报文的,TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程.因此,运输连接有三个阶段,即:建立连接,数据传送,连接释 ...
- JS创建快捷方式
转载请注明来源:https://www.cnblogs.com/hookjc/ <script type="text/javascript" language="j ...
- 关于SVN常用命令之export
SVN官方命令参考地址:http://www.subversion.org.cn/svnbook/nightly/svn.ref.html 关于export命令 导出一个干净的不带.svn文件夹的目录 ...
- Class.getResource和ClassLoader.getResource的路径写法
Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题. Class.getResource(Stri ...
- shell脚本之数组基本操作及排序
数组的基本操作及排序 1.数组定义方法: ( 6 7 9 4 3 2) 0 1 2 3 4 5 #下标号 方法一: 数组名=(value0 value1 value2 -) 方法二: 数组名=([0] ...
- 36、python并发编程之多线程(操作篇)
目录: 一 threading模块介绍 二 开启线程的两种方式 三 在一个进程下开启多个线程与在一个进程下开启多个子进程的区别 四 练习 五 线程相关的其他方法 六 守护线程 七 Python GIL ...
- Solution -「Gym 102956F」Border Similarity Undertaking
\(\mathcal{Description}\) Link. 给定一张 \(n\times m\) 的表格,每个格子上写有一个小写字母.求其中长宽至少为 \(2\),且边界格子上字母相同的矩 ...
- .NET 云原生架构师训练营(权限系统 系统演示 ActionAccess)--学习笔记
目录 模块拆分 环境配置 默认用户 ActionAccess 模块拆分 环境配置 mysql migration mysql docker pull mysql docker run -p 3306: ...
- [旧][Android] 布局优化
备注 原发表于2016.05.21,资料已过时,仅作备份,谨慎参考 前言 最近在编写布局时,发现这一块是有很多值得深入学习的地方的.毕竟应用开发,界面展示是十分重要的部分.另外在开发时,为自己的代码做 ...
- 可视化BI工具如何选择?这2款省心省时又省力!
随着大数据时代的到来,越来越多企业开始意识到数据的重要性.商业智能BI工具也如雨后春笋般不断涌现,如何选择BI工具倒成了企业急需解决的难题.BI工具的选择要具体问题具体分析,但大部分企业在选择BI工 ...