MyBatis Generator 详解
MyBatis Generator 简称 MBG,
MBG 是一个专门为 MyBatis 框架使用者定制的代码生成器,
可以快速的根据数据库表生成对应的映射文件,接口,以及实体类。
支持基本的增删改查,以及 QBC 风格的条件查询。
但是数据库表连接、存储过程等复杂 SQL 需要自己编写。
XML 配置文件
文件头
使用最新版的 MBG 需要使用上面的xml头,配置文件必须包含下面的doctype ( 文件类型 )
<?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.xml)解析使用的外部属性文件
- 引入属性文件后,可以在配置中使用 ${property}这种形式的引用,通过这种方式引用属性文件中的属性值
通过resource或者url来指定属性文件的位置,这两个属性只能二选一,不能同时用
< classPathEntry >
最常见的用法是通过这个属性指定驱动的路径
classPathEntry 只在下面这两种情况下才有效:因此,如果你需要加载其他用途的jar包,classPathEntry 起不到作用,不能这么写
这个元素用于:指定生成一组对象的环境
- 该元素只有一个必选属性 id,用来唯一确定一个 < context > 元素。还有几个可选属性
- defaultModelType:这个属性定义了 MBG 如何生成实体类 ,有以下可选值
- conditional:这是默认值,这个模型和下面的hierarchical类似。但是,如果那个单独的类将只包含一个字段,将不会生成一个单独的类。 因此,如果一个表的主键只有一个字段,那么不会为该字段生成单独的实体类,会将该字段合并到基本实体类中
- flat:该模型为每一张表只生成一个实体类。这个实体类包含表中的所有字段。这种模型最简单,推荐使用
- hierarchical:如果表有主键,那么该模型会产生一个单独的主键实体类。如果表还有 BLOB 字段,则会为表生成一个包含所有 BLOB 字段的单独的实体类,然后为所有其他的字段生成一个单独的实体类。 MBG会在所有生成的实体类之间维护一个继承关系
- targetRuntime:此属性用于指定生成的代码的运行时环境。该属性有以下可选值:
- MyBatis3DynamicSql:这是默认值
- MyBatis3Kotlin:
- MyBatis3:
- MyBatis3Simple:
- introspectedColumnImpl:该参数可以指定扩展org.mybatis.generator.api.IntrospectedColumn该类的实现类
- defaultModelType:这个属性定义了 MBG 如何生成实体类 ,有以下可选值
- 包含以下子元素,有严格的配置顺序
- < property > (0个或多个)
- < plugin > (0个或多个):用来定义一个插件,用于扩展 或 修改 MBG 代码生成器生成的代码
- < commentGenerator > (0个或1个):注释生成器
- < connectionFactory >
- < jdbcConnection > (1个):用于指定数据库连接信息
- < javaTypeResolver > (0个或1个):用于指定 JDBC 类型和 Java 类型如何转换
- < javaModelGenerator > (1个):
- < sqlMapGenerator > (0个或1个):
- < javaClientGenerator > (0个或1个):
- < table > (1个或多个):
- < generatedKey > (0个或1个)
- < columnRenamingRule > (0个或1个)
- < columnOverride > ( 0个或多个)
- < ignoreColumn > (0个或多个)
1.
name的可选值:autoDelimitKeywords、beginningDelimiter、endingDelimiter、javaFileEncoding、javaFormatter、xmlFormatter
autoDelimitKeywords:当表名或者字段名为SQL关键字的时候,可以设置该属性为 true,MBG 会自动给表名或字段名添加()分隔符<br />beginningDelimiter 和 endingDelimiter:的默认值为双引号("),在Mysql中不能这么写,所以还要将这两个默认值改为反单引号()
javaFileEncoding:设置要使用的 Java 文件的编码,默认使用当前平台的编码
javaFormatter 和 xmlFormatter:如果你想使用模板来定制生成的 java 文件和 xml 文件的样式,你可以通过指定这两个属性的值来实现
MyBatis Generator 的使用
generatorConfig.xml 必须放在 resources 目录下
生成需要用到的 Maven 插件
<plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.4.0</version><dependencies><!-- Java 连接 MySQL 的驱动程序 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql-connector-java.version}</version></dependency></dependencies></plugin>
MyBatis3 简洁配置
<!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="simple" targetRuntime="MyBatis3Simple">
<commentGenerator>
<!-- 是否去除自动生成的注释 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库连接的信息 -->
<jdbcConnection
driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3307/community?serverTimezone=Hongkong"
userId="root" password="root">
</jdbcConnection>
<!-- 实体类生成的位置 -->
<javaModelGenerator targetPackage="example.model" targetProject="src/main/java"/>
<!-- XxxMapper.xml 映射文件生成的位置 -->
<sqlMapGenerator targetPackage="example.mapper" targetProject="src/main/java">
</sqlMapGenerator>
<!-- Mapper.java 接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="example.mapper" targetProject="src/main/java"/>
<!-- 数据库表名字和我们的 entity 类对应的映射指定 -->
<table tableName="t_user" domainObjectName="User">
<generatedKey column="id" sqlStatement="Mysql"/>
</table>
</context>
</generatorConfiguration>
