MyBatis-Generator可以根据数据库表结构自动在项目对应目录内创建Model(POJO、DO或PO 叫法不同,表达意思一致)、Mapper接口类和XXXMapper.xml文件
MyBatis Generator 官方文档 www.mybatis.org/generator/i…
mybatis-generator-maven-plugin mybatis.org/generator/r…
Maven插件mybatis-generator-maven-plugin
重要配置项
- configurationFile 指定 MyBatis Generator XML 配置文件的位置,默认值是 ${basedir}/src/main/resources/generatorConfig.xml
- overwrite 是否覆盖生成的Java文件,注:overwrite 配置只影响java 类, xml 文件是不受这个控制的,xml永远是merge追加的,无法配置为overwrite,默认值 false
- verbose 生成过程中是否输出详细信息
pom配置
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<!-- MyBatis generator 配置文件位置 -->
<configurationFile>src/main/resources/mybatis/GeneratorConfig.xml</configurationFile>
<!-- 生成过程中是否输出详细信息 -->
<verbose>true</verbose>
<!-- 允许覆盖生成的Java文件,overwrite选项只能让java文件被覆盖,xml永远是merge追加,不可配置为overwrite -->
<overwrite>true</overwrite>
</configuration>
<!-- 添加mysql-connector-java依赖后就不需要再mybatis配置文件中用classPathEntry手动指定驱动位置了 -->
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
运行命令mybatis-generator:generate
(generatorConfig配置较长,因此先介绍运行命令)MyBatis Generator 只提供一个 goal mybatis-generator:generate
- Idea中,在 Maven Projects 面板上点开 Plugins 中的 mybatis-generator 插件,双击运行其中的 mybatis-generator:generate goals 即可。
- 命令行通过 mvn 命令执行
mvn mybatis-generator:generate
或
mvn -Dmybatis.generator.overwrite=true mybatis-generator:generate
配置文件 generatorConfig.xml
作用
- 如何连接数据库
- 生成Model(POJO、DO或PO 叫法不同,表达意思一致)、Mapper接口类和XXXMapper.xml文件对应目录
- 生成哪些表的mapper文件
注意事项
GeneratorConfig无法引用.yml配置文件?
原因:generatorConfig.xml中不支持引用yml配置文件,必须引用.properties配置文件,可以自定义,不需要是application.properties
mybatis-generator:generate执行时报驱动mysql-connector-java找不到
原因:classpathEntry标签可选,为数据库的JDBC驱动,需替换成自己本地驱动地址,mybatis-generator-maven-plugin添加mysql-connector-java 依赖后就不需要在这里指定驱动了,建议使用这种方式
mybatis generator 无法覆盖 mapper.xml或者UnmergeableXmlMappersPlugin插件找不到
原因:mybatis-generator-maven-plugin 中的 overwrite选项只能让java文件被覆盖,xml永远是merge追加,不可配置为overwrite,mbg1.3.7新增的这个plugin(org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin)可保证永远覆盖xml,使用1.3.5或者1.3.3会找不到该插件
mybatis generator 无法覆盖 mapper.xml
原因:javaClientGenerator标签下的type属性为选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下):
1. ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML;
2. MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中;
3. XMLMAPPER:会生成Mapper接口,接口完全依赖XML;
注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER
具体配置
各配置含义已在注释中标明更详细的配置可参考http://www.mybatis.org/generator/configreference/xmlconfig.html
<?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>
<!-- 加载Spring Boot配置文件,为下面读取数据库信息准备,只能读取properties文件,不能读取yml文件 -->
<!-- <properties resource="application.properties">-->
<!-- 执行generator插件生成文件的命令:mvn mybatis-generator:generate -->
<!-- classpathEntry 可选,为数据库的JDBC驱动,需替换成自己本地驱动地址,mybatis-generator-maven-plugin添加mysql-connector-java
依赖后就不需要在这里指定驱动了,建议使用这种方式
-->
<!-- <classPathEntry-->
<!-- location="/Users/kk/.m2/repository/mysql/mysql-connector-java/5.1.46/mysql-connector-java-5.1.46
.jar"/>-->
<!-- 一个数据库一个context -->
<context id="mysqlTables" targetRuntime="MyBatis3" defaultModelType="flat">
<!-- 自动界定sql关键词 -->
<property name="autoDelimitKeywords" value="true"/>
<!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!-- 生成的Java文件编码 -->
<property name="javaFileEncoding" value="UTF-8"/>
<!--覆盖生成XML文件-->
<!-- mybatis-generator-maven-plugin 中的 overwrite选项只能让java文件被覆盖,xml永远是merge追加,不可配置为overwrite,mbg1.3.7新增的这个plugin可保证永远覆盖xml -->
<!-- http://mybatis.org/generator/reference/plugins.html -->
<!-- 如果使用 ANNOTATEDMAPPER 类型的 javaClientGenerator 即完全不需要xml文件,则完美解决此问题,mybatis-generator-maven-plugin版本需要为1.3
.7或以上,1.3.2和1.3.5均会报找不到该插件 -->
<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>
<!-- 分页插件 https://github.com/qiukeren/mybatis-generator-limit-plugin -->
<!-- <plugin type="org.mybatis.generator.plugins.MySQLLimitPlugin"/>-->
<!-- lombok 插件 https://github.com/softwareloop/mybatis-generator-lombok-plugin -->
<!-- <plugin type="com.softwareloop.mybatis.generator.plugins.LombokPlugin"/>-->
<!-- 在<commentGenerator>中,建议一定要保留suppressAllComments属性(使用默认值false),一定要取消时间戳suppressDate(设为true),避免在版本控制器中重复提交生成的代码。 -->
<commentGenerator>
<property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->
<property name="suppressDate" value="true"/> <!-- 是否生成注释代时间戳-->
</commentGenerator>
<!-- 数据库链接地址账号密码,读取 application.properties 中的配置,如果没有设置properties格式的配置就需要在这里配置,在xml中写&,会因为未转义而报错要将&写成& -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
&serverTimezone=Asia/Shanghai&useSSL=false"
userId="root"
password="root">
<!-- MySQL 不支持 schema 或者 catalog 所以需要添加这个。使用8.x的 mysql-connector-java 时不加此项会出现读取到 information_schema 中的表 -->
<!-- 参考 : http://www.mybatis.org/generator/usage/mysql.html -->
<!-- <property name="nullCatalogMeansCurrent" value="true"/>-->
</jdbcConnection>
<!-- 指定生成的类型为java类型,避免数据库中number等类型字段,是否使用bigDecimal,false可自动转化为其他类型(Long、Integer、Short等) -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成model模型,对应的包,存放位置可以指定具体的路径,如/ProjectName/src,也可以使用MyWebservice/src/main/java来自动生成
负责:1,key类(见context的defaultModelType);2,java类;3,查询类
targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制;
targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录
-->
<javaModelGenerator targetPackage="com.kk.domain.entity.DO"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimString" value="true"></property>
</javaModelGenerator>
<!--对应的xml mapper文件 -->
<sqlMapGenerator targetPackage="mappers" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 对应的mapper接口(Dao接口)类 -->
<!-- 对于mybatis来说,即生成Mapper接口,注意,如果没有配置该元素,那么默认不会生成Mapper接口
targetPackage/targetProject:同javaModelGenerator
type:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下):
1,ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML;
2,MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中;
3,XMLMAPPER:会生成Mapper接口,接口完全依赖XML;
注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER
-->
<javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.kk.domain.mapper"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- tables 配置好表名和对应的实体对象名 maven命令为:mybatis-generator:generate-->
<table tableName="t_order" domainObjectName="OrderDO"
enableCountByExample="false" enableUpdateByExample="false"
enableSelectByExample="true" enableDeleteByExample="false"
selectByExampleQueryId="true">
<property name="useActualColumnNames" value="false"/>
</table>
</context>
</generatorConfiguration>
示例代码
mybatis-generator-demo 下的db-mysql-mabits