JavaShuo
栏目
标签
mybatis-generator相关(二)
时间 2019-12-06
标签
mybatis
generator
相关
栏目
MyBatis
繁體版
原文
原文链接
上一篇对
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
,它将包含:
相关文章
1.
redis相关(二)
2.
mybatisgenerator配置文件
3.
二=进=制=相=关
4.
多元回归与相关------(二)多元相关和偏相关
5.
mybatisgenerator自定义注释
6.
springboot + mybatis + mybatisGenerator使用教程
7.
eclipse集成MybatisGenerator及使用
8.
二叉树相关题目
9.
Hadoop 相关知识点(二)
10.
bert模型相关(二)
更多相关文章...
•
XML 相关技术
-
XML 教程
•
Hibernate的二级缓存
-
Hibernate教程
•
NewSQL-TiDB相关
•
RxJava操作符(二)Transforming Observables
相关标签/搜索
mybatisgenerator
相关
mysql8+mybatisgenerator
息息相关
相关资源
HOSTS相关
系统相关
相关性
不相关
相关者
MyBatis
MySQL教程
NoSQL教程
Hibernate教程
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
resiprocate 之repro使用
2.
Ubuntu配置Github并且新建仓库push代码,从已有仓库clone代码,并且push
3.
设计模式9——模板方法模式
4.
avue crud form组件的快速配置使用方法详细讲解
5.
python基础B
6.
从零开始···将工程上传到github
7.
Eclipse插件篇
8.
Oracle网络服务 独立监听的配置
9.
php7 fmp模式
10.
第5章 Linux文件及目录管理命令基础
本站公众号
欢迎关注本站公众号,获取更多信息
相关文章
1.
redis相关(二)
2.
mybatisgenerator配置文件
3.
二=进=制=相=关
4.
多元回归与相关------(二)多元相关和偏相关
5.
mybatisgenerator自定义注释
6.
springboot + mybatis + mybatisGenerator使用教程
7.
eclipse集成MybatisGenerator及使用
8.
二叉树相关题目
9.
Hadoop 相关知识点(二)
10.
bert模型相关(二)
>>更多相关文章<<