网站飘动/北京百度关键词推广
文章目录
- 1. 依赖
- 2. 配置文件
- 3. 生成代码
- 4. 详细介绍 generatorConfig.xml
- 5. 代码详细
- 总结
Spring MyBatis Generator 是 MyBatis 官方提供的一个强大的工具,它能够基于数据库表结构自动生成 MyBatis 持久层的代码,包括实体类、Mapper 接口和 XML 映射文件。这种自动代码生成的方式能够提高开发效率,减少手写代码的工作量。本篇博客将引导你如何使用 Spring MyBatis Generator 进行代码生成。
1. 依赖
首先,需要在项目的 pom.xml
文件中引入 Spring MyBatis Generator 插件的依赖:
<dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.4.2</version></dependency>
2. 配置文件
在 src/main/resources
目录下创建 generatorConfig.xml
文件,配置代码生成的参数,例如:
<!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="DemoBatisGenerator" targetRuntime="MyBatis3"><plugin type="org.mybatis.generator.plugins.ToStringPlugin" /><commentGenerator><property name="suppressDate" value="false" /><property name="suppressAllComments" value="true" /><property name="author" value="false" /></commentGenerator><!-- 数据库连接配置 --><jdbcConnection driverClass="org.h2.Driver"connectionURL="jdbc:h2:mem:db1"userId="sa"password=""></jdbcConnection><!-- Java 模型生成器 --><javaModelGenerator targetPackage="com.cheney.demo.model" targetProject="src/main/java"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true" /></javaModelGenerator><!-- SQL Map 生成器 --><sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"><property name="enableSubPackages" value="true" /></sqlMapGenerator><!-- Mapper 接口生成器 --><javaClientGenerator targetPackage="com.cheney.demo.dao" targetProject="src/main/java" type="XMLMAPPER"><property name="enableSubPackages" value="true" /></javaClientGenerator><!-- 表配置 --><table tableName="t_user" domainObjectName="User" enableCountByExample="false"enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false"selectByExampleQueryId="false"></table></context></generatorConfiguration>
3. 生成代码
使用 Java 编程方式生成代码
@GetMapping("generator")public void generator() throws Exception {List<String> warnings = new ArrayList<>();boolean overwrite = true;ConfigurationParser cp = new ConfigurationParser(warnings);Configuration config = cp.parseConfiguration(this.getClass().getResourceAsStream("/generatorConfig.xml"));DefaultShellCallback callback = new DefaultShellCallback(overwrite);MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);myBatisGenerator.generate(null);}
1)服务启动
2)调用 generator
运行
3)MyBatis Generator 将会根据配置文件自动生成实体类、Mapper 和 XML 映射文件并放置在指定的目录中
User.java
package com.cheney.demo.model;public class User {private Integer id;private String name;private Integer age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name == null ? null : name.trim();}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append(getClass().getSimpleName());sb.append(" [");sb.append("Hash = ").append(hashCode());sb.append(", id=").append(id);sb.append(", name=").append(name);sb.append(", age=").append(age);sb.append("]");return sb.toString();}
}
UserMapper.java
package com.cheney.demo.dao;import com.cheney.demo.model.User;public interface UserMapper {int deleteByPrimaryKey(Integer id);int insert(User row);int insertSelective(User row);User selectByPrimaryKey(Integer id);int updateByPrimaryKeySelective(User row);int updateByPrimaryKey(User row);
}
UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cheney.demo.dao.UserMapper"><resultMap id="BaseResultMap" type="com.cheney.demo.model.User"><id column="ID" jdbcType="INTEGER" property="id" /><result column="NAME" jdbcType="VARCHAR" property="name" /><result column="AGE" jdbcType="INTEGER" property="age" /></resultMap><sql id="Base_Column_List">ID, NAME, AGE</sql><select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">select <include refid="Base_Column_List" />from T_USERwhere ID = #{id,jdbcType=INTEGER}</select><delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">delete from T_USERwhere ID = #{id,jdbcType=INTEGER}</delete><insert id="insert" parameterType="com.cheney.demo.model.User">insert into T_USER (ID, NAME, AGE)values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER})</insert><insert id="insertSelective" parameterType="com.cheney.demo.model.User">insert into T_USER<trim prefix="(" suffix=")" suffixOverrides=","><if test="id != null">ID,</if><if test="name != null">NAME,</if><if test="age != null">AGE,</if></trim><trim prefix="values (" suffix=")" suffixOverrides=","><if test="id != null">#{id,jdbcType=INTEGER},</if><if test="name != null">#{name,jdbcType=VARCHAR},</if><if test="age != null">#{age,jdbcType=INTEGER},</if></trim></insert><update id="updateByPrimaryKeySelective" parameterType="com.cheney.demo.model.User">update T_USER<set><if test="name != null">NAME = #{name,jdbcType=VARCHAR},</if><if test="age != null">AGE = #{age,jdbcType=INTEGER},</if></set>where ID = #{id,jdbcType=INTEGER}</update><update id="updateByPrimaryKey" parameterType="com.cheney.demo.model.User">update T_USERset NAME = #{name,jdbcType=VARCHAR},AGE = #{age,jdbcType=INTEGER}where ID = #{id,jdbcType=INTEGER}</update>
</mapper>
4. 详细介绍 generatorConfig.xml
-
plugin
提供了一些列插件来扩展其功能供我们使用
- CacheNamespacePlugin:为生成的 Mapper 接口(Kotlin 或 Java)添加 @CacheNamespace 注解。
- CachePlugin:为生成的 SQL 映射文件添加 元素。
- CaseInsensitiveLikePlugin:为 Example 类添加方法,以支持大小写不敏感的 LIKE 搜索。
- EqualsHashCodePlugin:为 MBG 生成的 Java 模型对象添加 equals 和 hashCode 方法。
- FluentBuilderMethodsPlugin:为生成的模型类添加流畅的构建器方法。
- IgnoreViewsPlugin:在代码生成过程中过滤掉“VIEW”类型的表。
- MapperAnnotationPlugin:为生成的 Mapper 接口添加 @Mapper 注解。
- MapperConfigPlugin:生成一个包含对 MBG 生成的 XML 映射文件的引用的 MapperConfig.xml 文件。
- RenameExampleClassPlugin:通过重命名 MBG 生成的 Example 类来演示 initialized 方法的用法。
- RowBoundsPlugin:为 selectByExample 方法添加接受 RowBounds 参数的新版本。
- SerializablePlugin:为 MBG 生成的 Java 模型类添加 java.io.Serializable 标记接口。
- ToStringPlugin:为生成的模型类添加 toString() 方法
-
commentGenerator
用于生成MyBatis Generator(MBG)生成的各种元素的注释,包括Java字段、Java方法、XML元素等
suppressAllComments
:用于指定MBG是否在生成的代码中包含任何注释。你可以将其设置为true
来禁用所有注释,或者保持默认值false
来包含所有生成元素的注释suppressDate
:用于指定MBG是否在生成的注释中包含生成时间戳。你可以将其设置为true
来禁用时间戳,或者保持默认值false
来包含生成时间戳addRemarkComments
:用于指定MBG是否在生成的注释中包含数据库表和列的备注信息。你可以将其设置为true
来包含表和列的备注信息,或者保持默认值false
来不包含表和列的备注信息dateFormat
:用于指定生成的注释中的日期格式。你可以自定义日期格式,也可以使用默认的java.util.Date
格式useLegacyGeneratedAnnotation
:用于指定是否使用来自已弃用的“javax”命名空间的注解。在JDK 9+中,建议使用“jakarta”命名空间。你可以将其设置为true
或false
-
jdbcConnection
配置数据库连接
-
driverClass
属性指定了JDBC驱动程序的完全限定类名 -
connectionURL
属性指定了连接数据库的JDBC连接URL -
userId
属性指定了连接数据库的用户名 -
password
属性指定了连接数据库的密码
-
-
javaModelGenerator
配置 Java 模型生成器
targetPackage
:指定生成的类所在的包targetProject
:指定生成的对象的目标项目
-
sqlMapGenerator
配置 SQL Map 生成器
enableSubPackages
,它用于控制是否为对象生成不同的Java包,基于表的目录和模式
-
javaClientGenerator
配置 Java 客户端生成器
type="XMLMAPPER"
:指定生成的 Java 接口和实现类将引用 MyBatis 的 XML 配置targetPackage="test.dao"
:指定生成的接口和实现类所在的包targetProject="\MBGTestProject\src"
:指定生成的接口和实现类将保存在的项目目录
-
table
配置要生成的数据库表
5. 代码详细
https://github.com/cheney09/spring-practical-combat/tree/main/09/demo
总结
以上是使用 Spring MyBatis Generator 自动生成代码的简要步骤。这种方式可以帮助你更快速地搭建起数据库访问层的基础代码,减少手写代码的工作量,提高开发效率。
相关文章:

