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组件,设置发布状态,业务逻辑:在页面初始渲染的时候应该查询发布状态,以根据状…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...