在pom.xml增加以下插件:
<plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> </plugin>
1.3.2版本,才能取消注释。
配置好Maven插件,下面需要配置插件需要的配置文件
<?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> <classPathEntry location="D:\repo\mysql\mysql-connector-java\5.1.6\mysql-connector-java-5.1.6.jar" /> <context id="context1" targetRuntime="MyBatis3"> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://xxxxxxx:8406/CL_DEMO?useUnicode=true&characterEncoding=UTF-8" userId="root" password="password" /> <javaModelGenerator targetPackage="xxx.account.model" targetProject="D:\workspace\项目名\src\main\java" /> <sqlMapGenerator targetPackage="xxxx.account.persistence" targetProject="D:\workspace\项目名\包名\src\main\resources" /> <javaClientGenerator targetPackage="xxxx.account.persistence targetProject="D:\\workspace\项目名\src\main\java" type="XMLMAPPER" /> <table schema="CL_DEMO" tableName="tb_user" /> <table schema="CL_DEMO" tableName="tb_role" /> <table schema="CL_DEMO" tableName="tb_permission" /> <table schema="CL_DEMO" tableName="tb_role_user" /> <table schema="CL_DEMO" tableName="tb_permission_role" /> </context> </generatorConfiguration>
插件默认会读到src/main/resources目录下的generatorConfig.xml 文件。
如果是在eclipse中,选择pom.xml文件,击右键先择Run AS——>Maven Build… ——>在Goals框中输入:mybatis-generator:generate
如果在命令行输入Maven命令即可,注意:一定是当前项目目录下运行该命令:
mvn mybatis-generator:generate
generatorConfig配置项说明
<context>元素
在MBG的配置中,至少需要有一个<context>元素。
<context>元素用于指定生成一组对象的环境。
例如指定要连接的数据库,要生成对象的类型和要处理的数据库中的表。运行MBG的时候还可以指定要运行的<context>。
该元素只有一个必选属性id,用来唯一确定一个<context>元素,该id属性可以在运行MBG的使用。
此外还有几个可选属性:
defaultModelType:**这个属性很重要**,这个属性定义了MBG如何生成**实体类**。
targetRuntime:此属性用于指定生成的代码的运行时环境。
<javaTypeResolver> 元素
这个元素的配置用来指定JDBC类型和Java类型如何转换。
该属性有一个可以配置的<property>元素。
可以配置的属性为forceBigDecimals,该属性可以控制是否强制DECIMAL和NUMERIC类型的字段转换为Java类型的java.math.BigDecimal,默认值为false,一般不需要配置。
默认情况下的转换规则为:
如果精度>0或者长度>18,就会使用java.math.BigDecimal
如果精度=0并且10<=长度<=18,就会使用java.lang.Long
如果精度=0并且5<=长度<=9,就会使用java.lang.Integer
如果精度=0并且长度<5,就会使用java.lang.Short
如果设置为true,那么一定会使用java.math.BigDecimal,配置示例如下:
<javaTypeResolver >
<property name="forceBigDecimals" value="true" />
</javaTypeResolver>
<javaClientGenerator> 元素用于生成Mapper接口。
type:type=XMLMAPPER所有的方法都在XML中,接口调用依赖XML文件。
targetPackage:生成实体类存放的包名,一般就是放在该包下。
targetProject:指定目标项目路径,使用的是文件系统的绝对路径。
trimStrings:是否对数据库查询结果进行trim操作,如果设置为true就会生成类似这样public void setUsername(String username) {this.username = username == null ? null : username.trim();}的setter方法。默认值为false。
<table> 该元素用来配置要通过内省的表。只有配置的表才会生成实体类和其他文件。
enableXXX:XXX代表多种SQL方法,该属性用来指定是否生成对应的XXX语句
<update id="updateByExample" parameterType="map"> update lk_user set id = #{record.id,jdbcType=NUMERIC}, account = #{record.account,jdbcType=VARCHAR}, password = #{record.password,jdbcType=VARCHAR}, is_removed = #{record.isRemoved,jdbcType=CHAR}, gmt_create = #{record.gmtCreate,jdbcType=TIMESTAMP}, gmt_modified = #{record.gmtModified,jdbcType=TIMESTAMP}, creator_id = #{record.creator,jdbcType=NUMERIC}, modifier_id = #{record.modifier,jdbcType=NUMERIC} <if test="_parameter != null"> <include refid="Update_By_Example_Where_Clause" /> </if> </update>
<table>元素的子元素
<generatedKey>这个元素用来指定自动生成主键的属性(identity字段或者sequences序列)。
如果指定这个元素,MBG在生成insert的SQL映射文件中插入一个<selectKey>元素,非常重要。
这个元素包含下面两个必选属性:
column:生成列的列名。
sqlStatement:将返回新值的 SQL 语句。如果这是一个identity列,您可以使用其中一个预定义的的特殊值。
预定义值如下:
Cloudscape、DB2、DB2_MF、Derby、HSQLDB、Informix、MySql、SqlServer、SYBASE、JDBC:
这会配置MBG使用MyBatis3支持的JDBC标准的生成key来生成代码。 这是一个独立于数据库获取标识列中的值的方法。
重要: 只有当目标运行为MyBatis3时才会产生正确的代码。 如果与iBATIS2一起使用目标运行时会产生运行时错误的代码。
这个元素还包含两个可选属性:
配置示例一:
<table tableName="user login info" domainObjectName="UserLoginInfo"> <generatedKey column="id" sqlStatement="Mysql"/> </table>
对应的生成的结果:
<insert id="insert" parameterType="test.model.UserLoginInfo"> <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.Integer"> SELECT LAST_INSERT_ID() </selectKey> insert into `user login info` (Id, username, logindate, loginip) values (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{logindate,jdbcType=TIMESTAMP}, #{loginip,jdbcType=VARCHAR}) </insert>
这个插件,有很多地方需要自定义。
例如,删除操作,它使用的是物理删除,一般我们都使用逻辑删除。
我们可以通过修改源码,然个性化生成的代码。
IntrospectedTableMyBatis3Impl true属性是用来控制是否合并生成xml文件,这里显然默认就是合并
XMLMapperGenerator增加后缀Ext
OutputUtilities更改xml空格
UpdateByPrimaryKeySelectiveElementGenerator 增加is_delete=n
SelectByPrimaryKeyElementGenerator 增加is_delete=n
修改DeleteByPrimaryKeyMethodGenerator,可以修改delete方法的入参
大对象类型的处理:
mybatis-generator默认会把所有jdbcType为:BINARY、BLOB、CLOB、LONGVARBINARY、LONGVARCHAR、VARBINARY这些类型都作为大对象,
反应出来的效果就是生成的pojo类会多一个类名+WithBLOBs.java的文件(含有的大对象个数大于1时),
而在XML里面也会增加一个id为ResultMapWithBLOBs的resultMap,它继承BaseResultMap。