【Spring实战】09 MyBatis Generator
文章目录 1. 依赖2. 配置文件3. 生成代码4. 详细介绍 generatorConfig.xml5. 代码详细总结 Spring MyBatis Generator 是 MyBatis 官方提供的一个强大的工具,它能够基于数据库表结构自动生成 MyBatis 持久层的代码,包括实体类、Mapper 接口和 XML 映射文…...

【自然语言处理】【大模型】 ΨPO:一个理解人类偏好学习的统一理论框架
一个理解人类偏好学习的统一理论框架 《A General Theoretical Paradiam to Understand Learning from Human Preferences》 论文地址:https://arxiv.org/pdf/2310.12036.pdf 相关博客 【自然语言处理】【大模型】 ΨPO:一个理解人类偏好学习的统一理论框…...

计算机网络——传输层(五)
前言: 最重要的网络层我们已经学习完了,下面让我们再往上一层,对网络层的上一层传输层进行一个学习与了解,学习网络层的基本概念和网络层中的TCP协议和UDP协议 目录 编辑一、传输层的概述: 1.传输层: …...

python3处理docx并flask显示
前言: 最近有需求处理docx文件,并讲内容显示到页面,对world进行在线的阅读,这样我这里就使用flaskDocument对docx文件进行处理并显示,下面直接上代码: Document处理: 首先下载Document的库文…...

