jdk1.8、MyBatis3.4.6、MySQL数据库5.6.45、Eclipse Version: 2019-12 M2 (4.14.0)

MyBatis从入门到精通(第5章):MyBatis代码生成器

MyBatis Generator ,后文中会使用缩写MBG来代替。MBG下载

MBG 通过丰富的配置可以生成不同类型的代码,代码包含了数据库表对应的实体类 、Mapper 接口类、 Mapper XML 文件和 Example 对象等,

这些代码文件中几乎包含了全部的单表操作方法 。如果大家更喜欢看中文文档,也可以查看由作者组织翻译的中文文档,链接是 http ://

MyBatis Generator解决了对数据库操作有最大影响的
一些简单的 CRUD(插入,查询,更新,删除)操作,
你仍然需要对联合查询和存储过程手写 SQL 和 对象 。


5.1 XML 配置详解

MBG 具有丰富的配置可供使用 , 这些配置需要以 XML 形式的标签和属性来实现,所以本节就对 MBG 的 XML 配置进行详细介绍。

generatorConfig.xml 首先按照 MBG 的要求添加 XML 的文件头。在文件头之后,需要写上 XML 文件的根节点 generatorConfiguration 。

<?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 标签下的3个子级标签,分别是:properties、classPathEntry 、context 。在配置这3个标签的时候,必须严格按照举例这些标签的顺序进行配置。

第一个是 properties 标签用于指定一个需要在配置中解析使用的外部属性文件,引入属性文件后,可以在配置中使用 ${property}这种形式的引用,通过这种方式引用属性文件中的属性值,对于后面需要配置的 JDBC 信息会很有用。properties 标签包含 resource 和 url 两个属性,只能使用其中一个属性来指定,同时出现则会报错。

  • resource:指定 classpath 下的属性文件,类似 com/myproject/generatorConfig.properties 这样的属性值。
  • url:指定文件系统上的特定位置,例如 file:///C:/myfolder/generatorConfig.properties 。

第二个是 classPathEntry 标签。这个标签可以配置多个,也可以不配置。classPathEntry 标签最常见的用法是通过属性 location 指定驱动的路径,代码如下。

< classPathEntry location= "E:\mysql\ mysql-connector-java- 5.1.29.jar"/>

第三个是 context 标签。这个标签是要重点讲解的,该标签至少配置 1 个,可以配置多个。

< context id= "Mysql" targetRuntime= "MyBatis3Simple" defaultModelType= "flat">

  


5.1.1 property标签

