MyBaits Generator

news/2024/11/28 7:29:59/

参考文档

MyBatis Generator Core – Introduction to MyBatis Generator

MyBatis Generator 详解_enablesubpackages_isea533的博客-CSDN博客

一文解析 MyBatis Generator 的使用及配置 - 掘金

1. Introduction

MyBatis Generator (MBG) 是 MyBatis MyBatis的代码生成器。它将生成所有版本的 MyBatis 的代码。它将内省(introspect)数据库表(或许多表)并生成可用于访问表的工件。这减少了设置对象和配置文件以与数据库表交互的初始麻烦。MBG 力求对大部分简单 CRUD(创建、检索、更新、删除)的数据库操作产生重大影响。您仍然需要为连接查询或存储过程手动编写 SQL 和对象代码。

2. Quick Start Guide

MyBatis Generator (MBG) 根据其配置方式生成不同风格的代码。

a. Sample Configuration for 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="MyBatis3"><jdbcConnection driverClass="org.hsqldb.jdbcDriver"connectionURL="jdbc:hsqldb:mem:aname" /><javaModelGenerator targetPackage="example.model" targetProject="src/main/java"/><sqlMapGenerator targetPackage="example.mapper" targetProject="src/main/resources"/><javaClientGenerator type="XMLMAPPER" targetPackage="example.mapper" targetProject="src/main/java"/><table tableName="FooTable" /></context>
</generatorConfiguration>

3. XML配置详解

a. DOCTYPE

文档需要包含以下DOCTYPE

<!DOCTYPE generatorConfiguration PUBLIC"-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

b. 根节点<generatorConfiguration>

generatorConfiguration节点没有任何属性,直接写节点即可,如下:

<generatorConfiguration><!-- 具体配置内容 -->
</generatorConfiguration>

子元素:

  • <properties> (0 or 1)
  • <classPathEntry> (0..N)
  • <context> (1..N)

ⅰ. <properties>

<properties> 元素用于指定用于解析配置的外部属性文件。引入属性文件后,可以在配置中使用 ${property}这种形式的引用,通过这种方式引用属性文件中的属性值。

必要属性

One, and only one, of the following attributes is required.

Attribute

Description

resource

The qualified name of the property file. When specifying the resource, the classpath will be searched for the properties file. So a file specified as com/myproject/generatorConfig.properties must exist in the com.myproject package.

url

A URL value to use for the property file. This can be used to specify a property file in a specific place on the file system when used in a form like file:///C:/myfolder/generatorConfig.properties.

ⅱ. <classPathEntry>

<classPathEntry> 元素用于将类路径位置添加到 MyBatis Generator (MBG) 运行的类路径中。

MBG 在这些实例中从这些位置加载类:

  • 加载 JDBC 驱动程序以进行数据库自省时
  • 在 JavaModelGenerator 中加载根类以检查重写的方法时

ⅲ. <context>

<context>元素用于指定生成一组对象的环境。子元素用于指定要连接的数据库、要生成的对象类型以及要内省的表。可以在<generatorConfiguration>元素内列出多个 <context> 元素 ,以允许在 MyBatis Generator (MBG) 的同一次运行中从不同数据库生成对象,或使用不同的生成参数生成对象。

1. 必要属性

该元素只有一个必选属性id,用来唯一确定一个<context>元素

2. 可选属性

defaultModelType:定义了MBG如何生成实体类。This attribute is ignored if the target runtime is "MyBatis3Simple", "MyBatis3DynamicSql", or "MyBatis3Kotlin"

这个属性有以下可选值:

  • conditional:这是默认值,这个模型和下面的hierarchical类似,除了如果一个类只包含一个字段,将不会生成一个单独的类。 因此,如果一个表的主键只有一个字段,那么不会为该字段生成单独的实体类,会将该字段合并到基本实体类中。
  • flat:该模型为每一张表只生成一个实体类。这个实体类包含表中的所有字段。这种模型最简单,推荐使用。
  • hierarchical:如果表有主键,那么该模型会产生一个单独的主键实体类,如果表还有BLOB字段, 则会为表生成一个包含所有BLOB字段的单独的实体类,然后为所有其他的字段生成一个单独的实体类。 MBG会在所有生成的实体类之间维护一个继承关系。