Python:正则表达式速通,码上上手!
1前言 正则表达式(Regular Expression)是一种用来描述字符串模式的表达式。它是一种强大的文本匹配工具,可以用来搜索、替换和提取符合特定模式的文本。 正则表达式由普通字符(例如字母、数字、符号等)和元字符&#…...

centos7安装nginx并安装部署前端
目录: 一、安装nginx第一种方式(外网)第二种方式(内网) 二、配置前端项目三、Nginx相关命令 好久不用再次使用生疏,这次记录一下 一、安装nginx 第一种方式(外网) 1、下载nginx ng…...

Hive实战:统计总分与平均分
文章目录 一、实战概述二、提出任务三、完成任务(一)准备数据文件1、在虚拟机上创建文本文件2、将文本文件上传到HDFS指定目录 (二)实现步骤1、启动Hive Metastore服务2、启动Hive客户端3、创建Hive表,加载HDFS数据文件…...

Linux:不同计算机使用NFS共享资源
一,安装NFS文件系统 NFS即网络文件系统(network file system),它允许网络中的计算机之间通过网络共享资源。目前,NFS只用于在Linux和UNIX主机间共享文件系统。 #使用mount命令可以将远程主机的文件系统 安装到 本地: #将远程主机…...

leetcode贪心算法题总结(一)
此系列分三章来记录leetcode的有关贪心算法题解,题目我都会给出具体实现代码,如果看不懂的可以后台私信我。 本章目录 1.柠檬水找零2.将数组和减半的最少操作次数3.最大数4.摆动序列5.最长递增子序列6.递增的三元子序列7.最长连续递增序列8.买卖股票的最…...

