MyBatisPlus(1):快速入门
我们知道,MyBatis
是一个优秀的操作数据库的持久层框架(优秀持久层框架——MyBatis),其基于底层的JDBC进行高度封装,极大的简化了开发。但是对于单表操作而言,我们需要重复地编写简单的CRUD语句。这其实是不必要的,为此,MyBatisPlus
框架在MyBatis
框架的基础上进一步封装,提供了大量操作单表CRUD
的方法,进一步的提高了我们的开发效率。
MyBatisPlus框架简介
MyBatisPlus和MyBatis的关系
顾名思义,MyBatisPlus
在MyBatis
的后面添加了plus,从词义上来看应该是MyBatis的升级版;事实也如此,MyBatisPlus框架
完全支持MyBatis框架
的用法(我们在引入了MyBatisPlus框架的依赖之后就不需要再引入MyBatis框架的依赖了)。那是不是意味着MyBatisPlus
将要取代MyBatis
了?完全不是这样:在MyBatisPlus的官网上,开发者是用这样的图来描述二者的关系的:
TO BE THE BEST PARTNER OF MYBATIS(成为MyBatis最好的伙伴)
,这是开发者的原话。MyBatis
和MyBatisPlus
二者就好像魂斗罗的两兄弟一样,共同为简化我们的开发而努力。MyBatisPlus框架
绝对不是为了取代MyBatis框架
出现的,并且MyBatisPlus框架目前也没有能力完全取代MyBatis框架。
MyBatisPlus框架的特点
润物无声
MyBatisPlus框架
只做增强而不做改变,因为引入它不会对现有的工程产生影响,如丝般顺滑。
效率至上
MyBatisPlus框架
只需要简单配置,即可快速的进行单表CRUD
操作,从而节省大量的时间。
丰富功能
代码生成、自动分页、逻辑删除、自动填充、拦截器等功能一应俱全。
广泛认可
连续5年获得开源中国年度最佳开源项目殊荣,Github
累计16KStar
。
这么介绍MyBatisPlus框架
也许不够直观,那让我们使用一个快速入门的DEMO来直观展示MyBatisPlus框架
是如何简化我们的开发的。
MyBatisPlus框架入门案例
在项目中使用MyBatisPlus框架
一共可分为3步。
引入依赖
想要使用一个框架,我们肯定需要引入对应的依赖,以下是MyBatisPlus框架
的最新依赖:
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>3.5.12</version>
</dependency>
因为上文提到了MyBatisPlus框架
完全支持MyBatis框架
的用法,所以说我们在引入了MyBatisPlus框架
依赖之后,如果想要使用MyBatis框架
,无需额外的引入,即可使用。
自定义Mapper继承BaseMapper接口
MyBatisPlus框架
提供了很多的方法来简化我们的单表CRUD操作
,这些方法被封装在了一个名为BaseMapper<>
的接口中,想要使用这些方法,我们就需要创建一个接口来继承这个接口,注意,在继承时,需要指明BaseMapper<>
中的泛型:
EMP
实体类:
package com.wzb.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.time.LocalDateTime;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {private Integer id;private String username;private String password;private String name;private Integer gender;private String phone;private String image;private Integer job;private LocalDate entryDate;private Integer deptId;private LocalDateTime createTime;private LocalDateTime updateTime;
}
自定义Mapper
继承BaseMapper
接口:
package com.wzb.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wzb.pojo.Emp;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface EmpMapper extends BaseMapper<Emp> {
}
需要注意,在使用自定义Mapper
继承BaseMapper
接口的时候,需要指明BaseMapper
的泛型。
使用对应方法
此时我们就可以使用BaseMapper
中封装好的方法来简化单表查询了:
package com.wzb;import com.wzb.mapper.EmpMapper;
import com.wzb.pojo.Emp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.time.LocalDate;
import java.time.LocalDateTime;@SpringBootTest
class JavaWeb13MyBatisPlusApplicationTests {@Autowiredprivate EmpMapper empMapper;/*** 查询测试*/@Testpublic void queryTest() {Emp emp = empMapper.selectById(1);System.out.println(emp);}/*** 增加测试*/@Testpublic void insertTest() {Emp emp = new Emp();emp.setId(100);emp.setUsername("测试员工");emp.setPassword("123456");emp.setName("测试员工");emp.setGender(0);emp.setPhone("1310000001");emp.setImage("https://123.com");emp.setJob(1);emp.setEntryDate(LocalDate.now());emp.setDeptId(1);emp.setCreateTime(LocalDateTime.now());emp.setUpdateTime(LocalDateTime.now());empMapper.insert(emp);}/*** 删除测试*/@Testpublic void deleteTest() {empMapper.deleteById("100");}/*** 修改测试*/@Testpublic void updateTest() {Emp emp = new Emp();emp.setId(1);emp.setUsername("张三");empMapper.updateById(emp);}}
这是一个简单的CRUD
示例,包含了对于Emp
的CRUD
,但是我们的EmpMapper
中是没有任何代码的,仅仅只是继承了BaseMapper
的接口,这几个方法分别使用了BaseMapper接口
中的selectById
、insert
、deleteById
、updateById
方法,这些方法都是十分简单的CRUD
方法,编码及其规范,都可以见名知意,看到方法名就知道是干什么的,需要给方法传递什么参数。
总结
MyBatisPlus
框架在MyBatis
框架的基础上进一步封装,提供了大量操作单表CRUD
的方法,进一步的提高了我们的开发效率。MyBatisPlus
框架的快速入门极其简单,但是MyBatis主要聚焦于单表查询的简化
,对于简单的CRUD的SQL
语句,开发者无需手写,直接使用封装方法即可,但是对于复杂的多表联查的SQL
语句,还是需要开发者自己编写SQL
语句完成。所以说MyBatisPlus
框架和MyBatis
框架都是需要我们掌握的,MyBatisPlus
框架并不能直接代替MyBatis
框架。
在这个快速入门的Demo
中,我们使用了BaseMapper
中封装的方法来简化查询,那MyBatisPlus
框架是如何知道这些方法需要操作数据库中的哪一张表呢?且听下文分解。
相关文章:

