mp核心功能

条件构造器

mybatisPlus支持各种复杂的where条件, 满足日常的开发

wrapper类就是条件构造器

提供了很多子类

条件构造器的用法:

  • QueryWrapper和LambdaQueryWrapper通常用来构建select、delete、update的where条件部分
  • UpdateWrapper和LambdaUpdateWrapper通常只有在set语句比较特殊才使用
  • 尽量使用LambdaQueryWrapper和LambdaUpdateWrapper,避免硬编码

自定义SQL

我们可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分

① 基于Wrapper构建where条件

List<Long> ids = List.of(1L, 2L, 4L);
int amount = 200;
// 1.构建条件
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>().in(User::getId, ids);
// 2.自定义SQL方法调用
userMapper.updateBalanceByIds(wrapper, amount);

② 在mapper方法参数中用Param注解声明wrapper变量名称,必须是ew

void updateBalanceByIds(@Param("ew") LambdaQueryWrapper<User> wrapper, @Param("amount") int amount);

③ 自定义SQL,并使用Wrapper条件

<update id="updateBalanceByIds">UPDATE tb_user SET balance = balance - #{amount} ${ew.customSqlSegment}
</update>

service接口

接口使用流程:

1.自定义 Service 接口继承 IService

  • 作用:让自定义的 Service 接口具备 MP IService 中封装的通用 CRUD(创建、读取、更新、删除 )等基础方法,无需手动编写简单的增删改查逻辑。
  • 代码示例
// 自定义 IUserService 接口,继承 MP 的 IService,泛型指定操作的实体类 User
public interface IUserService extends IService<User> { // 可在此扩展自定义业务方法,如复杂查询、业务逻辑组合等
}

2.自定义 Service 实现类,继承 ServiceImpl 并实现自定义接口

  • 作用ServiceImpl 类已经实现了 IService 接口的通用方法,继承它后,自定义实现类可直接复用这些通用操作;同时实现自定义 IUserService 接口,保证接口方法的实现与自定义业务逻辑补充。
  • 代码示例
// UserServiceImpl 实现类,继承 ServiceImpl(需指定对应的 Mapper 接口和实体类),并实现 IUserService
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {// 若 IUserService 有自定义方法,在此实现;也可直接使用父类 ServiceImpl 继承来的通用方法,如 save、update、remove、list 等
}

常见CURD:

新增

方法

作用

save(T)

保存单个实体对象到数据库,返回是否成功(boolean 类型 )

saveBatch(Collection<T>)

批量保存实体对象集合,默认批次大小,返回操作结果

saveBatch(Collection<T>, int)

带自定义批次大小的批量保存,灵活控制批量操作频次

saveOrUpdateBatch(Collection<T>)

批量保存或更新,根据实体主键判断,存在则更新、不存在则新增

saveOrUpdateBatch(Collection<T>, int)

自定义批次大小的批量保存或更新

saveOrUpdate(T)

单个实体的保存或更新,依据主键判断操作类型

saveOrUpdate(T, Wrapper<T>)

结合条件的单个实体保存或更新,条件用于辅助判断等场景

修改

方法

作用

updateById(T)

根据实体对象的主键更新对应记录,更新非 null 字段

update(Wrapper<T>)

通过条件构造器 Wrapper 构建更新条件,更新符合条件的记录(需配合 set 操作,一般在 Lambda 语法或自定义 SQL 里设置更新内容 )

update(T, Wrapper<T>)

指定实体对象(设置要更新的字段值 )和条件构造器 Wrapper(设置更新条件 ),更新符合条件的记录

updateBatchById(Collection<T>)

批量根据主键更新实体对象集合,每条记录更新非 null 字段

updateBatchById(Collection<T>, int)

自定义批次大小的批量主键更新

saveOrUpdate(T)

前面新增分类里也有,兼具保存或更新逻辑,依据主键判断

查询

方法

作用

getById(Serializable)

根据主键 ID 查询单个实体对象

getOne(Wrapper<T>)

通过条件构造器 Wrapper 查询单个实体,若结果超过一条会抛异常

getOne(Wrapper<T>, boolean)

带是否抛出异常参数,结果多条时,false 则返回第一条