SQL高级:窗口函数
窗口函数,顾名思义,它的操作对象是窗口,即一个小的数据范围,而不是整个结果集。并且它是一个函数,在SQL中使用,所以一定有返回值。 窗口函数是SQL中非常有趣的部分,这一节我们就来学习一下它。 辅助表 方便我们后边的讲解,这里我们要建一张学生成绩表,建表语句如下…...

Excel formulas 使用总结(更新中)
最近在写task assigment的时候学习到的,记录下。 首先它所有需要写赋值formuls都要用 开头 相等赋值 a1 这个就代表这格的数据和a1是一样的。如果希望其他格和它相同的逻辑,可以直接复制该cell或者直接拖动该cell右下角,他会自动进行匹配…...

华为OD机试 - 两个字符串间的最短路径问题(Java JS Python C)
题目描述 给定两个字符串,分别为字符串 A 与字符串 B。 例如 A字符串为 "ABCABBA",B字符串为 "CBABAC" 可以得到下图 m * n 的二维数组,定义原点为(0,0),终点为(m,n),水平与垂直的每一条边距离为1,映射成坐标系如下图。 从原点 (0,0) 到 (0,A) 为水…...

强敌环伺:金融业信息安全威胁分析——钓鱼和恶意软件
门口的敌人:分析对金融服务的攻击 Akamai会定期针对不同行业发布互联网状态报告(SOTI),介绍相关领域最新的安全趋势和见解。最新的第8卷第3期报告主要以金融服务业为主,分析了该行业所面临的威胁和Akamai的见解。我们发…...

1月1日起,贵阳市退役军人可以免费乘坐公交地铁
广大退役军人是党和国家的宝贵财富,是新时代中国特色社会主义现代化建设的重要力量。为切实增强退役军人的幸福感与获得感,贵阳市信捷科技有限公司以“心系老兵情怀,热忱服务人民”为服务宗旨,积极响应贵阳市政府号召,…...

网络隔离后,怎样建立高效安全的数据安全交换通道?
数据安全对企业生存发展有着举足轻重的影响,数据资产的外泄、破坏都会导致企业无可挽回的经济损失和核心竞争力缺失。数据流动才能让其释放价值,想要保护企业核心资产,就要实现数据安全交换。 很多企业为了防止知识产权、商业机密数据泄露&am…...

Python:PyTorch
简介 PyTorch是一个开源的机器学习库,由Facebook的人工智能研究团队(FAIR)开发,用于应用于机器学习和深度学习的Python程序。PyTorch基于Torch,使用Python语言重新编写,使得它更容易使用和扩展。它支持强大…...

CentOS 5/6/7 基于开源项目制作openssh 9.6p1 rpm包—— 筑梦之路
背景介绍 开源项目地址:https://github.com/boypt/openssh-rpms.git 该项目主要支持了centos 5 、6、7版本,针对使用了比较老的操作系统进行openssh安全加固,还是不错的项目,使用简单、一件制作,欢迎大家去支持作者。…...

python的pandas数据分析处理基础学习
pandas学习 一、 pandas基础 1. 什么是pandas? 一个开源的python类库:用于数据分析、数据处理、数据可视化 高性能容易使用的数据结构容易使用的数据分析工具 很方便和其他类库一起使用: numpy:用于数学计算 scikit-learn&a…...

【Qt-容器类】
Qt编程指南 ■ 顺序容器类■ QList■ QVector■ QLinkedList■ QStack■ QQueue ■ 关联容器类■ QSet■ QMap■ QMultiMap■ QHash■ QMultiHash ■ 顺序容器类 ■ QList QList 比较常用的容器类,以数组列表的形式实现,在前、后添加数据非常快。以下为…...

