MyBaits Generator
参考文档
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 | 这是默认值
|
| MyBatis3Kotlin |
|
| MyBatis3 | 这是原始的运行时。在MBG 1.3.6版本之前,MBG的大多数用法都使用这种代码风格。
|
| MyBatis3Simple | 这是 MyBatis3 运行时的简化版本。
|
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
相关文章:
MyBaits Generator
参考文档 MyBatis Generator Core – Introduction to MyBatis Generator MyBatis Generator 详解_enablesubpackages_isea533的博客-CSDN博客 一文解析 MyBatis Generator 的使用及配置 - 掘金 1. Introduction MyBatis Generator (MBG) 是 MyBatis MyBatis的代码生成器。…...
JavaWeb 速通Ajax
目录 一、Ajax快速入门 1.基本介绍 : 2.使用原理 : 二、Ajax经典入门案例 1.需求 : 2.前端页面实现 : 3. 处理HTTP请求的servlet实现 4.引入jar包及druid配置文件、工具类 : 5.Domain层实现 : 6.DAO层实现 : 7.Service层实现 : 8.运行测试 : 三、JQuery操作Ajax 1 …...
vscode c++编译时报错
文章目录 1. 报错内容:GDB Failed with message;2. 报错内容:Unable to start debugging. 1. 报错内容:GDB Failed with message; 例如上图报错,一般就是编译器选择错误,有两种方法解决: 打开 tasks.json …...
基于体系结构架构设计-架构真题(十五)
基于体系结构开发设计(Architecture-Base Software Design)ABSD,是指构成体系结构的()组合驱动,ABSC方法是一个自项向下、递归细化的方法,软件系统的体系结构通过该方法细化,直到能产…...
IPv6网络实验:地址自动生成与全球单播通信探索
文章目录 一、实验背景与目的二、实验拓扑三、实验需求四、实验解法1. 在R1和PC3上开启IPv6链路本地地址自动生成,测试是否能够使用链路本地地址互通2. 为R1配置全球单播地址2001::1/64,使PC3能够自动生成与R1同一网段的IPv6地址3. 测试R1和PC3是否能够使…...
深入探索前端之道:JavaScript深拷贝与浅拷贝的解析与实现
引言 前端开发中,数据的复制是一个常见的操作。尤其是在处理对象和数组时,我们需要考虑的是一个浅拷贝还是深拷贝。那么,什么是深拷贝和浅拷贝?它们在前端开发中有什么作用?如何实现这两种拷贝?这是我们在…...
关于两个不同数据库的两张表建立数据库链接,关联查询数据
一、数据库链接 数据库链接(database link)是用于跨不同数据库之间进行连接和数据传输的工具或方法。它允许在一个数据库中访问另一个数据库中的对象和数据。 二、具体操作 以Oracle数据库为例 --1.建立链接tjpt CREATE DATABASE LINK tjpt CONNECT…...
Google登录SDK
一、接入的准备工作 官方文档链接地址:开始使用一键登录和注册 按照步骤进行接入即可 二、项目参考(Unity项目) 注意:代码版本如果不适用新的Google API 请自行参考最新版本接口 SDKGoogleSignInActivity 主要用于登录的代码。Un…...
ASP.NET Core 8 的运行环境 Environment
开发流程一般有3个阶段: 开发 Development测试 Stage正式 Production 运行时环境变量可以用于根据不同的开发阶段运行不同的逻辑,比如在开发阶段的某些功能或保密信息不暴露在正式上线的代码中。 在Visual Stduio创建的模板代码中是否为开发环境Envir…...
机械臂手眼标定ZED相机——眼在手外python、matlab
目录 1.眼在手外原理 2.附上眼在手外求得手眼矩阵的python代码 3.眼在手外标定步骤 1)打印棋盘格 2)得到hand数据 3)得到camera数据 4.运行python得到手眼矩阵 1.眼在手外原理 眼在手外所求的手眼矩阵是基坐标到相机的转换矩阵 2.附上…...
前端实现动态路由(前端控制全部路由,后端返回用户角色)
优缺点 优点: 不用后端帮助,路由表维护在前端逻辑相对比较简单,比较容易上手权限少的系统用前端鉴权更加方便 缺点: 线上版本每次修改权限页面,都需要重新打包项目大型项目不适用如果需要在页面中增加角色并且控制可以访问的页…...
Spring5学习笔记—Spring事务处理
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Spring专栏 ✨特色专栏: M…...
如何增长LLM推理token,从直觉到数学
背景: 最近大模型输入上文长度增长技术点的研究很火。为何要增长token长度,为何大家如此热衷于增长输入token的长度呢?其实你如果是大模型比价频繁的使用者,这个问题应该不难回答。增长了输入token的长度,那需要多次出入才能得到…...
《穷爸爸与富爸爸》时间是最宝贵的资产,只有它对所有人都是公平的
《穷爸爸与富爸爸》时间是最宝贵的资产,只有它对所有人都是公平的 罗伯特清崎,日裔美国人,投资家、教育家、企业家。 萧明 译 文章目录 《穷爸爸与富爸爸》时间是最宝贵的资产,只有它对所有人都是公平的[toc]摘录各阶层现金流图支…...
Git结合Gitee的企业开发模拟
本系列有两篇文章: 一是另外一篇《快速使用Git完整开发》,主要说明了关于Git工具的基础使用,包含三板斧(git add、git commit、git push)、Git基本配置、版本回退、分支管理、公钥与私钥、远端仓库和远端分支、忽略文…...
WEBGL(2):绘制单个点
代码如下: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevi…...
C# task多线程创建,暂停,继续,结束使用
1、多线程任务创建 private void button1_Click(object sender, EventArgs e) //创建线程{CancellationToken cancellationToken tokensource.Token;Task.Run(() > //模拟耗时任务{for (int i 0; i < 100; i){if (cancellationToken.IsCancellationRequested){return;…...
界面控件DevExpress WinForms(v23.2)下半年发展路线图
本文主要概述了官方在下半年(v23.2)中一些与DevExpress WinForms相关的开发计划,重点关注的领域将是可访问性支持和支持.NET 8。 DevExpress WinForms有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。同时能…...
vue实现按需加载的多种方式
1.import动态导入 const Home () > import( /* webpackChunkName: "Home" */ /views/Home.vue); 2.使用vue异步组件resolve 这种方式没有成功 //const 组件名 resolve > require([‘组件路径’],resolve) //(这种情况下一个组件生成一个js文件…...
el-switch组件在分页情况下的使用
1.需求: 系统使用者在点击发布状态的开关后,可以对应的发布或者取消发布试卷 2.前端代码: html代码(这里不贴其他表单项的代码了,直接贴el-Switch组件的代码): <!-- qwy: 使用Switch组件,设置发布状态,业务逻辑:在页面初始渲染的时候应该查询发布状态,以根据状…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