targetRuntime:此属性用于指定生成的代码的运行时环境

目标运行时

评论

MyBatis3DynamicSql

这是默认值

  • 生成 Java 代码
  • 不生成XML - 专门使用MyBatis3注释
  • 生成的模型对象是“扁平的”——没有单独的主键对象
  • 生成的代码依赖于MyBatis动态SQL库
  • 生成的代码量比较少
  • 生成的代码为查询构造提供了极大的灵活性

MyBatis3Kotlin

  • 生成 Kotlin 代码
  • 不生成XML - 专门使用MyBatis3注释
  • 生成的模型对象是“扁平的”——没有单独的主键对象
  • 生成的代码依赖于MyBatis动态SQL库
  • 生成的代码量比较少
  • 生成的代码为查询构造提供了极大的灵活性

MyBatis3

这是原始的运行时。在MBG 1.3.6版本之前,MBG的大多数用法都使用这种代码风格。

  • 生成 Java 代码
  • 生成 MyBatis3 兼容的 XML 和 SQL 或 MyBatis3 兼容的带注释的接口,没有 XML
  • 生成的模型对象可能具有带有单独主键对象和/或带有 BLOB 字段的单独对象的层次结构
  • 生成的代码没有外部依赖
  • 生成的代码量非常大
  • 生成的代码构建查询的能力有限且难以扩展

MyBatis3Simple

这是 MyBatis3 运行时的简化版本。

  • 生成 Java 代码
  • 生成 MyBatis3 兼容的 XML 和 SQL 或 MyBatis3 兼容的带注释的接口,没有 XML
  • 生成的模型对象是“扁平的”——没有单独的主键对象
  • 生成的代码没有外部依赖
  • 生成的代码量比较少
  • 不生成“举例”或“选择性”方法
  • 生成的代码不包含动态查询构造方法,难以扩展

sample:

<context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">......
</context>

3. 子元素

a. <jdbcConnection> or <connectionFactory>

每个<context>元素都需要一个 <connectionFactory> 或 <jdbcConnection> 元素。

该元素需要指定jdbc连接时所需的驱动类名、URL、userId、password:

Property Name

Property Values

driverClass

This property is used to specify the fully qualified class name of the JDBC driver. This property is required for the default connection factory.

connectionURL

This property is used to specify the JDBC connection URL for the database. This property is required for the default connection factory.

userId

This property is used to specify the User ID for the connection.

password

This property is used to specify the password for the connection.

sample:

<context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat"><!-- 配置MBG要连接的数据库信息 --><jdbcConnection driverClass="${jdbc.driverClass}"connectionURL="${jdbc.connectionURL}"userId="${jdbc.userId}"password="${jdbc.password}"></jdbcConnection>
</context>
b. <javaModelGenerator>

<javaModelGenerator> 元素用于定义 Java 模型生成器的属性。该元素是<context>元素必需的子元素。

Attribute

Description

targetPackage

将放置生成的类的包

targetProject

为生成的对象指定指定一个已存在的目录

c. <javaClientGenerator>

可以配置 0 或 1 个,用于配置关于 Mapper 接口的生成,如果没有配置该元素,那么默认不会生成 Mapper 接口。

元素 javaClientGenerator 有 3 个属性,其中 targetPackage 和 targetProject 属性的配置与 javaModelGenerator 元素的原理相同,只不过这里指的是 java 目录下存放 Mapper 接口的路径。关于 type 属性,有 3 个可选值:

  • ANNOTATEDMAPPER,按照使用 Mapper 接口 + Annotation 的方式生成文件,SQL 生成在对应的 Annotation 中,不会生成 xml 文件。
  • MIXEDMAPPER,使用混合配置,会生成 Mapper 接口,并适当添加合适的 Annotation,也会有 SQL 生成在 XML 文件中。
  • XMLMAPPER,会生成 Mapper 接口,接口完全依赖 XML 文件。

注意,如果 context 元素的 defaultModelType 属性设置为 MyBatis3Simple,那么就只支持 ANNOTATEDMAPPER 和 XMLMAPPER 的方式。一般建议将 type 设置成 XMLMAPPER

需要注意的是,当你的项目中有多个 Module 时,在配置 javaModelGenerator、sqlMapGenerator 和 javaClientGenerator 元素的 targetProject 属性时,需要在前面加上当前的 Module 名称。

