【MybatisPlus】BaseMapper详解,举例说明
一、BaseMapper 简介
MyBatis-Plus 的核心类 BaseMapper 主要是用于提供基本的 CRUD(创建、读取、更新、删除)操作的接口定义。它是 MyBatis-Plus 框架中的一个重要组成部分,可以大大简化基于 MyBatis 的数据访问层代码的编写。
BaseMapper 接口通常定义了一些基本的数据库操作方法,例如:
- insert:插入一条记录到数据库中。
- deleteById:根据主键 ID 删除一条记录。
- updateById:根据主键 ID 更新一条记录。
- selectById:根据主键 ID 查询一条记录。
- selectList:查询所有符合条件的记录列表。
- selectPage:分页查询记录。
等等…
除了这些基本的 CRUD 方法外,BaseMapper 还可能包含一些其他便捷的查询方法,如按条件查询、统计符合条件的记录数等。这些方法可以通过 MyBatis-Plus 框架自动生成实现,无需手动编写对应的 SQL 语句。
通过使用 BaseMapper,开发人员可以避免编写重复的 CRUD 操作代码,提高开发效率,同时也能够确保代码的一致性和可维护性。
二、 原理
BaseMapper 类是 MyBatis-Plus 框架中的一个核心接口,用于提供基本的 CRUD(创建、读取、更新、删除)操作的方法定义。它通过继承 MyBatis 的 Mapper 接口并扩展了一些常用的数据库操作方法,使得开发人员可以更加便捷地进行数据访问层的开发,无需手动编写对应的 SQL 语句。
BaseMapper 接口的原理主要基于 MyBatis 的 Mapper 动态代理机制。在运行时,MyBatis-Plus 会动态生成 BaseMapper 接口的实现类,并通过 Java 反射机制来调用相应的数据库操作方法。这些方法在实现时会自动生成对应的 SQL 语句,并利用 MyBatis 的 SQL 执行引擎来执行这些 SQL 语句,从而实现对数据库的 CRUD 操作。