listByIds(Collection<? extends Serializable>)

根据主键 ID 集合,查询对应的实体列表

listByMap(Map<String, Object>)

根据 Map 中的键值对(对应数据库字段 - 值 )查询实体列表

list(Wrapper<T>)

通过条件构造器 Wrapper 构建查询条件,查询符合条件的实体列表

list()

查询对应实体类的全表数据列表

page(E, Wrapper<T>)

结合分页参数 E(如 Page 对象 )和条件构造器 Wrapper,实现分页查询

page(E)

仅用分页参数 E 进行全表分页查询

lambdaQuery()

获取 Lambda 语法的查询链 LambdaQueryChainWrapper,方便用 Lambda 表达式写条件,如 service.lambdaQuery().eq(User::getId, 1).list()

lambdaQuery(T)

带实体对象的 Lambda 查询链,可基于实体初始值辅助构造条件

lambdaUpdate()

获取 Lambda 语法的更新链 LambdaUpdateChainWrapper,用于便捷构建更新操作

删除

方法

作用

removeById(Serializable)

根据主键 ID 删除对应的实体记录

removeById(Serializable, boolean)

带是否逻辑删除(若开启逻辑删除 )的参数,控制删除行为

removeById(T)

通过实体对象(主要用主键 )删除记录

removeByMap(Map<String, Object>)

根据 Map 中的键值对(数据库字段 - 值 )作为条件,删除符合条件的记录

remove(Wrapper<T>)

用条件构造器 Wrapper 构建删除条件,删除对应记录

removeByIds(Collection<?>)

根据主键 ID 集合,批量删除对应记录

removeByIds(Collection<?>, boolean)

带逻辑删除控制参数的批量主键删除

removeBatchByIds(Collection<?>)

批量删除主键对应记录,内部处理批次等逻辑

removeBatchByIds(Collection<?>, boolean)

带逻辑删除控制的批量主键删除

removeBatchByIds(Collection<?>, int)

自定义批次大小、带逻辑删除控制的批量主键删除

removeBatchByIds(Collection<?>, int, boolean)

更细粒度控制(批次大小、逻辑删除 )的批量主键删除

统计

方法

作用

count()

统计对应实体类全表的记录总数

count(Wrapper<T>)

根据条件构造器 Wrapper 构建的条件,统计符合条件的记录数量

分页查询

方法分类

方法签名

功能说明

典型使用场景

分页查询

E page(E page, Wrapper<T> queryWrapper)

传入分页对象(如 Page )和 Wrapper 条件,实现带条件的分页查询

分页+条件(如年龄>25 岁)查询用户,同时获取总条数、总页数等分页元数据

分页查询

E page(E page)

仅通过分页对象(Page )做全表分页,返回分页结果(含数据+分页信息)

对大数据量表(如系统操作日志)做全表分页展示,按页加载避免一次性查全表

列表查询

方法分类

方法签名

功能说明

典型使用场景

列表查询

List<T> listByIds(Collection<? extends Serializable> ids)

根据主键集合批量查询,传入 ID 集合,返回对应实体列表

批量获取指定 ID 的用户信息,如 listByIds(Arrays.asList(1L, 2L, 3L))

列表查询

List<T> listByMap(Map<String, Object> map)

Map 封装简单条件(字段名 - 值)查询,返回实体列表

{"name": "张三", "age": 20} 查用户,适配无需复杂条件的场景

列表查询

List<T> list(Wrapper<T> queryWrapper)

结合 Wrapper(如 LambdaQueryWrapper )构建复杂条件查询,返回列表

多条件组合(如年龄>18 且性别为男)查询,满足复杂业务筛选需求

列表查询

List<T> list()

查询对应实体类全表数据,返回所有记录

加载数据量小的字典表(如状态枚举表)全量内容

Lambda 操作

方法分类

方法签名

功能说明

典型使用场景

Lambda 操作

LambdaQueryChainWrapper<T> lambdaQuery()

获取 Lambda 查询链,支持链式调用+Lambda 表达式写条件,简化查询构建

链式写法:lambdaQuery().eq(User::getId, 1).like(User::getName, "张").list()

Lambda 操作

