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

mybatis-plus service层拥有的方法

前文我们学习了lambdaQuery() ,这个事不过是service层里一个普通的链式调用方法,他还有其他很多的方法

在 MyBatis-Plus 中,Service 层的核心是 IService 接口及其默认实现类 ServiceImpl。它们进一步封装了 CRUD 操作,采用了 get(查询单行)、list(查询集合)、remove(删除)、save(新增)、update(更新)、page(分页)等前缀命名方式,以区分 Mapper 层并避免混淆。
以下是 MyBatis-Plus Service 层提供的常用方法分类整理:

新增操作 (Save)

  • save(T entity):插入一条记录(如果主键自增,主键会自动回填)。
  • saveBatch(Collection entityList):批量插入(默认每次提交 1000 条,可自定义批次大小)。
  • saveOrUpdate(T entity):如果记录存在则更新,不存在则插入(依赖 @TableId 注解判断)。
  • saveOrUpdateBatch(Collection entityList):批量执行插入或更新操作。

删除操作 (Remove)

  • removeById(Serializable id):根据主键 ID 删除记录。
  • removeByMap(Map<String, Object> columnMap):根据 Map 中的键值对作为条件进行删除。
  • remove(Wrapper queryWrapper):根据条件构造器(Wrapper)动态删除。
  • removeByIds(Collection<? extends Serializable> idList):根据 ID 集合批量删除。

更新操作 (Update)

  • updateById(T entity):根据主键 ID 更新记录(仅更新实体中非 null 的字段)。
  • update(T entity, Wrapper updateWrapper):根据条件构造器更新。第一个参数为实体(可为 null),第二个参数为 Wrapper 条件。
  • update(Wrapper updateWrapper):仅根据 Wrapper 中的 set 和 where 条件进行更新。
  • updateBatchById(Collection entityList):根据 ID 批量更新记录

查询单条记录 (Get)

  • getById(Serializable id):根据主键 ID 查询单条记录。
  • getOne(Wrapper wrapper):查询单条记录。若查出多条,默认不报错(自动加 LIMIT 1);若传入 getOne(wrapper, true),查出多条时会抛出异常。

查询列表与集合 (List)

  • list():查询表中的所有数据。
  • list(Wrapper wrapper):根据条件构造器查询列表。
  • listByIds(Collection<? extends Serializable> idList):根据 ID 集合批量查询。
  • listByMap(Map<String, Object> columnMap):根据 Map 条件查询列表。

分页与统计 (Page & Count)

  • page(Page page, Wrapper wrapper):分页查询,返回包含数据和总数的分页对象。
  • pageMaps(Page<Map<String, Object>> page, Wrapper wrapper):分页查询,但将结果映射为 Map 集合。
  • count():查询总记录数。
  • count(Wrapper wrapper):根据条件统计记录总数。

链式调用 (Chain Wrapper)

  • lambdaQuery():返回 LambdaQueryChainWrapper,支持使用 Lambda 表达式进行链式查询,最后以 .one()、.list()、.count() 等方法结尾。

getOne() 与 .one() 的核心区别

正确的写法

Useruser=this.lambdaQuery().eq(User::getPhone,"13800138000").orderByDesc(User::getCreateTime).one();
LambdaQueryWrapper<User>wrapper=newLambdaQueryWrapper<>();wrapper.eq(User::getPhone,"13800138000").orderByDesc(User::getCreateTime);// 使用 this.getOne() 替代 this.selectOne()Useruser=this.getOne(wrapper);

然两者都是查询单条记录,但在处理多条数据时的表现有很大不同:

  • 链式调用 .one():如果数据库中存在多条满足条件的记录,它会直接抛出异常(TooManyResultsException)。
  • this.getOne(wrapper):默认情况下(底层 throwEx 为 false),如果查出多条记录,它不会报错,而是会自动在 SQL 末尾加上 LIMIT 1,只返回第一条记录。
    (注:如果你希望 getOne 在查出多条时也抛出异常,可以显式传入第二个参数:this.getOne(wrapper, true))
http://www.jsqmd.com/news/1201106/

相关文章:

  • DLT Viewer终极指南:5分钟快速掌握嵌入式系统日志分析
  • 如何在Windows上打造完整的Android系统:MagiskOnWSA终极指南
  • 【实战指南】主流EXE反编译工具选型与场景应用
  • Claude 4.7科研文献解析:深度理解与意图对齐的范式重构
  • bibisco自定义主题教程:打造个性化的写作环境
  • 2026 佛山名表回收行业测评|7家连锁机构对比,省心变现推荐 - 奢侈品回收机构参考
  • 如何在5分钟内开始使用kvpress?完整安装与快速上手指南
  • 从儒勒·凡尔纳到ChatGPT:想象力如何驱动百年科技预言与创新
  • ComfyUI-SixGod_Prompt词库使用全攻略:上千个分类提示词一键调用
  • Three.js 自定义网格教程
  • EMI测试标准实战指南:从原理到合规的完整路径
  • 换一张图只要15秒:电商卖家和设计师都在用的AI换背景技巧
  • AndroidFastScroll常见问题解答:解决集成和使用的20个典型问题
  • C语言动态内存管理:从malloc/free原理到内存泄漏防范实战
  • 平面波入射十字交叉结构
  • MultipleWindow3dScene安全考虑:保护localStorage数据的最佳方法
  • 如何5分钟上手Mi-Create:零代码打造小米手表个性表盘
  • 047-跨越平台期
  • 开源项目治理模式:contributing-template在项目生命周期中的完整应用指南
  • 开源阅读鸿蒙版:打造完全自定义的电子书阅读器终极指南
  • 采样电阻选型与应用全解析:从基础原理到工程实践
  • WzComparerR2实战:逆向解析《冒险岛》WZ文件结构与数据提取
  • Sherlock与其他启动器对比:为什么选择这个Rust构建的GTK4方案
  • 如何快速掌握3DS存档管理:JKSM完整使用指南与技巧
  • WSL+TeX Live+VS Code学术写作环境全栈配置指南
  • 医疗科技公司算法岗面试复盘:从技术深挖到职业理念的碰撞
  • Windows 10 下 Hadoop 3.2.2 伪分布式环境搭建与核心配置详解
  • 为什么CmdChallenge是程序员必备的命令行练习工具?5大核心优势揭秘
  • Codex AI本地化私有部署全链路指南,含Docker镜像构建、LLM模型量化压缩与RBAC权限控制(附2024最新离线包)
  • KUKA系统镜像备份与恢复:从U盘制作到实战避坑指南