网上关于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