Justagreenonion 2020-06-21
在Mapper XML用法中,对于大多数单表操作来说,所用到的方法都很规范且类似。因此,MyBatis提供了代码生成器:MyBatis Generator(MBG)。
MBG通过丰富的配置可以生成不同类型的代码,代码包含了数据库对应的实体类、Mapper接口类、Mapper XML文件和Example对象,这些代码文件中几乎包含了全部的单表操作方法,使用MBG可以极大程度上方便我们使用MyBatis,还可以减少很多重复操作。
官方文档地址:http://mybatis.org/generator/。
1、XML文件头
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
文件头中的mybatis-generator-config_1_0.dtd用于定义该配置文件中所有标签和属性的用法和限制。
2、根节点
<generatorConfiguration> <!-- 具体配置内容 --> </generatorConfiguration>
在generatorConfiguration标签下有3个字标签:properties、classPathEntry、context。在配置这3个标签时,顺序必须和这里列举的顺序保持一致。
3、properties标签
properties标签用来指定一个需要在配置中解析使用的外部属性文件,最多配置1个,也可以不配置。引入属性文件后,可以在配置中使用${property}这种形式的引用,通过这种方式引用属性文件中的属性值,对于后面需要配置的JDBC信息会很有用。
properties标签包含resources和url两个属性,只能使用其中一个属性来指定,同时出现则会报错。
4、classPathEntry标签
classPathEntry标签最常用用法是通过属性location指定驱动的路径
5、context标签(重点)
context标签用于指定生成一组对象的环境,该标签至少配置1个,可以配置多个。
context标签只有一个必选属性id,用来唯一确定该标签,该id可以在运行MBG时使用。
其余可选属性如下:
MBG其他标签基本上都是context的子标签,这些子标签(配置顺序严格按照列出顺序)包括:
1、property标签
该标签包含以下属性:
配置写法如下:
<property name="autoDelimitKeywords" value="true"/> <property name="beginningDelimiter" value="`"/> <property name="endingDelimiter" value="`"/> <property name="javaFileEncoding" value="UTF-8"/> <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/> <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
假设有一个表名为user info,如果直接查询表名,会提示错误。在MySQL中,需要使用反单引号"`"作为分隔符才能避免数据库错误。
2、plugin标签
该标签用来定义一个插件,用于扩展或修改MBG生成的代码。该插件将按在配置中配置的顺序执行,MBG默认插件包含缓存插件、序列化插件、RowBounds插件、ToString插件等。
3、commentGenerator标签
该标签用来配置如何生成注释信息,有一个可选属性type,可以指定用户的实现类,该类需要实现org.mybatis.generator.api.CommentGenerator接口,而且必有一个默认空的构造方法。
type属性接收默认的特殊值DEFAULT,使用默认的实现类org.mybatis.genertor.internal.DefaultCommentGenerator。
默认实现类中有3个可选属性,具体如下:
如果默认控制生成的注释不满足要求,可以实现CommentGenerator,参考MBG中的DefaultCommentGenerator即可。然后,在type属性中配置自定义的注释生成类。
4、jdbcConnection标签
该标签用于指定MBG要连接的数据库信息。
两个必选属性:
两个可选属性:
此外,该标签还可以接受多个property子标签,这里配置的property标签值都会通过name属性反射赋值到JDBC驱动的属性中。
基本配置如下:
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root" password="admin"> <!-- 对Oracle数据库,需要配置remarksReporing属性才能使JDBC方式获取注释信息 --> <property name="remarksReporing" value="true"/> </jdbcConnection>
5、javaTypeResolver标签
该标签用来指定JDBC类型和Java类型如何转换,提供了一个可选的属性type并提供了默认实现DEFAULT,一般情况使用默认即可。
该标签还有一个可以配置的property标签,可以配置的属性为forceBigDecimals,该属性可以控制是否将DECIMAL和NUMERIC类型的JDBC字段转换为Java类型的java.math.BigDecimal,默认为false。
默认情况转换规则如下:
6、javaModelGenerator标签
该标签用来控制生成的实体类。
只有两个必选属性:
支持property子标签如下:
7、sqlMapGenerator标签
该标签用于配置SQL映射生成器(Mapper.xml文件)的属性。如果targetRuntime设置为MyBatis3,则只有当javaClientGenerator配置需要XML时,该标签才必须配置1个。如果没有配置javaClientGenerator,则使用以下规则:
两个必选属性:
一个可选属性:
8、javaClientGenerator标签
该标签用于配置Java客户端生成器(Mapper接口)的属性,可选,最多配置1个。
三个必选属性:
一个可选属性:
9、table标签
该标签配置需要通过内省数据数据库的表。
必选属性如下:
可选属性如下:
table标签包含property子标签如下:
除property子标签外,table还包含以下子标签:
① generatedKey标签(0个或1个)
该标签用来指定自动生成主键的属性(identity字段或者sequences序列)。如果指定这个标签,MBG将在生成insert的SQL映射文件中插入一个selectKey标签。
必选属性如下:
可选属性如下:
② columnRenamingRule标签
该标签可以在生成之前对列进行重命名,例如一个表名包含CUST_BUSINESS、CUST_STREAT_ADDRESS、CUST_CITY、CUST_STATE,这些前缀可以通过如下方式定义重命名规则:
<columnRenamingRules searchString="^CUST_" replaceString="" />
③ columnOverride标签
该标签用于将某些默认计算的属性值更改为指定的值。
必选属性:
可选属性:
④ ignoreColumn标签
该标签可以用来屏蔽不需要生成的列。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <context id="MySqlContext" targetRuntime="MyBatis3Simple" defaultModelType="flat"> <property name="beginningDelimiter" value="`"/> <property name="endingDelimiter" value="`"/> <commentGenerator> <property name="suppressDate" value="true"/> <property name="addRemarkComments" value="true"/> </commentGenerator> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc://mysql://localhost:3306/mybatis" userId="root" password=""> </jdbcConnection> <javaModelGenerator targetPackage="test.mosql" targetProject="src\main\java"> <property name="trimStrings" value="true"/> </javaModelGenerator> <sqlMapGenerator targetPackage="test.xml" targetProject="src\main\resources"/> <javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="src\main\java"/> <table tableName="%"> <generatedKey column="id" sqlStatement="MySql"/> </table> </context> </generatorConfiguration>
在MyBatis Simple项目的pom.xml中添加如下插件配置:
<plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.3</version> <configuration> <configurationFile> ${basedir}/src/main/resources/generatorConfig.xml </configurationFile> <overwrite>true</overwrite> <verbose>true</verbose> </configuration> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>simple</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </plugin>
在Maven插件中找到mybatis-generator:generator,双击运行即可。
以上内容整理自《MyBatis从入门到精通》