##mybatis自动代码生成器
###1、maven下运行自动生成器
mybatis提供了一个自动化代码生成器,可以直接根据数据库表生成对应的实体类、实体接口、xml配置文件,这里针对maven下的使用进行举例:
首先在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/generator/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>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.3</version>
</dependency>
</dependencies>
</plugin>复制代码
首先指定了插件依赖于mybatis-generator-maven-plugin,同时通过<configuration>
标签指定了代码生成器的配置文件全路径。同时配上插件依赖的工具包。
generatorConfig.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">
<generatorConfiguration>
<context id="mygenerator" 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="root">
</jdbcConnection>
<javaModelGenerator targetPackage="test.model"
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>复制代码
具体标签的使用说明在下面,然后选择maven projects——>Plugins——>mybatis-generator,单击运行插件,则可以生成对应的实体、接口和xml文件。
###2、XML配置详解
XML的dtd文件引用如下:<?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>
:
<generatorConfiguration>
<!--具体配置内容-->
</generatorConfiguration>复制代码
这两部分是必备内容。在<generatorConfiguration>
标签下是三个子标签:properties、classPathEntry和context,这三者的配置顺序和这里的列举顺序也必须是一致的。
######properties标签(0 or 1)resource
:指定classpath下的属性文件,类似com/myproject/generatorConfig.properties这样的属性值。url
:指定文件系统上的特定位置,例如file:///C:/myfolder/generatorConfig.properties。
######classPathEntry标签(0 or N)
常见的用法是通过属性location 指定驱动的路径,代码如下:<classPathEntry location="E:\mysql\mysql-connectorjava-5.1.29.jar"/>
######context标签(1 or N)
context标签用于指定生成一组对象的环境。例如指定要连接的数据库,要生成对象的类型和要处理的数据库中的表。
属性:id
:必选属性,用来唯一确定该标签。
defaultModelType
:定义了如何生成实体类。该属性有以下可选值:
conditional:默认值,和下面的hierarchical 类似,如果一个表的主键只有一个字段,那么不会为该字段生成单独的实体类,而是会将该字段合并到基本实体类中。
flat:该模型只为每张表生成一个实体类。这个实体类包含表中的所有字段。这种模型最简单,推荐使用。
hierarchical:如果表有主键,那么该模型会产生一个单独的主键实体类,如果表还有BLOB 字段,则会为表生成一个包含所有BLOB 字段的单独的实体类,然后为所有其他的字段另外生成一个单独的实体类。MBG 会在所有生成的实体类之间维护一个继承关系。复制代码
targetRuntime
:此属性用于指定生成的代码的运行时环境,支持以下可选值:
MyBatis3 : 默认值。
MyBatis3Simple : 这种情况不会生成与Example 相关的方法。复制代码
introspectedColumnimpl
:该参数可以指定扩展org.mybatis.generator.api.Introspected Column 类的实现类。
一般情况下,使用如下配置即可:<context id="Mysql" defaultModelType="flat">
如果不希望生成和Examp le 查询有关的内容,则可以按照如下方法进行配置:<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
######context子标签:
property (0 or N)autoDelimitKeywords:自动给关键字添加分隔符的属性。
beginningDelimiter:配置前置分隔符的属性。
endingDelimiter:配置后置分隔符的属性。
例:
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="autoDelimitKeywords" value="true"/>
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
</context>
javaFileEncoding:设置要使用的Java 文件的编码。复制代码
plugin (0 or N)
主要用于定义插件,未做深入研究和使用。
commentGenerator (0 or 1)
用来配置如何生成注释信息。
type:指定自己编写定义注释的类, 需要实现对应接口且有一个默认的空的构造方法。
suppressAllComments :阻止生成注释,默认为false 。
suppressDate : 阻止生成的注释包含时间戳,默认为false 。
addRemarkComments :注释是否添加数据库表的备注信息,默认为false 。复制代码
jdbcConnection (1)
指定要连接的数据库信息
driverClass : 访问数据库的JDBC 驱动程序的完全限定类名。(必选)
connectionURL : 访问数据库的JDBC 连接URL。(必选)
userId :访问数据库的用户ID 。
password : 访问数据库的密码。
该标签还可以接受多个property子标签,这里配置的property属性都会添加到JDBC驱动的属性中(使用proprety标签的name属性反射赋值) 。复制代码
javaTypeResolver ( 0 or 1)
指定JDBC 类型和Java 类型如何转换
一般不用配置
javaModelGenerator ( 1 )
用来控制生成的实体类
targetPackage:生成实体类存放的包名。一般就是放在该包下,实际还会受到其他配置的影响。(必选)
targetProject:指定目标项目路径,可以使用相对路径或绝对路径。(必选)
还支持以下几个property 子标签属性:
constructorBased:该属性只对MyBatis3有效,如果为true就会使用构造方法入参,如果为false就会使用setter方式。默认为false。
enableSubPackages:如果为true,生成器会根据catalog和schema 来生成子包。如果为false就会直接使用targetPackage属性。默认为false 。
immutable:用来配置实体类属性是否可变。如果设置为true,那么constructorBased不管设置成什么,都会使用构造方法入参,并且不会生成setter方法。如果为false,实体类属性就可以改变。默认为false 。
rootClass:设置所有实体类的基类。如果设置,则需要使用类的全限定名称。
trimStrings:判断是否对数据库查询结果进行trim操作,默认值为false 。复制代码
sqlMapGenerator (0 or 1)
用于配置SQL 映射生成器(Mapper.xml文件)的属性
targetPackage:生成SQL映射文件(XML文件)存放的包名。一般就是放在该包下,实际还会受到其他配置的影响。(必选)
targetProject:指定目标项目路径,可以使用相对路径或绝对路径。(必选)
还有一个可选的property 子标签属性enableSubPackages,如果为true ,生成器会根据catalog和schema来生成子包。如果为false 就会直接用targetPackage属性,默认为false 。复制代码
javaClientGenerator (0 or 1)
用于配置Java客户端生成器(Mapper接口)的属性
type:用于选择客户端代码(Mapper接口)生成器,用户可以自定义实现, 需要继承指定的类,且必须有一个默认空的构造方法。。该属性提供了以下预设的代码生成器:(必选)
MyBatis3:
ANNOTATEDMAPPER:基于注解的Mapper接口,不会有对应的XML 映射文件。
MIXEDMAPPER:XML和注解的混合形式,上面这种情况中的SQLProvider注解方法会被XML方式替代。
XMLMAPPER:所有的方法都在XML中,接口调用依赖XML文件。
MyBatis3Simple:
ANNOTATEDMAPPER:基于注解的Mapper接口,不会有对应的XML 映射文件。
XMLMAPPER:所有的方法都在XML中,接口调用依赖XML文件。
targetPackage:生成Mapper接口存放的包名。一般就是放在该包下,实际还会受到其他配置的影响。(必选)
targetProject:指定目标项目路径,可以使用相对路径或绝对路径。(必选)
还有一个可选属性implementationPackage,如果指定了该属性,Mapper 接口的实现类就会生成在这个属性指定的包中。复制代码
table (1 or N)
配置需要通过内省数据库的表,只有在table中配置过的表,才能经过上述其他配置生成最终的代码,该标签至少要配置一个,可以配置多个。
如要生成全部的表,可以如下配置:<table tableName ="%"/>
tableName:指定要生成的表名,可以使用SQL通配符匹配多个表。(必选)
schema:数据库的schema,可以使用SQL通配符匹配。如果设置了该值,生成SQL的表名会变成如schema.tableName的形式。
catalog:数据库的catalog,如果设置了该值,生成SQL的表名会变成如catalog.tableName 的形式。
alias:如果指定,这个值会用在生成的select查询SQL表的别名和列名上,例如alias_actualColumnName (别名_实际列名)。
domainObjectName:生成对象的基本名称。如果没有指定,生成器会自动根据表名来生成名称。
enableXXX:XXX代表多种SQL方法,该属性用来指定是否生成对应的xxx语句。
...
table标签的可选属性较多,不多赘述,如有需要再查询详细文档进行编写...复制代码