数据库 字段中的分隔符。在MySQL中可以使用反单引号“ ` ”作为分隔符,例如

`user info`

通过分隔符可以将其中的内容作为一个整体的字符串进行处理,当SQL中有数据库关键字时,使用反单引号括住关键字,可以避免数据库产生错误。

MBG 中维护了一个关键字列表,当数据库的字段或表与这些关键字一样时, MBG 会自动给这些字段或表添加分隔符。关键字列表可以查看 MBG 中的 org.mybatis.generator.internal.db.SqlReservedWords 类。

        <property name="autoDelimitKeywords" value="true"/>
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<property name="javaFileEncoding" value="UTF-8"/>

5.1.2 plugin 标签

plugin 标签可以配置 0 个或者多个,个数不受限制。

plugin 标签用来定义一个插件,用于扩展或修改通过 MBG 生成的代码 。 该插件将按在配置中配置的顺序执行。

下面要介绍的缓存插件的全限定名称为 org.mybatis.generator.plugins.CachePlugin 。这个插件可以在生成的 SQL XML 映射文件中增加一个 cache 标签。只有当 targetRuntime 为 MyBatis3 时,该插件才有效。

在 MBG 默认包含的插件中,除了缓存插件外,还有序列化插件、 RowBounds 插件、ToString 插件等,关于这些插件的介绍可以查看 MBG 文档。查看英文文档:http://www.mybatis.org/generator/reference/plugins.html

5.1.3 commentGenerator 标签

该标签用来配置如何生成注释信息,最多可以配置 l 个 。

一般情况下,由于 MBG 生成的注释信息没有实用任何价值 ,而且有时间戳的情况下每次生成的注释都不一样,使用版本控制的时候每次都会提交,因而一般情况下都会屏蔽注释信息,可以如下配置。

        <commentGenerator>
<property name="suppressDate" value="true"/>
<property name="addRemarkComments" value="true"/>
</commentGenerator>

5.1.4  jdbcConnection 标签

jdbcConnection 用于指定 MBG 要连接的数据库信息,该标签必选,并且只能有一个 。

        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai"
userId="root"
password="">
</jdbcConnection>

5.1.5 javaTypeResolver 标签

该标签的配置用来指定 JDBC 类型和 Java 类型如何转换,最多可以配置一个。

该标签提供了一个可选的属性 type。另外,和 commentGenerator 类似,该标签提供了默认的实现 DEFAULT,一般情况下使用默认即可,需要特殊处理的情况可以通过其他标签配置来解决,不建议修改该属性。

5.1.6 javaModelGenerator 标签

该标签必须配置一个,并且最多配置一个。

一个表对应多个类时使用并不方便,所以前面推荐使用 flat ,保证一个表对应一个实体类。

该标签还支持以下几个 property 子标签属性。

        <javaModelGenerator targetPackage="test.model" targetProject="src\main\java">
<property name="trimStrings" value="true" />
<property name="rootClass" value="tk.mybatis.simple.model.BaseEntity" />
</javaModelGenerator>

5.1.7 sqlMapGenerator 标签

该标签用于配置 SQL 映射生成器 ( Mapper.xml 文件)的属性,该标签可选,最多配置一个 。

如果 targetRuntime 设置为 MyBatis3 ,则只有当 javaClientGenerator 配置需要 XML时,该标签才必须配置一个 。

该标签还有一个可选的 property 子标签属性 enableSubPackages ,如果为 true ,
MBG 会根据 catalog 和 schema 来生成子包。如果为 false 就会直接用 targetPackage
属性,默认为 false 。

sqlMapGenerator 配置示例如下。

        <sqlMapGenerator targetPackage="test.xml"
targetProject="src\main\resources"/>

5.1.8 javaClientGenerator 标签

该标签用于配置 Java 客户端生成器( Mapper 接口)的属性 , 该标签可选 , 最多配置一个 。
如果不配置该标签,就不会生成 Mapper 接口。

该标签还有一个可选属性 implementationPackage ,如果指定了该属性,Mapper 接口的实现类就会生成在这个属性指定的包中。

javaClientGenerator 标签配置示例如下。

<javaClientGenerator type="XMLMAPPER" targetPackage="test.dao"  targetProject="src\main\java"/>

5.1.9 table 标签

只有在 table 中配置过的表,才能经过上述其他配置生成最终的代码,该标签至少要配置一个,可以配置多个 。

table 标签有一个必选属性 tableName ,该属性指定要生成的表名,可以使用 SQL 通配符匹配多个表。

例如要生成全部的表,可以如下配置。

        <table tableName="%">
<generatedKey column="id" sqlStatement="MySql"/>
</table>

除了 property 子标签外, table 还包含以下子标签。
      • generatedKey ( 0 个或 1个)

  • columnRenamingRule ( 0 个或 1个)
  • columnOverride ( 0 个或多个)
  • ignoreColumn ( 0 个或多个)

5.1.9.1  generatedKey 标签

该标签用来指定自动生成主键的属性( identity 字段或者 sequences 序列)。如果指定这个标签, MBG 将在生成 insert 的 SQL 映射文件中插入一个 selectKey 标签。这个标签非常重要,而且只能配置一个 。

该标签包含以下两个必选属性。

· column:生成列的列名。

· sqlStatement :返回新值的 SQL 语句。如果这是一个 identity 列,则可以使用其中一个预定义的的特殊值,预定义值如下。

<generatedKey column="id" sqlStatement="MySql"/>

 5.1.9.2 columnRenamingRule 标签

该标签最多可以配置一个,使用该标签可以在生成列之前对列进行重命名。这对于那些由于存在同一前缀的字段因此想在生成属性名时去除前缀的表非常有用。假设一个表包含以下列。

· CUST_BUSINESS_NAME

· CUST_STREET_ADDRESS

· CUST_CITY

· CUST_STATE

生成的所有属性名中如果都包含 CUST 的前缀可能会让人感觉不舒服。这些前缀可以通过如下方式定义重命名规则。

< columnRenamingRule searchString= "^CUST_" replaceString= ""/>

注意,MBG 内部使用 java.util.regex.Matcher.replaceAll 方法实现这个功能。请参阅有关该方法的文档和在 Java 中使用正则表达式的例子。

当 columnOverride 匹配一列时, columnRenamingRule 标签会被忽略。 columnOverride 优先于重命名的规则。

该标签有一个必选属性 searchString ,用于定义将要被替换的字符串的正则表达式。

该标签有一个可选属性 replaceString ,用于替换搜索字符串列每一个匹配项的字符串。如果没有指定,就使用空字符串。

关于 table 的 property 属性 useActualColumnNames 对此标签的影响,可以查看完整文档。

 5.1.9.3 columnOverride 标签

该标签用于将某些默认计算的属性值更改为指定的值,标签可选,可以配置多个。

该标签有一个必选属性 column,表示要重写的列名。

该标签有多个可选属性,具体如下。

· property:要使用的 Java 属性的名称。如果没有指定,MBG 会根据列名生成。例如,如果一个表的一列名为 STRT_DTE,MBG 会根据 table 的 useActualColumnNames 属性生成 STRT_DTE 或 strtDte。

· javaType:列的属性值为完全限定的 Java 类型。如果需要,可以覆盖由 JavaTypeResolver 计算出的类型。

· jdbcType:列的 JDBC 类型(如 INTEGER、DECIMAL、NUMERIC、VARCHAR 等)。如果需要,可以覆盖由 JavaTypeResolver 计算出的类型。

· typeHandler :根据用户定义的需要用来处理列的类型处理器。必须是一个继承自 TypeHandler 接口的全限定的类名。如果没有指定或者是空白,MyBatis 会用默认的类型处理器来处理类型。 切记 :MBG 不会校验这个类型处理器是否存在或可用,MGB 只是简单地将值插入到已生成的 SQL 映射的配置文件中。

· delimitedColumnName :指定是否应在生成的 SQL 的列名称上增加分隔符。如果列的名称中包含空格,MGB 会自动添加分隔符,所以只有当列名需要被强制为一个合适的名字或者列名是数据库中的保留字时,才是必要的。

columnOverride 配置示例如下。

5.1.9.4 ignoreColumn 标签

该标签可以用来屏蔽不需要生成的列,该标签可选,可以配置多个。

该标签有一个必选属性 column,表示要忽略的列名。

该标签还有一个可选属性 delimitedColumnName ,标识匹配列名的时候是否区分大小写。如果为 true 则区分,默认值为 false,表示不区分大小写。


5.2  一个配置参考示例

在项目的 src/main/resources 中创建一个 generator 文件夹(Folder),在该目录下创建一个
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> <properties resource="jdbc.properties"/>
<classPathEntry location="C:\Users\kangy\.m2\repository\mysql\mysql-connector-java\5.1.45\mysql-connector-java-5.1.45.jar"/> <!-- targetRuntime="MyBatis3Simple"就不会生成与Example相关的代码和方法 -->
<context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
<!-- 当数据库的字段或表与这些关键字一样时, MBG会自动给这些字段或表添加分隔符。
关键字列表可以查看 MBG中的 org.mybatis.generator.internal.db.SqlReservedWords 类。 -->
<property name="autoDelimitKeywords" value="true"/>
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<property name="javaFileEncoding" value="UTF-8"/>
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="addRemarkComments" value="true"/>
</commentGenerator> <jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/o2o"
userId="${jdbc.username}"
password="${jdbc.password}">
</jdbcConnection> <!-- 实体类 -->
<javaModelGenerator targetPackage="test.model" targetProject="src\main\java">
<property name="trimStrings" value="false" />
<!-- 设置所有实体类的基类 -->
<!-- <property name="rootClass" value="cn.bjut.model.BaseEntity" /> -->
</javaModelGenerator>
<!-- XML文件 -->
<sqlMapGenerator targetPackage="test.xml" targetProject="src\main\resources">
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- DAO接口 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="src\main\java"/> <table tableName="%">
<generatedKey column="id" sqlStatement="MySQL"/>
</table>
</context> </generatorConfiguration>

5.3 运行Mybatis Generator

5.3.1 使用Java编写代码运行

使用Java编码不方便的地方在于,它和当前项目是绑定在一起的。

综合来说,这种方式出现的问题最少,配置最容易,因此推荐使用。

generatorConfig.xml配置的一些特殊的类,只要在当前项目中,或者在当前项目的classpath中,就可以直接使用。

5.3.4 使用Eclipse插件运行

安装Eclipse插件

从 MBG 的发布页面中,下载插件,此处使用1.3.7版本 。

下载插件后,在 Eclipse 中选择菜单 Help 中的 Install New Software ,打开如图 5-3 所示的窗口 。

点击 Add 按钮 , 在弹出的窗口中选择 Archive,选择下载完成的 MBG 插件,输入 Name MBG后,点击 OK。

  从下拉列表中选择全部的 MyBatis Generator,点击 Next , 一步步完成安装,安装完成后重启 Eclipse 。 

  注意:配图安装的详细过程,可以点击上方超链接查看。

使用 Eclipse 插件 

打开之前在 src/main/resources 下面创建的 generator/generatorConfig.xml 文件,对这个文件
做一些简单修改 。
Eclipse 插件的运行方式有点特殊, JDBC 驱动需要通过 classPathEntry 进行配置,其他定制的类只要在当前项目或当前项目的 classpath 中即可使用 。


 

<?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="C:\Users\kangy\.m2\repository\mysql\mysql-connector-java\8.0.17\mysql-connector-java-8.0.17.jar"/> <context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<property name="javaFileEncoding" value="UTF-8"/> </context> </generatorConfiguration>

===========================================================================================

参考的资料:MyBatis Generator中文文档

MyBatis从入门到精通(第5章):5.4 Example 介绍

Intellij IDEA中mybatis-generator自动生成

end

MyBatis从入门到精通(第5章):MyBatis代码生成器的更多相关文章

  1. MyBatis从入门到精通(第5章):5.4 Example 介绍

    jdk1.8.MyBatis3.4.6.MySQL数据库5.6.45.Eclipse Version: 2019-12 M2 (4.14.0) MyBatis从入门到精通(第5章):MyBatis代码 ...

  2. MyBatis从入门到精通(第9章):Spring集成MyBatis(下)

    MyBatis从入门到精通(第9章):Spring集成MyBatis(下) springmvc执行流程原理 mybatis-spring  可以帮助我们将MyBatis代码无缝整合到Spring中.使 ...

  3. MyBatis从入门到精通(第9章):Spring集成MyBatis(中)

    MyBatis从入门到精通(第9章):Spring集成MyBatis(中) 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法.应该将应用自身的设计和具体 ...

  4. MyBatis从入门到精通(第9章):Spring集成MyBatis(上)

    MyBatis从入门到精通(第9章):Spring集成MyBatis(上) Spring是一个为了解决企业级Web应用开发过程中面临的复杂性,而被创建的一个非常流行的轻量级框架. mybatis-sp ...

  5. MyBatis从入门到精通:第一章实体类与Mapper.xml文件

    实体类: package tk.mybatis.simple.model; public class Country { public Long getId() { return id; } publ ...

  6. MyBatis从入门到精通:第一章配置MyBatis

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...

  7. MyBatis从入门到精通(第3章):MyBatis注解方式的基本使用

    MyBatis 注解方式就是将 SQL 语句直接写在DAO层的接口上. 在黑马录制的2018年双元视频课:\08 SSM整合案例[企业权限管理系统]\07.订单操作  有使用MyBatis注解进行多表 ...

  8. MyBatis从入门到精通(第6章):MyBatis 高级查询->6.1.2高级结果映射之一对多映射

    jdk1.8.MyBatis3.4.6.MySQL数据库5.6.45.IntelliJ IDEA 2019.3.1 本章主要包含的内容为 MyBatis 的高级结果映射,主要处理数据库一对一.一对多的 ...

  9. MyBatis从入门到精通(第6章):MyBatis 高级查询->6.1.1高级结果映射之一对一映射

    jdk1.8.MyBatis3.4.6.MySQL数据库5.6.45.IntelliJ IDEA 2019.2.4 本章主要包含的内容为 MyBatis 的高级结果映射,主要处理数据库一对一.一对多的 ...

随机推荐

  1. 080-PHP的if与elseif用法

    <?php /* 正确的使用方法: */ $a = 10; $b = 20; if ($a > $b): echo $a . "大于" . $b; elseif ($a ...

  2. 二、【未来】React环境安装:npx

    搭建React的开发环境的第二种方法(新-未来推荐): https://reactjs.org/docs/create-a-new-react-app.html 一. npx简介: 1. npm v5 ...

  3. category添加属性

    category添加属性 面试题 Category的实现原理,以及Category为什么只能加方法不能加属性. Category中有load方法吗?load方法是什么时候调用的?load 方法能继承吗 ...

  4. MFC消息映射及消息处理函数原型

    MFC把消息主要分为三大类: 1. 标准Windows消息(WM_XXX) 2. 命令消息(WM_COMMAND):凡由UI对象产生的消息都是这种命令消息,可能来自菜单或加速键或工具栏按钮. 3. 控 ...

  5. windows driver 写数据到txt

    HANDLE hFile; OBJECT_ATTRIBUTES oa; IO_STATUS_BLOCK iosb; LARGE_INTEGER li; UNICODE_STRING strPath = ...

  6. JS - 解决引入 js 文件无效的问题

    增加 type 即可  <script type="text/javascript" src="....js"></script>

  7. Discuz中常用的编辑器代码

    .[ b]文字:在文字的位置可以任意加入您需要的字符,显示为粗体效果. .[ i]文字:在文字的位置可以任意加入您需要的字符,显示为斜体效果. .[ u]文字:在文字的位置可以任意加入您需要的字符,显 ...

  8. 海外Essay写作如何减少重复用词

    很多海外留学生在Essay写作时往往不善于对单词进行变化,不能将同一个意思用不同的方式表达出来,使得Essay显得单调乏味最终拿不到高分.小编建议大家应该尽量减少Essay写作中的重复用词.本文将为大 ...

  9. Linux笔记01

    linux目录结构 : linux只有一个目录. usr:等价于programfiles: etc:存放系统配置 root:管理员(超级用户)目录, home:存放其他用户的目录: lib:共享包: ...

  10. expdp远程导出oracle库

    1.手动在本地建目录 E:\lvchengData 2.执行命令 create or replace directory data as 'E:\lvchengData\'; 3.为本地system用 ...