三、BaseMapper 应用
假设有一个名为 User 的实体类,对应数据库中的用户表,其字段包括 id、username 和 password。我们可以创建一个对应的 UserMapper 接口,继承自 BaseMapper 接口,从而获得基本的 CRUD 方法的实现。
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper extends BaseMapper<User> {// 这里不需要编写任何方法,继承了 BaseMapper 接口后,已经包含了常用的数据库操作方法
}
然后,我们可以在服务层或控制器层中注入 UserMapper,并调用其方法来实现数据库操作,例如:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserService {@Autowiredprivate UserMapper userMapper;// 添加用户public void addUser(User user) {userMapper.insert(user);}// 根据用户ID查询用户信息public User getUserById(Long userId) {return userMapper.selectById(userId);}// 更新用户信息public void updateUser(User user) {userMapper.updateById(user);}// 删除用户public void deleteUser(Long userId) {userMapper.deleteById(userId);}
}
在上面的示例中,我们通过注入 UserMapper 接口的实例 userMapper,并调用其继承自 BaseMapper 的 insert、selectById、updateById 和 deleteById 方法来实现对用户表的增、查、改、删操作。
通过这种方式,我们可以非常方便地进行数据库操作,而不需要编写繁琐的 SQL 语句,同时也提高了代码的可读性和可维护性。
四、BaseMapper 进阶操作
除了基本的 CRUD 操作之外,BaseMapper 还提供了一些进阶操作,可以更灵活地满足实际开发中的需求。以下是一些常见的进阶操作:
-
自定义 SQL 方法:
BaseMapper 接口支持在子接口中定义自定义的 SQL 方法,可以通过注解或 XML 文件来编写自定义的 SQL 语句,并在方法上使用@Select、@Update、@Insert、@Delete 等注解来指定对应的 SQL 类型。
-
条件构造器:
MyBatis-Plus 提供了强大的条件构造器(
QueryWrapper、UpdateWrappe、LambdaQueryWrapper、LambdaUpdateWrapper等),可以帮助开发人员构建复杂的查询条件。BaseMapper 的查询方法通常接受一个条件构造器作为参数,从而支持根据条件查询符合条件的记录。详情参考【MybatisPlus】QueryWrapper、UpdateWrappe、LambdaQueryWrapper、LambdaUpdateWrapper -
分页查询:
BaseMapper 提供了分页查询的方法,例如
selectPage方法,可以指定查询的页码和每页的记录数,并返回一个分页对象(Page 对象),其中包含了查询结果的分页信息。 -
批量操作:
BaseMapper 支持批量插入、更新和删除操作,可以提高数据处理的效率。例如,批量插入可以通过
insertBatch方法实现,批量更新可以通过updateBatchById方法实现,批量删除可以通过deleteBatchIds方法实现。 -
逻辑删除:
MyBatis-Plus 支持逻辑删除功能,可以通过在实体类的字段上添加
@TableLogic注解来指定逻辑删除的字段,并在全局配置中启用逻辑删除功能。BaseMapper 支持根据条件进行逻辑删除操作,例如,selectPage方法可以通过指定查询条件来查询被逻辑删除的记录。 -
乐观锁:
MyBatis-Plus 支持乐观锁功能,可以通过在实体类的字段上添加
@Version注解来指定乐观锁的字段,并在全局配置中启用乐观锁功能。BaseMapper 提供了根据乐观锁字段进行更新操作的方法,例如,updateById方法可以通过乐观锁字段来实现乐观锁更新。
通过使用这些进阶操作,开发人员可以更加灵活地进行数据访问层的开发,满足不同的业务需求,提高代码的复用性和可维护性。
相关文章:
【MybatisPlus】BaseMapper详解,举例说明
一、BaseMapper 简介 MyBatis-Plus 的核心类 BaseMapper 主要是用于提供基本的 CRUD(创建、读取、更新、删除)操作的接口定义。它是 MyBatis-Plus 框架中的一个重要组成部分,可以大大简化基于 MyBatis 的数据访问层代码的编写。 BaseMapper…...
LightDB24.1 oracle_fdw支持服务端GBK编码
功能介绍 oracle_fdw是一个PG的插件,用于连接oracle数据库,由于原生PG不支持服务端GBK编码,所以原生的oracle_fdw也不支持服务端GBK编码。在LightDB23.3中支持了服务端GBK编码,导致在GBK编码的数据库中使用oracle_fdw时报错。 Li…...
算法 环形数组是否存在循环 力扣执行速度击败100%
目录 题目 leetcode 457 求解思路 代码 结果 题目 leetcode 457 存在一个不含 0 的 环形 数组 nums ,每个 nums[i] 都表示位于下标 i 的角色应该向前或向后移动的下标个数: 如果 nums[i] 是正数,向前(下标递增方向࿰…...
FFmpeg——开源的开源的跨平台音视频处理框架简介
引言: FFmpeg是一个开源的跨平台音视频处理框架,可以处理多种音视频格式。它由Fabrice Bellard于2000年创建,最初是一个只包括解码器的项目。后来,很多开发者参与其中,为FFmpeg增加了多种新的功能,例如编码…...
怎么看待Groq
用眼睛看。 就是字面上的意思用眼睛看。 我属于第一波玩到的,先给大家一个直观的印象,Groq到底有多快。 目前Groq只能选Llama的70b,和Mixtral的MoE,那我选7*8的这个MoE模型来实验。 这么好些字大概花了不到1秒,流式响应,其实是不是流式已经没那么重要了 ,然后看每秒Toke…...
Kafka | SpringBoot集成Kafka
SpringBoot集成Kafka 一、前言二、项目1. pom2. application.properties4. 消息生产者-测试5. 消息消费者 三、启动测试四、有总结的不对的地方/或者问题 请指正, 我在努力中 一、前言 该文章中主要对SpringBoot 集成Kafka 主要是 application.properties 与 pom坐标就算集成完…...
python的tqdm库不显示动态进度条的问题
python的tqdm库不显示动态进度条的问题 本质原因是tqdm无法获取内部对象的长度,这可能是因为内部对象是一个迭代器,问题经常发生在同时使用tqdm与enumerate的场合,例如深度学习中经常可能出现的: tqdm.tqdm(enumerate(train_loade…...
【prompt四】Domain Prompt Learning for Efficiently Adapting CLIP to Unseen Domains
motivation 领域泛化(DG)是一个复杂的迁移学习问题,旨在学习未知领域的可泛化模型。最近的基础模型(FMs)对许多分布变化都具有鲁棒性,因此,应该从本质上提高DG的性能。在这项工作中,我们研究了采用视觉语言基础模型CLIP来解决图像分类中的DG问题的通用方法。虽然ERM使用标…...
利用Amazon Bedrock畅玩Claude 3等多种领先模型,抢占AI高地(体验倒计时4小时)
快乐的时间总是短暂的,Claude 3 在亚马逊云科技上限时体验仅剩4小时,上次分享了入门级操作教程,本期给大家带来AWS Lambda Amazon Bedrock一起构建可以便捷使用的Claude 3接口 AWS Lambda AWS Lambda 是一项计算服务,可以运行您…...
MySql分布式事务
1 seata 底层原理 Seata(Simple Extensible Autonomous Transaction Architecture)是一个开源的分布式事务解决方案,其底层原理主要基于改进的传统2PC(Two-Phase Commit,两阶段提交)协议,并结合…...
android基础学习
从上面的描述就可以知道,每一个Activity组件都有一个对应的ViewRoot对象、View对象以及WindowManager.LayoutParams对象。这三个对象的对应关系是由WindowManagerImpl类来维护的。具体来说,就是由WindowManagerImpl类的成员变量mRoots、mViews和mParams所…...
解决方案:Python画图汉字丢失显示小方块
解决方案: linux python解决中文字体 - jingsupo - 博客园 (cnblogs.com) 在找字体缓存文件的时候我找了一会儿,我的路径是这里: 做了所有更改之后,最后一定要把缓存文件删掉,不然还是会报同样的错误的。 这里再贴一…...
JWT的是什么
session共享 什么是session共享 Session共享是指在分布式系统中,在多个服务器之间共享同一个用户的会话数据。在传统的Web应用中,用户的会话信息通常存储在服务器端的Session中,而每个用户的请求在同一个服务器上处理,因此可以轻…...
git常用命令集合
1.差异对比 显示出branch1和branch2中差异的部分 git diff branch1 branch2 --stat显示出所有有差异的文件的详细差异 git diff branch1 branch2查看branch1分支有,而branch2中没有的log git log branch1 ^branch22.分支 列出所有本地分支 git branch列出所有远…...
UDP通信发送和接收 || UDP实现全双工通信
recvfrom ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); 功能: 从套接字中接收数据 参数: sockfd:套接字文件描述符 buf:存放数据空间首地址 …...
Mac 以SH脚本安装Arthas
SH脚本安装Aethas curl -L https://alibaba.github.io/arthas/install.sh | sh安装脚本说明 示例源文件: #! /bin/bash# temp file of as.sh TEMP_ARTHAS_FILE"./as.sh.$$"# target file of as.sh TARGET_ARTHAS_FILE"./as.sh"# update timeo…...
Elasticsearch:dense vector 数据类型及标量量化
密集向量(dense_vector)字段类型存储数值的密集向量。 密集向量场主要用于 k 最近邻 (kNN) 搜索。 dense_vector 类型不支持聚合或排序。 默认情况下,你可以基于 element_type 添加一个 dend_vector 字段作为 float 数值数组: …...
Linux C/C++下使用Lex/Yacc构建实现DBMS(Minisql)
DBMS(数据库管理系统)是一种用于管理和组织数据库的软件系统。它的重要性在于提供了一种有效地存储、管理和访问大量数据的方式。本文将深入探讨如何使用C语言、Lex(词法分析器生成器)和Yacc(语法分析器生成器…...
c语言指针小白基础教学
指针 1. 什么是指针?2. 如何编址(即如何给地址分配空间呢)3. 概念和基本术语3.1指针的值指针所指向的地址/内存区3.2 指针的类型(指针本身的类型)思考: 3.3 指针所指向的类型3.4 指针本身所占据的内存区3.5…...
面向对象设计之里氏替换原则
设计模式专栏:http://t.csdnimg.cn/4Mt4u 思考:什么样的代码才算违反里氏替换原则? 目录 1.里氏替换原则的定义 2.里氏替换原则与多态的区别 3.违反里氏替换原则的反模式 4.总结 1.里氏替换原则的定义 里氏替换原则(Liskov S…...
高效百度网盘直链解析架构解析:从协议逆向到企业级部署方案
高效百度网盘直链解析架构解析:从协议逆向到企业级部署方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 百度网盘直链解析技术作为解决云存储资源访问效率瓶颈的…...
原子化《思考快与慢》的原子化的庖丁解牛
它的本质是:识别大脑中两个系统的运作机制—— 系统 1 (快思考/直觉/自动化) 与 系统 2 (慢思考/理性/耗能) ,并针对程序员常见的认知偏差(如过度自信、沉没成本谬误、锚定效应)进行“补丁修复”。在失业焦虑和职业转型的关键期&a…...
跟我学UDS(ISO14229) ———— 0x34(RequestDownload)实战:解锁数据传输的“安全”与“容量”双关卡
1. 深入理解0x34服务:数据传输的守门人 第一次接触UDS协议中的0x34(RequestDownload)服务时,我把它想象成了一个严格的门卫。这个门卫不仅要检查你的通行证(安全访问状态),还要确认你携带的包裹尺寸是否符合规定&#…...
从流量包到Flag:一次CTF Misc挑战中的Python加密流量逆向实战
1. 初识CTF流量分析题 第一次接触CTF Misc类题目时,面对pcap流量包总有种无从下手的感觉。记得那次攻防世界的比赛,题目给了一个名为xxx.pcap的文件,打开Wireshark一看,满屏的TCP和HTTP流量让人眼花缭乱。当时我尝试用http.reques…...
SU-03T离线语音模块深度评测:不联网如何实现95%识别准确率?
SU-03T离线语音模块实战解析:无网络环境下的高精度语音交互方案 在智能家居和工业自动化领域,语音控制正逐渐从锦上添花的功能转变为核心交互方式。然而,依赖云服务的语音方案始终面临网络延迟、隐私泄露和连接稳定性三大痛点。SU-03T的出现打…...
Python实战:5种回归分析预测模型代码详解(附完整数据集)
Python实战:5种回归分析预测模型代码详解(附完整数据集) 在数据分析领域,回归分析就像一把瑞士军刀,能帮我们从数据中挖掘出变量间的潜在关系。想象一下,你手头有一份销售数据,想知道广告投入和…...
从手动记录到智能导出:我的原神成就管理进化之路
从手动记录到智能导出:我的原神成就管理进化之路 【免费下载链接】YaeAchievement 更快、更准的原神数据导出工具 项目地址: https://gitcode.com/gh_mirrors/ya/YaeAchievement 作为一名《原神》的资深玩家,我曾在成就管理的泥潭中挣扎了整整两年…...
从JBase Basic到金融交易:解析Temenos T24核心系统的编程基石
1. 金融系统的隐形骨架:Temenos T24与JBase Basic的共生关系 第一次接触Temenos T24核心银行系统的开发者,往往会惊讶于其独特的编程架构。这个支撑全球数百家银行日常运作的系统,竟建立在名为JBase Basic的特定领域语言之上。这种设计绝非偶…...
B站会员购抢票神器:多平台实时通知系统完整指南
B站会员购抢票神器:多平台实时通知系统完整指南 【免费下载链接】biliTickerBuy b站会员购购票辅助工具 项目地址: https://gitcode.com/GitHub_Trending/bi/biliTickerBuy 你是否曾经因为错过心仪演出门票的开售时间而懊恼不已?是否在抢票过程中…...
微博相册批量下载终极指南:3步轻松保存高清图片
微博相册批量下载终极指南:3步轻松保存高清图片 【免费下载链接】Sina-Weibo-Album-Downloader Multithreading download all HD photos / pictures from someones Sina Weibo album. 项目地址: https://gitcode.com/gh_mirrors/si/Sina-Weibo-Album-Downloader …...