MyBatisPlus(1):快速入门
我们知道,MyBatis是一个优秀的操作数据库的持久层框架(优秀持久层框架——MyBatis),其基于底层的JDBC进行高度封装,极大的简化了开发。但是对于单表操作而言,我们需要重复地编写简单的CRUD语句。这其实是不…...

京东热点缓存探测系统JDhotkey架构剖析
热点探测使用场景 MySQL 中被频繁访问的数据 ,如热门商品的主键 IdRedis 缓存中被密集访问的 Key,如热门商品的详情需要 get goods$Id恶意攻击或机器人爬虫的请求信息,如特定标识的 userId、机器 IP频繁被访问的接口地址,如获取用…...
多国金融市场数据对接指南(印度、印尼、韩国)
一、StockTV多国数据对接概述 StockTV提供统一的API接口规范对接全球金融市场数据,本文重点介绍印度(国家ID:14)、印尼(国家ID:42)、韩国(国家ID:xx)的股票市场对接方案。 共同特性 统一认证…...

【Elasticsearch】ILM(Index Lifecycle Management)策略详解
ILM(Index Lifecycle Management)策略详解 1.什么是 ILM 策略?2.ILM 解决的核心业务问题3.ILM 生命周期阶段3.1 Hot(热阶段)3.2 Warm(温阶段)3.3 Cold(冷阶段)3.4 Delete…...

linux 后记
Linux Server 下载一个Server的版本,就是那种只有命令行的 学会这个就可以去租一个aliyun服务器,挺便宜的 如果在aliyun买服务器的话就不用管镜像源 但是如果是自己的虚拟机就必须设置镜像源,上网搜索阿里的镜像源,然后手动输入&…...

【笔记】在 MSYS2 MINGW64 环境中安装构建工具链(CMake、GCC、Make)
📝 在 MSYS2 MINGW64 环境中安装构建工具链(CMake、GCC、Make) ✅ 目标说明 记录在 MSYS2 的 MINGW64 工具链环境中,成功安装用于 C/C 构建的常用开发工具。 包括: GCC 编译器Make 构建系统CMake 跨平台构建工具基础开…...

