上一篇对mybatis-generator-core源码的基础修改作了说明,也可以说是最想改的地方,这一篇将在此基础上再做进一步的修改。
首先说说上一篇最后提到的关于自定义注释的问题,想实现这个功能就需要修改org.mybatis.generator.internal.DefaultCommentGenerator这个类。我将里面一些主要的方法讲下。
addJavaFileComment(CompilationUnit compilationUnit)
给Java文件加注释,这个注释是在文件的顶部,也就是package上面。
addComment(XmlElement xmlElement)
给生成的XML文件加注释。大象将这个方法清空了,不生成注释。
addClassComment(InnerClass innerClass,IntrospectedTable introspectedTable)
Java类的类注释。
请注意红线的getRemarks()方法,这个remarks属性在原来的FullyQualifiedTable里面是没有的,这是大象自己加上去的,就是为了保存表的注释信息。那是在哪里加进去的呢?请看org.mybatis.generator.internal.db.DatabaseIntrospector这个类,大概浏览下就会发现,数据库表以及列的信息读取,类型设置都是由它来完成的,定位到608行,正好这里是个空行,插入几行代码。如下:
这样我们就取到了表的注释信息,看到这里应该就会明白了吧?
另外我需要说明的是,想通过databaseMetaData.getTables()来获得表注释的童鞋,这个做法是没用的,大象已经试过了,这个结果集里面的rs.getString("REMARKS")得到的是一个空字符串,什么都木有。而且大象还想吐槽下,网上一大堆说返回的这个结果集是10列,呵呵,是的么?我debug了好久发现它还是只有5列,不知道这10列是从哪来的,请打印出10列的童鞋告之是怎么做的,我用的mysql驱动是5.1.29
addFieldComment(Field field, IntrospectedTable introspectedTable,IntrospectedColumn introspectedColumn)
Java属性注释。注释为空就不给属性添加。
addGetterComment(Method method,IntrospectedTable introspectedTable,IntrospectedColumn introspectedColumn)
给getter方法加注释。这里添加注释的方法和Field一样,大象把这个方法以及addSetterComment方法都清空了,因为我比较习惯把注释加到属性上面,如果你习惯在getter方法上面加注释可以自行改一下。
上面这些修改做完后,记得要在org.mybatis.generator.codegen.mybatis3.model.BaseRecordGenerator的61行增加下面这行代码:
commentGenerator.addClassComment(topLevelClass, introspectedTable);
因为mybatis-generator源码中本来就是不加类注释的。
大家都在不同的公司,要求肯定都不一样,大象没法满足所有人,只对该类做了一定程度的修改,姑且把它当做一个示例模板吧,主要是弄明白怎么改就成了。
mybatis-generator在1.3.2版里对生成xml的namespace作了修改,不再用表名当为namespace的值,而是用包结构+类名+Mapper后缀的形式设置,大象不喜欢这么复杂做法,所以这里需要改一改,只保留类名+Mapper的命名形式。去掉org.mybatis.generator.api.IntrospectedTable类的907行与908行代码。
接下来再来说说对大对象类型的处理,mybatis-generator默认会把所有jdbcType为:BINARY、BLOB、CLOB、LONGVARBINARY、LONGVARCHAR、VARBINARY这些类型都作为大对象,反应出来的效果就是生成的pojo类会多一个类名+WithBLOBs.java的文件(含有的大对象个数大于1时),而在XML里面也会增加一个id为ResultMapWithBLOBs的resultMap,它继承BaseResultMap,大象一向喜欢简单的风格,这看得太不爽了。如果你觉得无所谓,不需要修改,请跳过这段往下看。
表中的text或blob等类型,通过databaseMetaData.getColumns()取出来后,它的rs.getInt("DATA_TYPE")值是与java.sql.Types对应的。
text类型的值:Types.LONGVARCHAR
blob类型是值:Types.LONGVARBINARY
它用org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl解析java类型与jdbc类型,然后设置到org.mybatis.generator.api.IntrospectedColumn的jdbcTypeName属性里,最关键的地方到了,IntrospectedColumn类第156行有个isBLOBColumn()方法,它就是用来判断是否生成xxxWithBLOBs.java和ResultMapWithBLOBs的条件。当然mybatis-generator不会这么直接用,它在里面定义了一个Rules接口,由它来统一进行调用。所以我们只需要把isBLOBColumn()里面的代码都去掉,直接返回false就可以了,再结合配置文件中的columnOverride属性就能达到目的。
jdbcType指定的值就是生成xml后result里面对应的类型,javaType与生成的pojo里面属性类型一致,这里其实可以不定义javaType,但是当数据库的表字段有的定义为tinyint时,如果不给它指定类型,那么默认生成的java类型就是java.lang.Byte,假如你想转换类型,而且保证不会超出字段类型的大小限制,那么你可以将它的javaType设为java.lang.Integer
经过这么一番修改之后,输出结果已经比较理想了,但是xml文件看上去还是有点问题,元素与元素之间没空行,看起来好别扭。恩,这里要给它加上空行,所以请找到org.mybatis.generator.api.dom.xml.XmlElement类的getFormattedContent方法,这个方法有个参数:indentLevel,通过名字我们可以很直观的理解它的作用就是来控制缩进等级,它的初始值为0,这表示不缩进,当变成1时就是缩进一级,也即缩进四个空格,后面以此类推,我们应该还注意到,方法内部用到了递归,所以它是从最底元素开始,再一步步返回,所以我们就应该在indentLevel为1的元素后面加上换行。
在生成xml的文件里面,我们看到有一个update元素,id为updateByPrimaryKey,这个基本上用不到,但是你还不能在table里加上enableUpdateByPrimaryKey="false",如果你这么做,虽然updateByPrimaryKey没有了,但updateByPrimaryKeySelective也会消失。所以这时请看看org.mybatis.generator.codegen.mybatis3.xmlmapper.XMLMapperGenerator这个类,getSqlMapElement()里面,有大量的addXXX方法,这些方法里面每个都用到了Rules规则来处理是否执行,比如我们在table里面加了enableDeleteByExample="false",它对应的是addDeleteByExampleElement(),而它又调用了introspectedTable.getRules().generateDeleteByExample()方法,再进入到generateDeleteByExample()里面,我们可以看到红线部分,上一篇大象讲过,在加载配置文件的时候,TableConfiguration会将table中的这些属性设置到对应的属性里,所以说其实最后还是回到了判断enableDeleteByExample的布尔值上面。
上面啰嗦了一大堆,现在再来解决之前提到的问题,如何去掉id为updateByPrimaryKey的update元素,注释掉addUpdateByPrimaryKeyWithoutBLOBsElement()或直接去掉这行代码,跟踪代码你会发现,它和addUpdateByPrimaryKeySelectiveElement()的rules验证里面都用到了enableUpdateByPrimaryKey的值。或者你不想采取我说的这个办法,而是改BaseRules的generateUpdateByPrimaryKeyWithoutBLOBs(),让它直接返回false
最后大象再唠叨一句,这些addXXX方法的顺序决定了生成xml文件中的元素顺序,所以有代码洁癖的人可以作下调整。
上一篇加这一篇都是讲怎么少量的改动源码以实现自定义文件输出,写的比较凌乱,不是很系统,完全是从实用的角度出发,关键还是大象水平有限,有什么错误还请大家帮我指出来,谢谢!
改了这么多,总要看下效果吧,下一篇大象将写个测试看看生成的结果,然后用maven assembly将它打包生成一个zip,它将包含:
本文为菠萝大象原创,如要转载请注明出处。http://www.blogjava.net/bolo
- 浏览: 123154 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (154)
- 【0】、学习、复习计划 (2)
- 【1】、Java基础知识总结 (7)
- 【2】、java小工具 (9)
- 【3】、jdbc (0)
- 【4】、javaWeb (1)
- 【5】、数据库 (5)
- 【5】、数据库 -->oracle (21)
- 【6】、struts2 (0)
- 【7】、springmvc (1)
- 【8】、spring (1)
- 【9】、hibernate (0)
- 【10】、mybatis (20)
- 【11】、项目构建 -->ant (0)
- 【12】、项目构建 -->maven (8)
- 【13】、项目构建 -->git (6)
- 【14】、项目构建 -->gradle (2)
- 【15】、JFinal (0)
- 【16】、jeecg (0)
- 【17】、服务器 -->jetty (0)
- 【18】、xml、json (0)
- 【20】、权限系统 (0)
- 【21】、Apache Shiro (0)
- 【22】、cas (0)
- 【23】、架构师 (0)
- 【24】、Apache FTPserver (0)
- 【25】、linux (6)
- 【26】、Apache CXF实战 (0)
- 【27】、支付 (0)
- 【28】、工具 (2)
- 【29】、微信开发 (0)
- 【30】、groovy、Grails (0)
- 【31】、工作日志 (0)
- 【32】、前端、页面小工具 (2)
- 【33】、生活、感想 (0)
- 【34】、大型门户网站练成日记 (0)
- 【35】、系统管理-->windows (0)
- 【36】、系统管理-->linux (0)
- 【37】、Play框架 (0)
- 【38】、架构设计 (0)
- 【39】、开发工具配置、插件安装 (0)
- 【40】、easyui (3)
- 【41】、jquery (0)
- 【1】、html (0)
- 【2】、css (0)
- 【3】、javascript (0)
- 【42】、 photoshop (1)
- 【43】、android (3)
- 【44】、jdk、tomcat、myeclipse优化配置 (9)
- 【45】、框架整合 (8)
- 其他 (1)
- 【46】、大型网站架构系列 (11)
- 【47】、mac (1)
- 【48】、ActiveMQ (4)
- 【49】、jetty (8)
- 【50】、数据库 -->mariaDb (1)
- 【51】、centos (2)
- 【52】、【手把手教你全文检索】 (2)
- 【53】、deepin linux (1)
- 【54】、poi (1)
- 【55】、tomcat (1)
- 【56】、数据库--sqlserver (2)
- 【57】、Android (1)
最新评论
发表评论
-
Mybatis传多个参数(三种解决方案)
2016-04-07 12:24 415据我目前接触到的传多个参数的方案有三种。 第一种方 ... -
Druid连接池简单入门配置
2016-03-14 22:30 508偶尔的机会解释Druid连接池,后起之秀,但是评价不错,另 ... -
修改mybatis-generator-1.3.2源码实现自定义代码生成详解(三)
2016-03-14 21:07 2909前两篇对mybatis-generator-core源码进 ... -
修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一)
2016-03-13 18:20 849相信很多人都用过mybatis-generator-core ... -
MyBatis Generator 详解
2016-03-13 15:09 553MyBatis Generator中文文档 MyBatis ... -
java.sql.SQLException: Value'0000-00-00'错误解决方法
2016-03-13 10:39 777java.sql.SQLException: Value' ... -
10、SSM框架——以注解形式实现事务管理
2016-03-13 10:39 490上一篇博文《SSM三大框架整合详细教程》详细说了如何整合S ... -
SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
2016-03-13 10:38 1591使用SSM(Spring、SpringMVC和Mybati ... -
08、MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合
2016-03-12 10:24 372只为成功找方法,不为失败找借口! MyBa ... -
07、MyBatis学习总结(七)——Mybatis缓存
2016-03-12 10:21 327只为成功找方法,不 ... -
06、MyBatis学习总结(六)——调用存储过程
2016-03-12 10:20 326只为成功找方法,不为失败找借口! MyBa ... -
05、MyBatis学习总结(五)——实现关联表查询
2016-03-12 10:19 394只为成功找方法,不为失败找借口! MyB ... -
04、MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
2016-03-12 10:18 303只为成功找方法,不为失败找借口! MyB ... -
03、MyBatis学习总结(三)——优化MyBatis配置文件中的配置
2016-03-11 21:53 549孤傲苍狼 只为成功找方法,不为失败找借口! ... -
02、MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
2016-03-11 21:52 430MyBatis学习总结(二)——使用MyBatis对表 ... -
01、MyBatis学习总结(一)——MyBatis快速入门
2016-03-11 21:47 411一、Mybatis介绍 MyBatis是一个支 ... -
2、mybatis实现关联表查询
2016-03-11 20:23 4256、mybatis实现关联表查询 6.1. 一对一关联 ... -
1.Mybatis介绍和简单使用
2016-03-11 20:06 4051.Mybatis介绍 MyBatis是支 ... -
利用mybatis-generator自动生成代码
2016-03-05 22:55 1113mybatis-generator有三种用法:命令行、ecl ...
相关推荐
【标题】"mybatis-generator-1.3.2 代码生成" 涉及到的是一个基于MyBatis框架的代码生成工具,主要用于自动化地创建MyBatis的SQL映射文件、Mapper接口、Mapper XML文件以及实体类。这个工具极大地提高了开发效率,...
1. `mybatis-generator-core-1.3.2.jar`:MBG 的核心库,包含所有实现代码生成功能的类和接口。 2. `lib` 目录:可能包含 MBG 运行时依赖的第三方库,如 JDBC 驱动等。 3. `README` 或 `doc` 文件:提供关于如何使用...
在`mybatis-generator-core-1.3.2`版本中,我们关注的是如何通过数据库中的字段注释(comment)来生成Java代码的注释。 在默认情况下,MBG并不直接将数据库字段的注释转化为Java类中的字段注释。因此,如果你想要在...
在这个场景中,“逆向工程mybatis-generator-1.3.2”指的是对MyBatis Generator 1.3.2版本的源代码或执行流程进行逆向分析。MyBatis Generator(MBG)是一个强大的工具,能够自动生成MyBatis接口和映射器XML文件,...
mybatis-generator-core-1.3.2代码自动生成 官网下载解压即用 内含 mybatis-3.2.6.jar/mybatis-generator-core-1.3.2.jar/mysql-connector-java-5.1.30.jar/mybatis-generator-core-1.3.2-javadoc.jar/mybatis-...
`mybatis-generator-core-1.3.2.zip` 文件是MyBatis Generator的一个版本,即1.3.2版,它包含了实现这一功能的所有必要组件。这个版本的MBG支持MyBatis框架的逆向工程,通过解析数据库中的表结构,自动创建与之对应...
mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip ...
6. **插件机制**:MyBatis Generator支持插件,开发者可以通过编写插件来扩展其功能,比如添加自定义的代码生成逻辑。 7. **版本控制**:生成的代码应纳入版本控制系统(如Git),这样团队成员可以协作开发,并确保...
在本案例中,我们关注的是`mybatis-generator-core-1.3.2-bundle.zip`这个压缩包,其中包含的是MyBatis Generator的核心库版本1.3.2。 MyBatis Generator的核心功能主要体现在以下几个方面: 1. **配置文件**:MBG...
mybatis-generator-core-1.3.2(含有源码--生成注释、自定义sql) 只需修改2个文件即可,生成了mysql字段的注释,以及去除多余无用的sql,只留下增删改查,文件内含源码和已经打好的jar包,直接使用即可
这个"mybatis-generator-core-1.3.2.jar"文件是Mybatis Generator的核心库,版本为1.3.2,它包含了执行逆向工程所需的所有功能。 Mybatis Generator的主要目标是通过数据库中的数据表来生成Java实体类(PO,即Plain...
在本案例中,我们关注的是`mybatis-generator-core-1.3.2.rar`这个压缩包,它包含了MyBatis Generator的核心库,版本为1.3.2。 MyBatis Generator主要包含以下组件: 1. **配置文件**:`generatorConfig.xml`是MBG...
在本案例中,我们关注的核心是`mybatis-generator-core-1.3.2.jar`这个文件,它是MyBatis逆向工程的主要实现库。 MyBatis Generator (MBG) 是一个能够自动生成Java源代码和XML配置文件的工具,这些文件与MyBatis...
mybatis-generator-core-1.3.2(含有源码--生成注释、自定义sql)2.0版本
mybatis-generator-config_1_0.dtd文件存在于mybatis-generator-core-1.3.2.jar包中,路径如下org/mybatis/generator/config/xml/mybatis-generator-config_1_0.dtd 可以设置开发工具的dtd配置,配置...
这里我们将深入探讨MBG的核心功能、工作原理以及如何使用mybatis-generator-core-1.3.2.jar这个版本来自动化生成代码。 首先,MyBatis Generator基于数据库表结构,通过配置文件指定数据库连接信息、表名以及需要...
总之,mybatis-generator-core-1.3.2 是 MyBatis Generator 的一个重要版本,它简化了与 MyBatis 集成时的代码编写工作,使得开发人员可以更加专注于业务逻辑,而不是重复的基础代码。通过熟练掌握 MBG 的使用,可以...