首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MyBatis-19MyBatis代码生成器-XML配置详解

MyBatis-19MyBatis代码生成器-XML配置详解

作者头像
小小工匠
发布2021-08-17 11:00:14
发布2021-08-17 11:00:14
5560
举报
文章被收录于专栏:小工匠聊架构小工匠聊架构

概述

MyBatis-17MyBatis代码生成器(逆向工程)MBG使用

MyBatis-18MyBatis代码生成器-Example讲解

通过前两篇的实践后,我们来梳理下理论知识。

MBG拥有丰富的配置,以XML形式的标签和属性来实现。


XML文件头

首先按照MBG的要求添加XML的文件头

代码语言:javascript
复制

这个文件头中的mybatis-generator-config_1_0.dtd用于定义该配置文件中所有标签和属性的用法及限制。


根节点generatorConfiguration及三个子元素(properties、classPathEntry、context)

代码语言:javascript
复制
<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 可选属性

  • id 唯一标识

  • defaultModelType:设置MBG如何生成实体类.

  1. conditional 默认值,不会生成单独的Blob实体类,但是如果有联合主键,会生成一个主键实体类. 和hierarchical类似,如果一个表的主键只有一个字段,那么不回位该字段生成单独的实体类,而是会将该字段合并到基本实体类中。
  2. flat,该模型只为每张表生成一个实体类,这个实体类包含表中所有的字段,这种模型最简单,推荐使用
  3. hierarchical,如果有联合主键,会生成单独的主键实体类,如果有Blob字段,会生成单独的Blob实体类,然后为所有的其他字段另外生成一个单独的实体类,MBG会在所有生成的实体类之间维护一个继承关系。

  • targetRuntime :这个属性用于指定生成代码的运行时目标

  1. MyBatis3 : 输出对象兼容MyBatis 3.0或更高版本,兼容JSE 5.0或更高版本的对象,包含泛型和注解.会生成 by example这类动态查询方法.
  2. MyBatis3Simple: 与上面的MyBatis3类似,但是不会生成by example`一类方法,只有少量的动态SQL

context 子元素

这些子标签有严格的配置顺序

  1. property(0个或者多个)
  2. plugin(0个或者多个)
  3. commentGenerator(0个或者1个)
  4. jdbcConnection(1个)
  5. javaTypeResolver(0个或者1个)
  6. javaModelGenerator(1个)
  7. sqlMapGenerator(0个或者1个)
  8. javaClientGenerator(0个或者1个)
  9. 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

配置方法

代码语言:javascript
复制
<plugin type="org.mybatis.generator.plugins.CachePlugin">
    <property name="cache_eviction" value="LRU">
    <property name="cache_size" value="1024">
plugin>

增加这个属性后,生成的Mapper.xml文件会增加如下的缓存配置

代码语言:javascript
复制
<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.

默认情况下的转换规则为:

  1. 如果精度>0或者长度>18,使用BigDecimal.
  2. 如果精度=0且10<=长度<=18,则使用Long
  3. 如果精度=0且5<=长度<=9,则使用Integer
  4. 如果精度=0且长度<5 ,则使用Short.

javaModelGenerator (1 Required)

该元素用于控制生成的实体类.有两个必选属性:

  • targetPackage : 生成实体类所在的包名.会为目标包名生成pacakge.
  • targetProject : 指定目标项目,运行于Eclipse或者IDEA等IDE时,这个属性是来指定项目的source root,一般就是 src/main/java这样的路径.不会为这个路径创建文件夹.

通过子元素来设置属性:

constructorBased : 是否为每个类生成一个使用所有字段的构造函数.只对MyBatis3有效,默认为false. 如果属性immutable被设置了,则这个属性会被忽略.可以在

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/04/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • XML文件头
  • 根节点generatorConfiguration及三个子元素(properties、classPathEntry、context)
    • properties子元素 (0…1)
    • classPathEntry子元素 (0…N)
    • context子元素 (1…N)
  • 深入了解context元素
    • context 可选属性
    • context 子元素
      • property (0..N)
      • plugin (0..N)
      • commentGenerator (0 or 1)
      • jdbcConnection (1 Required)
      • javaTypeResolver (0 or 1)
      • javaModelGenerator (1 Required)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档