PyTorch -TensorBoard的使用 (一)
设置环境 新建python文件 .py 安装Tensorboard 在终端进行安装 显示安装成功 两个logs,出现这种情况怎么解决 所有的logs文件删掉delete,重新运行 add_image 不满足要求 Opencv-numpy 安装Opencv add_image 用法示例 (500,375&am…...

Redis最佳实践——性能优化技巧之数据结构选择
Redis在电商应用中的数据结构选择与性能优化技巧 一、电商核心场景与数据结构选型矩阵 应用场景推荐数据结构内存占用读写复杂度典型操作商品详情缓存Hash低O(1)HGETALL, HMSET购物车管理Hash中O(1)HINCRBY, HDEL用户会话管理Hash低O(1)HSETEX, HGET商品分类目录Sorted Set高O…...

网络安全方向在校生有哪些证书适合考取?
工作7年得出结论:网络安全,考任何证书都没有用,实力才是根本。我是2021年考的 CISSP,报了培训班,花了1万一千块钱,签的保障班还是服务班不记得了,大概意思就是你放心去考,考不过可以…...

从0开始学习R语言--Day14--贝叶斯统计与结构方程模型
贝叶斯统计 在很多时候,我们经常会看到在统计分析中出现很多反直觉的结论,比如假如有一种病,人群中的患病率为1%,患者真患病时,检测结果为阳性的概率是99%,如果没有,则检测结果为阳性的概率是5…...
02-BTC-密码学原理 对hash算法如果出现漏洞的思考
如果比特币中某个哈希函数的抗碰撞性出现了漏洞怎么办,怎么补救? 答:(1)攻击场景: 伪造交易:攻击者可构造两个不同的交易(如正常交易和恶意双花交易)具有相同的TxID&…...

[Python] 如何使用 Python 调用 Dify 工作流服务实现自动化翻译
在实际项目中,自动化工作流服务可以大大简化复杂任务的处理流程。本文将介绍如何通过 Python 脚本调用 Dify 提供的工作流 API,实现文本翻译的自动化操作。该流程包括设置 API 接口、构造请求体并处理返回结果。 一、背景介绍:什么是 Dify 工作流服务? Dify 是一款支持多种…...
分布式微服务系统架构第142集:全栈开发
加群联系作者vx:xiaoda0423 仓库地址:https://webvueblog.github.io/JavaPlusDoc/ https://1024bat.cn/ https://github.com/webVueBlog/fastapi_plus https://webvueblog.github.io/JavaPlusDoc/ /*** 本地启动解决跨域问题* 打包发布请注释该类&#…...

PTA-根据已有类Worker,使用LinkedList编写一个WorkerList类,实现计算所有工人总工资的功能。
目录 1.问题描述 2.函数接口定义: 3.裁判测试程序样例: 4.输入和输出样例 输入样例: 输出样例: 5.实现代码 1.问题描述 Main类:在main方法中,调用constructWorkerList方法构建一个Worker对象链表…...
文档整合自动化
主要功能是按照JSON文件(Sort.json)中指定的顺序合并多个Word文档(.docx),并清除文档中的所有超链接。最终输出合并后的文档名为"sorted_按章节顺序.docx"。 主要分为几个部分: 初始化配置 定…...

微软markitdown PDF/WORD/HTML文档转Markdown格式软件整合包下载
本次和大家分享另一个微软发布的非常热门的文件文档转Markdown格式文档的软件markitdown,软件可以将PDF,word,ppt,Excel等十几种格式文档转换为markdown格式文档,我基于当前最新0.1.2版本制作了免安装一键启动整合包。…...
科普:Linux `su` 切换用户后出现 `$` 提示符,如何排查和解决?
科普:Linux su 切换用户后出现 $ 提示符,如何排查和解决? 在 Linux 系统管理中,su(Switch User)命令用于切换用户身份。正常情况下,从 root 切换到普通用户时,提示符会从 # 变成 $&…...

BayesFlow:基于神经网络的摊销贝叶斯推断框架
贝叶斯推断为不确定性条件下的推理、复杂系统建模以及基于观测数据的预测提供了严谨且功能强大的理论框架。尽管贝叶斯建模在理论上具有优雅性,但在实际应用中经常面临显著的计算挑战:后验分布通常缺乏解析解,模型验证和比较需要进行重复的推…...
NodeJS全栈开发面试题讲解——P9性能优化(Node.js 高级)
✅ 9.1 Node.js 的性能瓶颈一般出在哪?如何排查? Node.js 单线程 异步模型,瓶颈常出现在: 阻塞操作(如:同步 I/O、CPU 密集型计算) 数据库慢查询 / 索引失效 外部接口慢响应 大量并发请求导…...
NVMe IP现状扫盲
SSD优势 与机械硬盘(Hard Disk Driver, HDD)相比,基于Flash的SSD具有更快的数据随机访问速度、更快的传输速率和更低的功耗优势,已经被广泛应用于各种计算领域和存储系统。SSD最初遵循为HDD设计的现有主机接口协议,例…...
5G-A时代与p2p
5G-A时代正在走来,那么对P2P的影响有多大。 5G-A作为5G向6G过渡的关键技术,将数据下载速率从千兆提升至万兆,上行速率从百兆提升至千兆,时延降至毫秒级。这种网络性能的跨越式提升,为P2P提供了更强大的底层支撑&#x…...

基于FPGA的DES加解密系统verilog实现,包含testbench和开发板硬件测试
目录 1.课题概述 2.系统测试效果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于FPGA的DES加解密系统verilog实现,包含testbench和开发板硬件测试。输入待加密数据,密钥,输出加密数据,然后通过解密模块输出解密后的原…...
基于生产-消费模式,使用Channel进行文件传输(Tcp方式)
Client端: #region 多文件传输 public class FileMetadata {public string FileName { get; set; }public long FileSize { get; set; } }class Program {const int PORT 8888;const int BUFFER_SIZE 60 * 1024 * 1024;//15s-50 25s-64 33s-32 27s-50 31s-40 25…...
tortoisegit 使用rebase修改历史提交
在 TortoiseGit 中使用 rebase 修改历史提交(如修改提交信息、合并提交或删除提交)的步骤如下: --- ### **一、修改最近一次提交** 1. **操作**: - 右键项目 → **TortoiseGit** → **提交(C)** - 勾选 **"Amend…...

Python----目标检测(《用于精确目标检测和语义分割的丰富特征层次结构》和R-CNN)
一、《用于精确目标检测和语义分割的丰富特征层次结构》 1.1、基本信息 原文标题:Rich feature hierarchies for accurate object detection and semantic segmentation 中文译名:用于精确目标检测与语义分割的丰富特征层次结构 版本:第5版技…...
Ansible 进阶 - Roles 与 Inventory 的高效组织
Ansible 进阶 - Roles 与 Inventory 的高效组织 如果说 Playbook 是一份完整的“菜谱”,那么 Role (角色) 就可以被看作是制作这道菜(或一桌菜)所需的标准化“备料包”或“半成品组件”。例如,我们可以有一个“Nginx Web 服务器安装配置 Role”、“MySQL 数据库基础设置 Ro…...

极简以太彩光网络解决方案4.0正式发布,“彩光”重构园区网络极简之道
5月28日下午,锐捷网络在京举办以“光,本该如此‘简单’”为主题的发布会,正式发布极简以太彩光网络解决方案4.0。作为“彩光”方案的全新进化版本,极简以太彩光4.0从用户需求出发,聚焦场景洞察,开启了一场从底层基因出发的极简革命,通过架构、部署、运维等多维度的创新升级,以强…...

国芯思辰| 霍尔电流传感器AH811为蓄电池负载检测系统安全护航
在电动车、储能电站、不间断电源(UPS)等设备中,蓄电池作为关键的储能单元,其运行状态直接关系到设备的稳定性和使用寿命。而准确监测蓄电池的负载情况,是保障其安全、高效运行的关键。霍尔电流传感器 AH811凭借独特的技…...

TortoiseSVN账号切换
SVN登录配置及账号切换 本文主要为了解答svn客户端如何进行账号登录及切换不同权限账号的方式。 一、环境准备与客户端安装 安装TortoiseSVN客户端 下载地址:TortoiseSVN官网 安装步骤: 双击安装包,按向导完成安装后&#x…...

2025年05月28日Github流行趋势
项目名称:agenticSeek 项目地址url:https://github.com/Fosowl/agenticSeek项目语言:Python历史star数:10352今日star数:2444项目维护者:Fosowl, steveh8758, klimentij, ganeshnikhil, apps/copilot-pull-…...