<!-- 用于控制Mapper接口的生成 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.macro.mall.tiny.mbg.mapper"targetProject="mall-tiny-generator\src\main\java"/>
d. <sqlMapGenerator>

可以配置 0 或 1 个,生成 SQL Map 的 xml 文件生成器。如果 javaClientGenerator 元素中配置了需要生成 xml 的话,这个元素就必须配置。

<sqlMapGenerator targetPackage="com.macro.mall.tiny.mbg.mapper" targetProject="mall-tiny-generator\src\main\resources"/>

e. <property>

用于给出该context的其他特性,官网列出了很多:MyBatis Generator Core – The,常用的如下:

Property Name

Property Values

beginningDelimiter

指定数据库标识符的开始定界符。数据库标识符(如表名、列名等)可能包含关键字、特殊字符或空格,这可能导致SQL语句出现语法错误。为了避免这种情况,可以使用开始定界符和结束定界符将标识符括起来,告诉数据库解析器这是一个标识符而不是关键字。举个例子,假设数据库中有一个名为 "order" 的表,但 "order" 是SQL关键字。如果你在 MBG 的配置中设置了 beginningDelimiter 为反引号`,那么生成的 SQL 就会像这样:SELECT * FROM `order`,数据库会将 order 视为标识符而不是关键字,从而避免了潜在的语法错误。

默认为双引号",且不同的数据库不同,Mysql为反引号`,Oracle为双引号"

endingDelimiter

标识符的结束定界符,与beginningDelimiter对应

javaFileEncoding

如果未指定,则将使用平台默认编码

Sample:

<context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat"><!-- 配置SQL语句中的前置分隔符 --><property name="beginningDelimiter" value="`"/><!-- 配置SQL语句中的后置分隔符 --><property name="endingDelimiter" value="`"/><!-- 配置生成Java文件的编码 --><property name="javaFileEncoding" value="UTF-8"/>
</context>

f. <plugin>

<plugin> 元素用于定义插件,该元素是<context>的子元素。

<context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat"><plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" /><!-- 为模型生成序列化方法--><plugin type="org.mybatis.generator.plugins.SerializablePlugin"/><!-- 为生成的Java模型创建一个toString方法 --><plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
</context>

UnmergeableXmlMappersPlugin介绍:

该插件将生成的 XML 映射器文件标记为不可合并。这将导致生成器覆盖文件,或以新名称保存文件,具体取决于覆盖设置的配置方式。

g. <table>

一个 table 元素对应一张数据库表,如果想同时为多张表生成代码,需要配置多个 table 元素;或者可以将 tableName 设置为 % 来为全部表生成代码。

必须属性tableName,即指定数据库表名称

<table>有很多可选属性,但是可能很多都不太常用,具体参见官网:<table>标签

Sample:

<table tableName="ums_admin"><!-- 生成主键的方法--><generatedKey column="id" sqlStatement="MySql" identity="true"/>
</table>

4. 配置案例

以下配置文件置于maven项目的resources资源目录中:

jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/mall_tiny?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
jdbc.userId=root
jdbc.password=root

<?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="generator.properties"/><context id="mysql" targetRuntime="MyBatis3" defaultModelType="flat"><!-- 配置SQL语句中的前置分隔符 --><property name="beginningDelimiter" value="`"/><!-- 配置SQL语句中的后置分隔符 --><property name="endingDelimiter" value="`"/><!-- 配置生成Java文件的编码 --><property name="javaFileEncoding" value="UTF-8"/><plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" /><!-- 为模型生成序列化方法--><plugin type="org.mybatis.generator.plugins.SerializablePlugin"/><!-- 为生成的Java模型创建一个toString方法 --><plugin type="org.mybatis.generator.plugins.ToStringPlugin"/><!-- 配置MBG要连接的数据库信息 --><jdbcConnection driverClass="${jdbc.driverClass}"connectionURL="${jdbc.connectionURL}"userId="${jdbc.userId}"password="${jdbc.password}"></jdbcConnection><javaModelGenerator targetPackage="com.codepanda.backendlearning.mbg.model"targetProject="src\main\java"></javaModelGenerator><sqlMapGenerator targetPackage="com.codepanda.backendlearning.mbg.mapper"targetProject="src\main\resources"></sqlMapGenerator><javaClientGenerator  type="XMLMAPPER"targetPackage="com.codepanda.backendlearning.mbg.mapper"targetProject="src\main\java"></javaClientGenerator><table tableName="ums_admin"><generatedKey column="id" sqlStatement="MySql" identity="true"/></table></context>
</generatorConfiguration>