2023-12-27 语音转文字的whisper应用部署
点击 <C 语言编程核心突破> 快速C语言入门 语音转文字的whisper应用部署 前言一、部署whisper二、部署whisper.cpp总结 前言 要解决问题: 需要一款开源的语音转文字应用, 用于视频自动转换字幕. 想到的思路: openai的whisper以及根据这个模型开发的whisper.cppC应用. …...

MAVLINK生成自定义消息
git clone https://github.com/mavlink/mavlink.gitcd mavlinkgit submodule update --init --recursivepython -m mavgenerate出现以下界面 XML填写自定义xml路径,内容可以参考mavlink/message_definitions/v1.0 Out为输出路径 <?xml version"1.0"…...

【MediaPlayerSource】播放器源内部的音视频sender的创建和使用
来看下声网播放中的sender相关组件设计:MediaPlayerSourceDummy 是一个MediaPlayerSourceImpl ,输入音视频帧到 播放器。player_worker_ 线程触发所有操作,由外部传递,与其他组件公用 MediaPlayerSourceDummy(base::IAgoraService* agora_service, utils::worker_type play…...

【机器学习】西瓜书第6章支持向量机课后习题6.1参考答案
【机器学习】西瓜书学习心得及课后习题参考答案—第6章支持向量机 1.试证明样本空间中任意点x到超平面(w,b)的距离为式(6.2)。 首先,直观解释二维空间内点到直线的距离: 由平面向量的有关知识,可得: 超平面的法向量为 w w w&am…...

【OpenAI Q* 超越人类的自主系统】DQN :Q-Learning + 深度神经网络
深度 Q 网络:用深度神经网络,来近似Q函数 强化学习介绍离散场景,使用行为价值方法连续场景,使用概率分布方法实时反馈连续场景:使用概率分布 行为价值方法 DQN(深度 Q 网络) 深度神经网络 Q-L…...

Vue axios Post请求 403 解决之道
前言: 刚开始请求的时候报 CORS 错误,通过前端项目配置后算是解决了,然后,又开始了新的报错 403 ERR_BAD_REQUEST。但是 GET 请求是正常的。 后端的 Controller 接口代码如下: PostMapping(value "/login2&qu…...

【Leetcode】重排链表、旋转链表、反转链表||
目录 💡重排链表 题目描述 方法一: 方法二: 💡旋转链表 题目描述 方法: 💡反转链表|| 题目描述 方法: 💡总结 💡重排链表 题目描述 给定一个单链表 L 的头节…...

RabbitMQ 报错:Failed to declare queue(s):[QD, QA, QB]
实在没想到会犯这种低级错误。 回顾整理一下吧: 原因:SpringBoot主配置类默认只会扫描自己所在的包及其子包下面的组件。其他位置的配置不会被扫描。 如果非要使用其他位置,就需要在启动类上面指定新的扫描位置。注意新的扫描位置会覆盖默…...

Neo4j 5建库
Neo4j 只有企业版可以运行多个库,社区版无法创建多个库,一个实例只能运行一个库; 如果业务需要使用多个库怎么办呢? 就是在一个机器上部署多个实例,每个实例单独一个库名 这个库的名字我们可以自己定义; …...

鲁棒最小二乘法 拟合圆
圆拟合算法_基于huber加权的拟合圆算法-CSDN博客 首次拟合圆得到采用的上述blog中的 Ksa Fit 方法。 该方法存在干扰点时,拟合得到的结果会被干扰。 首次拟合圆的方法 因此需要针对外点增加权重因子,经过多次迭代后&…...

LeetCode——动态规划
动态规划 一、一维数组:斐波那契数列 爬楼梯70简单 dp定义: dp[i]表示爬到第i阶有多少种不同的方式 状态转移方程: dp[i] dp[i-1] dp[i-1] (每次可以爬1或2个台阶) 边界条件: dp[0] 1; dp[1] 1;&#…...