LambdaQueryChainWrapper<T> lambdaQuery(T entity)

基于传入实体的初始值,结合 Lambda 链补充条件查询

已有部分实体数据(如姓名),再叠加年龄条件:lambdaQuery(user).gt(User::getAge, 18).list()

Lambda 操作

LambdaUpdateChainWrapper<T> lambdaUpdate()

获取 Lambda 更新链,用链式+Lambda 表达式定义更新字段和条件

链式更新:lambdaUpdate().set(User::getStatus, 1).eq(User::getId, 1).update()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/93473.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pcm,msd调制解调仿真

PCM&#xff08;脉冲编码调制&#xff09;和MSD&#xff08;多符号差分&#xff09;调制解调系统的MATLAB仿真代码。 PCM (脉冲编码调制) 仿真 %% PCM调制解调仿真 clear; clc; close all;% 参数设置 Fs 8000; % 采样频率 (Hz) t_duration 0.02; % 信号持续时间 (秒…

【网络安全】信息网络安全建设方案(WORD)

1.1 安全整体架构 1.2 安全建设拓扑 1.3 安全建设内容与目标 2.1 用户侧安全建设思路 2.2 用户侧安全建设拓扑 2.3 用户侧安全建设内容 2.3.1 PKI 升级改造 2.3.2 安全防护 2.3.3 安全检测 2.3.4 安全管理 3.1 跨网安全访问与交换平台安全建设思…

微服务 01

微服务是一种软件架构风格&#xff0c;它是以专注于单一职责的很多小型项目为基础&#xff0c;组合出复杂的大型应用。 &#xff08;对应的是单体架构风格&#xff09; 一、认识微服务 1、单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;打…

20250726让荣品的PRO-RK3566开发板使用TF卡启动

20250726让荣品的PRO-RK3566开发板使用TF卡启动 2025/7/26 8:58缘起&#xff1a;需要升级 荣品的PRO-RK3566核心板的 底板上的FPGA程序。 由于没有使用RK809的电量计功能&#xff0c;板子一上电就会被关机&#xff01;^_于是给生产线制作了一张TF卡/启动卡&#xff0c;插到底板…

Selenium使用指南

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 概述selenium是网页应用中最流行的自动化测试工具&#xff0c;可以用来做自动化测试或者浏览器爬虫等。官网地址为&#xff1a;相对于另外一款web自动化测试工具QT…

[机缘参悟-235]:通过AI人工升级网络的工作方式和特征理解人的思维方式

AI人工神经网络通过模拟生物神经元连接机制、构建层级化特征提取结构&#xff0c;并结合数据驱动的学习方式&#xff0c;为理解人类思维方式提供了技术参照框架&#xff0c;但其本质仍是基于统计的模式匹配&#xff0c;与人类意识层面的思维存在根本差异。以下从其工作方式、基…

【C#补全计划:类和对象(七)—— 重写虚方法】

一、virtual和override1. 问题引入&#xff1a;使用里氏替换原则时&#xff0c;使用父类容器装载子类对象&#xff0c;若不使用virtual和override而是使用new&#xff0c;当子类调用两个类共有的方法时&#xff0c;调用的是父类的方法而不是子类的方法&#xff1a;using System…

TCPIP之常用协议

一、TCPIP之网络支撑协议 1.ARP ARP是网络层协议&#xff0c;在同一广播域内&#xff0c;将IP地址解析成MAC地址. 1.1 无故ARP 请求型无故ARP 设备在网络中不管是自动获取ip地址还是手动配置ip地址&#xff0c;设备都会发送请求型无故ARP检查这个ip地址是否有重复的。 应…

网络之路24:VLAN基础实验

正文共&#xff1a;2345 字 18 图&#xff0c;预估阅读时间&#xff1a;3 分钟目录网络之路第一章&#xff1a;Windows系统中的网络0、序言1、Windows系统中的网络 1.1、桌面中的网卡 1.2、命令行中的网卡 1.3、路由表 1.4、家用路由器网络之路第二章&#xff1a;认识企业设备2…

基于Verilog的神经网络加速器设计

