概述
MyBatis-17MyBatis代码生成器(逆向工程)MBG使用
MyBatis-18MyBatis代码生成器-Example讲解
通过前两篇的实践后,我们来梳理下理论知识。
MBG拥有丰富的配置,以XML形式的标签和属性来实现。
XML文件头
首先按照MBG的要求添加XML的文件头
这个文件头中的mybatis-generator-config_1_0.dtd用于定义该配置文件中所有标签和属性的用法及限制。
根节点generatorConfiguration及三个子元素(properties、classPathEntry、context)
<generatorConfiguration>
generatorConfiguration>
文件头以及根节点是MBG必备的基本信息,中间是MBG的自定义配置部分。
根元素为,包含子元素(按照严格的顺序):(0或一个),(0或多个),(1或多个);
properties子元素 (0…1)
,指定外部的属性文件,然后在配置中就可以通过${property}来引用属性文件中的属性值了. 一般配置数据库连接较为常见。
属性可以通过resource或者url来指定,只能使用其中一个属性来执行,同时使用会报错。
- resource:指定classpath下的属性文件, 类似
com/artisan/db.properties这样的属性值 - url:指定文件系统上的特定位置,一般通过file协议来加载指定路径位置的属性文件,如:
classPathEntry子元素 (0…N)
classPathEntry元素,可以配置多个,也可以不配。 一般来指定驱动路径.属性location,来指定jdbc驱动包的位置.如果将jar包放入了classpath中,就不用设置这个属性了.
这个标签还可以用在javaModelgenerator,通过使用这种方式指定rootClass属性配置类所在的jar包
context子元素 (1…N)
context元素:用于指定一组对象的环境.子元素用于指定连接到的数据库,要生成的对象的类型和要处理的数据库中的表.该元素只有一个必选属性id,来进行唯一标识.
深入了解context元素
context 可选属性
- defaultModelType:设置MBG如何生成实体类.
- conditional 默认值,不会生成单独的Blob实体类,但是如果有联合主键,会生成一个主键实体类. 和hierarchical类似,如果一个表的主键只有一个字段,那么不回位该字段生成单独的实体类,而是会将该字段合并到基本实体类中。
- flat,该模型只为每张表生成一个实体类,这个实体类包含表中所有的字段,这种模型最简单,推荐使用
- hierarchical,如果有联合主键,会生成单独的主键实体类,如果有Blob字段,会生成单独的Blob实体类,然后为所有的其他字段另外生成一个单独的实体类,MBG会在所有生成的实体类之间维护一个继承关系。
- targetRuntime :这个属性用于指定生成代码的运行时目标
- MyBatis3 : 输出对象兼容MyBatis 3.0或更高版本,兼容JSE 5.0或更高版本的对象,包含泛型和注解.会生成 by example这类动态查询方法.
- MyBatis3Simple: 与上面的MyBatis3类似,但是不会生成by example`一类方法,只有少量的动态SQL
context 子元素
这些子标签有严格的配置顺序
- property(0个或者多个)
- plugin(0个或者多个)
- commentGenerator(0个或者1个)
- jdbcConnection(1个)
- javaTypeResolver(0个或者1个)
- javaModelGenerator(1个)
- sqlMapGenerator(0个或者1个)
- javaClientGenerator(0个或者1个)
- table(1个或者多个)
property (0..N)
(0..N) ,property以name,和value的形式来设置,支持的属性有
- autoDelimitKeywords :自动识别数据库关键字,默认为false,设置为true后,如果遇到数据库关键字,用替换.
- beginnginDelimiter , endingDelimiter : 用作分隔符的符号,oracle中是”,而mysql中是`
- javaFileEncoding : 设置Java文件的编码集,如果没有指定,则会使用系统默认编码.
- javaFormatter :使用该属性来指定生成的java文件的用户指定的formater的完整的类名称,用于格式化java代码,这个类必须继承
org.mybatis.generator.api.JavaFormatter,而且提供一个默认不含参数的构造方法.每个context持有一个单独的javaFormatter实例,默认的是org.mybatis.generator.api.dom.DefaultJavaFormatter - xmlFormatter : 格式化xml文件,与上述javaFormatter类似.
plugin (0..N)
用来定义一个插件,插件用于修改MBG生成的代码.类继承于 org.mybatis.generator.api.Plugin .
下面介绍缓存插件,全限定名为org.mybatis.generator.plugins.CachePlugin
这个插件可以在生成的SQL XML映射文件中增加一个cache标签,只有当targetRuntime为MyBatis3时,该插件才有效。
该插件的可选属性
- cache_eviction
- cache_flushInterval
- cache_readOnly
- cache_size
- cache_type
配置方法
<plugin type="org.mybatis.generator.plugins.CachePlugin">
<property name="cache_eviction" value="LRU">
<property name="cache_size" value="1024">
plugin>
增加这个属性后,生成的Mapper.xml文件会增加如下的缓存配置
<cache eviction="LRU" size="1024">
cache>
commentGenerator (0 or 1)
用于定义注释生成器的属性.注释生成器用来给由MBG生成的多种元素,Java自动,java方法,XML元素等等 生成注释. 默认的注释生成器将JavaDoc注释添加到所有生成的Java元素上,也会添加到每个生成的XML元素上.注释的目的是告诉用户这个元素是生成的,并且有可能重新生成,也就是说不应该修改这些地方.
可选属性 type,用来指定注释生成器类型.自定义的类要继承于 org.mybatis.generator.api.CommentGenerator.
使用子元素来设置属性:
- suppressAllComments :用来指定MBG所生成的代码是否包含任何注释.默认为false,即都会生成注释.为true是,所有代码都不会生成注释,且代码不会并合并.
- suppressDate : 用来指定生成的注释中是否包含生成的日期.默认为false. 设置为true,不会添加时间戳.
- addRemarkComments: 注释是否添加数据库表的备注信息,默认false
jdbcConnection (1 Required)
设置数据库连接的属性.每个必须含有一个元素.
必选属性:
- driverClass : 访问数据库的JDBC驱动程序的完全名称.
- connectionURL : 用于访问数据的JDBC连接URL.
可选属性:
- userId : 访问数据库的用户ID
- password : 访问数据库的密码
可以设置子元素指定的属性都会被添加到JDBC驱动程序的属性中.
javaTypeResolver (0 or 1)
java类型处理器,处理数据库中类型到Java中的类型.使用属性type来设置,默认使用JavaTypeResolverDefaultImpl来处理类型.
子元素property支持一个属性:
- forceBigDecimals : 是否强制将DECIMAL和NUMERIC的类型转换为BigDecimal类型,默认是false.
默认情况下的转换规则为:
- 如果精度>0或者长度>18,使用BigDecimal.
- 如果精度=0且10<=长度<=18,则使用Long
- 如果精度=0且5<=长度<=9,则使用Integer
- 如果精度=0且长度<5 ,则使用Short.
javaModelGenerator (1 Required)
该元素用于控制生成的实体类.有两个必选属性:
- targetPackage : 生成实体类所在的包名.会为目标包名生成pacakge.
- targetProject : 指定目标项目,运行于Eclipse或者IDEA等IDE时,这个属性是来指定项目的source root,一般就是 src/main/java这样的路径.不会为这个路径创建文件夹.
通过子元素来设置属性:
constructorBased : 是否为每个类生成一个使用所有字段的构造函数.只对MyBatis3有效,默认为false. 如果属性immutable被设置了,则这个属性会被忽略.可以在