5. 运行 MyBatis-Generator

a. 使用Java

Running MyBatis Generator With Java

public class Generator {public static void main(String[] args) throws Exception {List<String> warnings = new ArrayList<>();boolean overwrite = true;InputStream is = Generator.class.getResourceAsStream("/generatorConfig.xml");ConfigurationParser cp = new ConfigurationParser(warnings);Configuration config = cp.parseConfiguration(is);is.close();DefaultShellCallback callback = new DefaultShellCallback(overwrite);MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);myBatisGenerator.generate(null);for(String warning:warnings){System.out.println(warning);}}
}

b. 使用Maven插件

Running MyBatis Generator With Maven


http://www.ppmy.cn/news/1077426.html

相关文章

vscode搭建springboot开发环境

前言 idea好用到但是收money&#xff0c;eclipse免费但是界面有点丑&#xff0c;所以尝试使用vscode开发springboot 提前准备 安装jdk&#xff0c;jdk需要大于11 安装vscode 安装maven 安装插件 主要是下面的插件 Extension Pack for JavaSpring Boot Extension PackDepe…

MySQL 间隙锁原理深度详解:解密并掌握幻读问题的终极武器

推荐阅读 项目实战:AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 资源分享 史上最全文档AI绘画stablediffusion资料分享 AI绘画关于SD,MJ,GPT,SDXL百科全书 AI绘画 stable…

UG NX二次开发(C++)-CAM-刀轨循环设置多个加工余量并输出clsf文件

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、问题说明2.1 创建一个平面端铣的加工程序2.2 生成余量为0的刀位文件3、采用UG NX二次开发循环变余量程序3.1 头文件3.2 在类中声明方法3.3 添加方法代码3.4 测试结果1、前言 在UG NX的C…

能直接运营的发接任务平台小程序搭建开发演示

有个项目估计做过互联网的小伙伴都听说过——发接任务平台。 基本每年都有发接任务平台关站&#xff0c;但又有新的平台出来&#xff0c;往复循环&#xff0c;无比热闹。这在互联网圈不常见&#xff0c;互联网项目很多都是风头过去了就结束了&#xff0c;但发接任务年年似乎都…

数据结构--5.3图的遍历(广度优先遍历)

广度优先遍历&#xff1a; 广度优先遍历&#xff08;BreadthFirstSearch&#xff09;&#xff0c;又称为广度优先搜索&#xff0c;简称BFS。 要实现对图的广度遍历&#xff0c;我们可以利用队列来实现。 void BFSTraverse(MGraph G) {int i,j;Queue Q;for(i0;i<G.numVerte…

PHP 通过 Redis 解决并发请求的操作问题

比如PHP收到两个并发的请求A和B&#xff0c;要求只能其中一个请求处理S1操作&#xff0c;另一个请求直接返回失败&#xff0c;可以通过redis去解决&#xff1a; SETNX&#xff08;SET if Not eXists&#xff09;是 Redis 中的一个原子命令&#xff0c;用于设置键-值对&#xf…

IntelliJ IDEA 2023.2.1使用Git时弹出“使用访问令牌登录”问题解决

文章目录 一、内网Git环境GitLabGogsGitea 二、外网Git环境GitHubGitee 升级为IntelliJ IDEA 2023.2.1后&#xff0c;使用Git时弹出“使用访问令牌登录”的窗口&#xff0c;习惯使用Git帐号密码登录的用户&#xff0c;面对这个突如其来的弹窗真的很懵。 一、内网Git环境 GitLa…

【C++】快速排序的学习和介绍

前言 本篇文章我们先会学习快速排序这个算法&#xff0c;之后我们会学习sort这个函数 分治算法 在学习快速排序之前&#xff0c;我们先来学习一下分治算法&#xff0c;快速排序就是分治算法的一种&#xff0c;下面是分治算法的介绍&#xff0c; 分治算法&#xff0c;就是”…