本设计实现了一个高效的神经网络加速器,专注于卷积神经网络(CNN)的核心计算功能。该设计具有以下创新点: 并行处理架构:同时处理多个卷积窗口,提高计算吞吐量 动态权重加载:支持运行时更新卷积核权重 流水线优化:卷积、激活、池化三级流水线设计 可配置参数:支持不同尺寸…

基于springboot的零食商城的设计与实现/零食销售系统的设计与实现

用户&#xff1a;注册&#xff0c;登录&#xff0c;商品信息&#xff0c;团购商品&#xff0c;公告资讯&#xff0c;后台管理&#xff0c;在线客服&#xff0c;购物车&#xff0c;个人中心管理员&#xff1a;登录&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商品类型…

《剑指offer》-算法篇-位运算

题目二进制中“1”的个数代码实现二进制中“1”的个数题目描述&#xff1a;输入一个整数&#xff0c;输出该数二进制表示中1的个数。其中负数用补码表示。思路&#xff1a;求“1”的个数等价于求n-1与n进行“与”运算后不等于0所需要的运算次数。注意&#xff1a;这里的整数可能…

项目上线中的跨域问题

本文将深入解析跨域问题的本质&#xff0c;并提供实用的解决方案。引言 跨域问题可以说是前端开发者的"老朋友"了&#xff0c;特别是在项目从开发环境迁移到生产环境时&#xff0c;这个问题更是频繁出现。许多开发者对跨域的理解停留在表面&#xff0c;导致在项目上线…

dubbo应用之3.0新特性(响应式编程)(2)

一、介绍 Dubbo 3.0 的响应式编程基于 Triple 协议和 Reactor/RxJava 实现,支持全链路异步非阻塞通信。它通过引入 Mono、Flux 等响应式类型,打通跨进程的数据流式传输,天然支持反压、限流等控制能力。相比传统基于 CompletableFuture 的异步方式,响应式编程更适用于高并发…

力扣-22.括号生成

题目链接 22.括号生成 class Solution {List<String> res new ArrayList<>();StringBuilder path new StringBuilder();void backtracking(int n, int left, int right) {if (left right 2 * n) {res.add(path.toString());return;}if (left < n) {path.a…

架构实战——互联网架构模板(“网络层”技术)

目录 一、负载均衡 1.1、DNS 1.1.1、DNS 负载均衡的优点 1.1.2、DNS 负载均衡的缺点 1.2、Nginx 、LVS 、F5 1.2.1、软件和硬件的区别 1.2.2、4 层和 7 层的区别 二、CDN 三、多机房 3.1、同城多机房 3.2、跨城多机房 3.3、跨国多机房 四、多中心 本文来源:极客时间vip课程笔记…

TCP/IP 网络编程面试题及解答

在Qt/C面试中&#xff0c;若涉及“熟悉TCP/IP网络编程”&#xff0c;面试官通常会结合TCP/IP协议基础、Qt网络编程框架&#xff08;如Qt Network模块&#xff09;、C网络编程实现以及实际场景问题来提问。以下是常见面试题及解答&#xff1a; 一、TCP/IP协议基础 1. TCP和UDP的…

unity开发中Hash、Queue、LinkedList简单介绍

在Unity游戏开发中&#xff0c;除了Dictionary和List外&#xff0c;以下三种数据结构能高效解决特定问题场景&#xff1a;1. HashSet<T>&#xff1a;闪电级存在性检查 核心特点&#xff1a;基于哈希表实现的高效集合&#xff0c;元素唯一且无视顺序 优势&#xff1a; O(1…

智慧园区:科技与生活的完美融合

在城市的喧嚣中&#xff0c;我们常常渴望一片宁静而充满活力的绿洲。如今&#xff0c;随着科技的飞速发展&#xff0c;智慧园区应运而生&#xff0c;它不仅满足了我们对美好生活的向往&#xff0c;更以其独特的魅力&#xff0c;成为现代城市中一道亮丽的风景线。今天&#xff0…

继续打卡day6

383. 赎金信 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool canConstruct(string ransomNote, string magazine) {unordered_map<char, int> us;for(auto c: ransomNote){us[c]; // 将字符串存储}for(auto c: magazine){if(us.count(c)){us[c]-…