当前位置: 首页 > news >正文

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.dtcms.com/a/303540.html

相关文章:

  • 零基础学习性能测试第九章:全链路追踪-项目实操
  • 猎板 PCB 控深槽工艺:5G 基站散热模块的关键支撑
  • 解决c++运行时提示:first defined here (重复定义问题)
  • **线程与进程的区别与联系**
  • Qt下使用图形视图框架实现图像上各图形绘制
  • 一个Pycharm窗口添加多个项目来满足运行多个项目的需求
  • linux常用的指令
  • HTML响应式SEO公司网站源码
  • MVSNet系列网络概述
  • 7寸工业模组 XA070Y2-L01芯显科技详细参数资料
  • MCU中的外设总线是什么?
  • 带 USB 接口的多功能 AI 降噪消回音模组 A-59P:革新语音处理体验​
  • 基于Flask的智能停车场管理系统开发实践
  • Java基础-IO流
  • Python day27
  • GoLand 项目从 0 到 1:第三天 —— 图数据库版本管理方案调研与中间件部署
  • 064_不可变集合与同步集合
  • python列表与元组--python005
  • 《中小学音乐教育》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • c++: 尾置返回类型(Trailing Return Type)
  • 深度解析Manus:从多智能体架构到通用AI Agent的技术革命
  • Unity教程(二十五)技能系统 掷剑技能(下)冻结时间实现
  • PostgreSQL 详解
  • java每日精进 7.28【流程设计6.0(泳池和泳道)】
  • V-Ray 7.00.08 for 3ds Max 2021-2026 安装与配置教程(含语言补丁)
  • HTML5 `<figure>` 标签:提升网页语义化与可访问性的利器
  • 【2025/07/28】GitHub 今日热门项目
  • Solidity基础(教程①-简单数字存储)
  • 第二十一章:AI的“视觉压缩引擎”与“想象力温床”
  • AIBOX硬件设计概述