(MBG)MyBatis Generator xml配置文件详解(一)

网上关于MyBatis Generator介绍、使用方法、简单起步的资料一查一大堆,这里主要完整记录一下关于MyBatis Generator的配置,包括xml配置文件中的各个标签和属性以及他们对应的功能,建议工作中当做工具来查阅此文。

英文文档:[MyBatis Generator
](http://www.mybatis.org/generator/index.html

<classPathEntry>标签

示例
<classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />

<generatorConfiguration>标签的子标签,MBG从这些位置加载类

简单来说,MBG在生成dao文件时需要连接数据库去读取表信息,所以至少需要指定数据库驱动jar或zip包的位置,例如:

<classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />

也可以用于其他需要加载的包路径

必须的属性
属性描述
location需要加载的jar或zip包或文件夹路径
可选属性

子标签

<table>标签

<table>元素用于定义一个需要被映射的数据库表

示例
<table tableName="MYTABLE" schema="MYSCHEMA">
  <ignoreColumn column="fred"/>
  <columnOverride column="BEG_DATE" property="startDate"/>
</table>

MBG将为MYTABLE表自动生成:

  • mybatis/iBatis map映射文件
  • 一套model类:
    • 如果table有主键,会对应生成一个匹配主键的class文件
    • 生成匹配除主键和BLOB类型字段外的其他字段的class文件
    • 匹配BLOB类型字段的class文件
    • 生成一个为”by example”方法提供支持的class文件类,比如selectByExample, deleteByExample方法,通过这些方法我们可以方便的做筛选、链表等动作而不需要在map中写sql语句。
    • 一个dao文件
      <context>标签至少要包含一个或多个<table>标签。
数据库标识

一般来说,会根据数据库对标识名的大小写转换规则,自动转换标识的大小写来匹配数据库中的表名、库名、和catalog名称,如果想要限定性的指定标识,可以delimitIdentifiers="true",如果名字中有空格,系统强制精确匹配。

必须的属性

tableName : 数据库表名,支持SQL通配符

可选属性
  • schema:数据库库名,支持SQL通配符
  • catalog:数据库的catalog
  • alias:使用此属性来给表设置一个别名,也会为表中的字段设置别名,格式为‘别名_实际字段名’
  • domainObjectName:指定生成的domain类的名称和包路径,比如”cn.idlay.Bar”,运行generator自动生成时,会在cn.idlqy包路径下创建名为Bar的domian类和dao类(实际会生成在cn.idlqy包路径下对应的domain和dao包下),如果没有指定将自动按表名生成domain和dao。
  • mapperName:“foo.BarMapper”在foo.mapper包下生成BarMapper.class类
  • sqlProviderName:?????待定
  • enableInsert:是否生成插入语句,默认true
  • enableSelectByPrimaryKey:是否生成按主键查询语句,如果表没有主键也不会生成,默认true。
  • enableSelectByExample:是否生成example 语句,example 语句可以灵活的进行筛选操作,默认true。
  • enableUpdateByPrimaryKey:与上类似,不解释,默认true
  • enableDeleteByPrimaryKey:与上类似,不解释,默认true
  • enableDeleteByExample:与上类似,不解释,默认true
  • enableCountByExample:通过example查询结果计数,默认true
  • selectByPrimaryKeyQueryId:能够为查询语句带上QueryId,方便DBA进行运行时分析
  • modelType:生成domain类的策略,共有三种方式:

    • hierarchical:分层模型,如果有primary key,将会生成一个hierarchical的class、一个不包含primary key、BLOB类型的字段的class、和一个包含BLOB类型字段的class;
    • flat:所有字段都在一个class中
    • conditional:如果只有一个主键,那么不会单独生成一个包含primary key的class,除此之外跟hierarchical方式类似。
  • escapeWildcards:是否在schema 和tableName中关闭通配符 (‘_’ and ‘%’) ,默认false;例如表名”MY_TABLE”在某些数据库驱动中会作为通配符处理,因此需要将escapeWildcards置false关闭匹配

  • delimitIdentifiers:是否大小写精确匹配schema 或tableName,但是如果名字中有空格,那么系统强制精确匹配。
  • delimitAllColumns:是否为所有列名添加界定符,比如有些表名有空格、特殊符号或者需要大小写敏感,数据库驱动需要加界定符才能处理:column 1变成`column 1`,嗯就这样。关于界定符的定义可以在<context>标签中定义,默认false。
子标签
  • <property> (0..N)
  • <generatedKey> (0 or 1)
  • <domainObjectRenamingRule> (0 or 1)
  • <columnRenamingRule> (0 or 1)
  • <columnOverride> (0..N)
  • <ignoreColumn> (0..N)
支持的Properties

一下这些属性需要定义在<property>子标签中

  • constructorBased:是否为domain类生成一个包含所有字段的构造函数,如果为true,那么SQL返回的result map将使用这个构造函数来组装domain对象,而不是通过字段的set方法,默认。当“immutable”属性设置为true时,此字段被强制为true。另,该属性仅对Mybatis3有效。
  • ignoreQualifiersAtRuntime:当true时,MBG在生成SQL语句时不会为表名增加schema或者catalog,这个经常用在多张schema下有相同名称的table的情景,默认false。
  • immutable:如果为true,意味着生成的class将没有set方法,替代的将使用构造函数来为字段赋值,见constructorBased属性;该属性仅对Mybatis3有效。
  • modelOnly:如果为true,将只生成model类(domain类),同时<table>中定义的所有 “enable*” 属性将被忽略;如果配置了<sqlMapGenerator>标签,并且modelOnly为true,那么MBG只会在此表的SQL映射XML文件中生成result map元素;默认false。
  • rootClass:为所有模型类设置一个父类,并且将覆盖Java Model Generator configuration中配置的rootClass,父类的名称应该是带上包名的完全限定性类名,例如:com.mycompany.MyRootClass。
  • rootInterface:为dao接口设置一个父接口,将覆盖DAO Generator configuration中配置的rootInterface 值。同样父接口也必须是完全限定性接口名,例如:com.mycompany.MyRootInterface
  • runtimeSchema:如果你想在执行代码生成的时候使用一个schema,而在实际运行的时候使用另外一个runtime 的 schema,在这里设置runtime 的 schema。
  • runtimeCatalog:与上类似
  • runtimeTableName:同上类似
  • selectAllOrderByClause:仅适用于MyBatis3Simple运行时,为所有的selectAll方法加上order by,该值只能是字段列表,例如:ID1, ID2 或者 ID1 desc, ID2 asc
  • trimStrings:为CHAR 类型的字段值去掉空格等空白字符;会覆盖<javaModelGenerator>标签中的相同属性,同时又会被<columnOverride>标签中的trimStrings 属性覆盖,默认值false。
  • useActualColumnNames:默认为false,MBG会尝试适用驼峰命名方式将表中的列名映射到domain类中,例如假设列名“START_DATE”,domain中会生成名为startDate的属性和getStartDate()、getStartDate()方法;如果设为true,生成的属性名是START_DATE,get、set方法分别是getSTART_DATE() 和 setSTART_DATE()
  • useColumnIndexes:生成resultMaps 时用列序号(从1开始)来代替列名,没什么暖用,并且MyBatis3不支持。
  • useCompoundPropertyNames:将注释内容和列名称一起作为字段名称,这个应该也没什么暖用吧。

关于如何使用MBG参考:[Maven插件之mybatis-generator(mybatis自动生成实体代码的插件)](https://blog.csdn.net/pucao_cug/article/details/64499355

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值