mybatis-plus service层拥有的方法

通过mybatis-plus和共同基类复用controller、service、dao层代码 阅读详情

前文我们学习了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() 的核心区别

正确的写法

User user = this.lambdaQuery()
        .eq(User::getPhone, "13800138000")
        .orderByDesc(User::getCreateTime)
        .one();
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getPhone, "13800138000")
       .orderByDesc(User::getCreateTime);

// 使用 this.getOne() 替代 this.selectOne()
User user = this.getOne(wrapper); 

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

  • 链式调用 .one():如果数据库中存在多条满足条件的记录,它会直接抛出异常(TooManyResultsException)。
  • this.getOne(wrapper):默认情况下(底层 throwEx 为 false),如果查出多条记录,它不会报错,而是会自动在 SQL 末尾加上 LIMIT 1,只返回第一条记录。
    (注:如果你希望 getOne 在查出多条时也抛出异常,可以显式传入第二个参数:this.getOne(wrapper, true))
MyBatis-Plus实现业务层 数据库连接池的自动配置和集成支持。 阅读详情

相关推荐

SpringBoot用MyBatis进阶MyBatis-plus

SpringBoot用MyBatis进阶MyBatis-plus 一、Maven引入Mybatis &lt;!-- 官方文档建议引入mybatis-plus时不要再重复引入mybatis,避免不必要的冲突 --&gt; &lt;!-- mybatis --&gt; &lt;dependency&gt; &lt;groupId&gt;org.mybatis.spring.boot&lt;/g...

小白的蟒蛇 1665

MyBatis‑Plus Service 层常用自带方法

MyBatis‑Plus Service 层常用自带方法

pig_ning的博客 542

MyBatis-Plus Service 接口:如何在 MyBatis-Plus 中实现业务逻辑层??

MyBatis-Plus(简称 MP)是 MyBatis 的增强工具,它简化了 MyBatis 的开发过程,提供了很多常用的功能封装。Service层是常见的业务逻辑层,主要负责对外提供操作数据库的接口,并在该层实现具体的业务逻辑。MyBatis-Plus 提供了IService接口和一些封装好的方法来帮助开发者实现数据层与业务层的交互,简化代码的编写。本文将深入探讨如何使用 MyBatis-Plus 提供的Service接口来简化开发,详细讲解其基本用法、常见功能以及如何扩展和自定义业务逻辑。在。

喵手的博客 1028

黑马点评:MyBatis-Plus Service 层继承与实现原理详解

摘要:在MyBatis-Plus框架中,UserServiceImpl同时继承ServiceImpl和实现IUserService接口。继承ServiceImpl可直接获得MyBatis-Plus提供的全套CRUD基础操作,避免重复编写;实现IUserService则定义了项目特有的业务方法规范,确保实现类必须提供这些方法。IUserService本身又继承IService接口,合并了通用CRUD和自定义业务方法。

yurenpai的博客 870

MyBatis-Plus 通用 insertBatch 为什么放在 service 层处理

在实际开发中,我们经常需要批量插入数据,以提高效率。MyBatis-Plus是一款优秀的持久层框架,它提供了很多便捷的操作方法,其中就包括了通用的批量插入方法。这个方法可以让我们一次性插入多条数据,极大地提升了数据库操作的效率。那么为什么要将这个方法放在service层来处理呢?本文将详细解释这个问题,并给出相关的实例演示。在使用MyBatis-Plus进行数据库操作时,我们可以使用实体类对象的方法来一次性插入多条数据。可以看到,这个方法接受一个实体类对象的集合作为参数,返回一个布尔值表示插入操作是否成功。

理论都是虚的,代码才是王道。 1156

简化开发流程,高效使用MyBatis-Plus:如何在Service层注入Mapper接口

在Java开发中,使用MyBatis-Plus可以大大简化数据库操作流程并提高开发效率。本文将介绍如何在Service层注入Mapper接口,以帮助读者更好地利用MyBatis-Plus进行开发。本文介绍了如何在Service层注入Mapper接口,以帮助读者更好地使用MyBatis-Plus进行开发。通过使用MyBatis-Plus,可以减少开发工作量,提高开发效率。希望本文能帮助到读者理解和使用MyBatis-Plus。

理论都是虚的,代码才是王道。 893

mybatis-plus中service层的CRUD使用示例

首先,你需要定义与数据库表对应的实体类,并使用。

记录学习编程的日常 1360

警惕!数字签名伪造的攻防演练:用SigThief克隆证书的真实测试(Windows环境)

本文深入探讨了Windows环境下数字签名伪造的攻防技术,详细介绍了使用SigThief工具进行签名提取与克隆的实战步骤。通过真实测试案例,揭示了数字签名安全机制的潜在漏洞,并提供了有效的防御策略和检测技术,帮助安全人员提升系统防护能力。

weixin_42530732的博客 408

MyBatis-Plus通用Service

MyBatis-Plus通用Service是对BaseMapper的增强封装,提供标准化的业务层CRUD操作,通用Service层通过封装重复逻辑,让开发者专注于核心业务开发。

2401_84284464的博客 1125

STM32 ST-LINK Utility 无法烧录程序的解决方法

当你打开STM32 ST-LINK Utility,硬件连接好st-link V2,打开了要烧写的文件,点那个Program verify烧录时, 如果出错了: Programming error @ 0x08000000! 我的方法是: 点你想要烧录那个HEX文件的小格,复制 然后去到你前面的文件的格子里,点粘贴: 成功! ...

wocute的博客 9521

A Side Scan Sonar Image Denoising Algorithm Based on Compound of Fuzzy Weighted Average and Kalman F

Abstract 水下侧扫声纳图像的噪声来源:高斯噪声、脉冲、斑点噪声。 传统方法只能移除部分噪声,并且去噪后容易造成细节模糊。 本文在考虑到噪声的随机性以后,提出一种融合了模糊加权平均和卡尔曼滤波的去噪方法。 在最大化保留图像细节的基础上,同时去除高斯噪声和脉冲噪声 一.Introduction 由于海底环境和声波自身干涉的影响,声纳图像生成的图像难免会有噪点。声纳采集的图像通常会有高斯噪声、脉...

qq_44516871的博客 927

MyBatis-Plus之通用service

说明:通用service用前缀命名方式区分Mapper层避免混淆,get:查询单行,remove:删除,list:查询集合,page:分页MyBatis-Plus中有一个接口 IService和其实现类 ServiceImpl,封装了常见的业务层逻辑IService: 二、创建自己的service接口和实现类 1.UserService接口 2.UserServiceImpl 三、测试类 1.查询总记录数 2.批量插入 插入的五条数据:name:szy0 szy1 szy2 szy3 szy4

2201_76081438的博客 1271

Oracle EBS的帐套由“4C”构成,而华为MetaERP将其发展为“6C”

华为MetaERP从OracleEBS的"4C"架构升级为"6C",实现核算理念革新。核心突破在于将会计科目、核算维度和核算单元解耦,形成"科目表+维度库"的灵活架构。新架构优势显著:1)科目回归会计本质,管理维度独立扩展;2)支持无限维度的精细化核算;3)实现数据权限隔离和内部交易自动化;4)采用元数据驱动设计,为AI应用奠定基础。这一平台化架构解决了大型企业在全球化、多元化发展中的核算难题,相比传统架构具有更强的灵活性和扩展性。

金牌架构师 203

MyBatis-Plus 之通用Service

MyBatis-Plus 之通用Service 首先创建一个数据库表,如下图所示: 然后创建一个Spring Boot项目,pom.xml和配置如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sche

kaven 2万+

位置点位到达判断FC(Easy+Codesys+博途平台)

IN rActPositon REAL 轴当前实际位置 1IN arAbsPosition REAL[10] 各工作点位坐标 2IN rDeadZone REAL 位置达到判断域值 范围 3OUT abInAbsPos BOOL[10] 到达各绝对定位点位标志 位置到达输出 4VAR i INT 循环计数 5VAR rErr REAL 位置偏差 6。

RXXW_Dor的博客 535

【RT-DETR有效改进】计算训练好权重文件对应的FPS、推理每张图片的平均时间(科研必备)

本文给大家带来的改进机制是利用我们训练好的权重文件计算FPS,同时打印每张图片所利用的平均时间,模型大小(以MB为单位),同时支持batch_size功能的选择,对于轻量化模型的读者来说,本文的内容对你一定有帮助,可以清晰帮你展示出模型速度性能的提升以及轻量化的效果(模型大小),对于以提高精度为目的的读者本文也能够帮助大家展示出现阶段的模型速度指标。所以本文的内容是十分有用的机制,对于大家发表论文来说,下面的图片为运行后的效果可以看到,该有的指标均已打印(本文内容为我独家创新,全网无第二份)下面是效果图和文

Snu77的博客 3628

mybatis-plus的service层有哪些方法

在 MyBatis-Plus 的IService接口中,提供了一系列常用的方法,开发者可以直接在Service层调用这些方法,提高开发效率。

m0_64934710的博客 638

Python爬虫抓取学术期刊数据(Springer、Elsevier)

本文详细介绍了如何使用Python爬虫抓取学术期刊网站(如Springer、Elsevier)上的文章信息,并进行数据清洗和存储。我们使用了requestsSeleniumpandas等技术,通过模拟浏览器行为来绕过反爬虫机制,并将数据保存为Excel文件,方便后续分析。未来,我们可以通过加入更多的期刊网站数据源,扩展爬虫的功能,抓取更多的学术数据。同时,结合自然语言处理(NLP)技术,可以对抓取的文章进行自动化的摘要提取和主题分类,为学术研究提供更多的支持。

2201_76125261的博客 1487

mybatis-plus的service层业务逻辑和Wrapper 条件构造器

1.service层业务逻辑处理 IService使用 service层需要继承IService,当然实现层也要继承对应的实现类。 public interface UserService extends IService<User> { } @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { } getOne(),这个是方法

weixin_46403305的博客 4061

IEC 104电力规约详细解读(五) - 遥控

主站下发遥控选择命令,子站进行遥控选择返校,若成功则回答遥控选择成功报文,若失败则回答失败报文。主站下发取消遥控命令或者遥控执行命令行。子站皆以报文的镜像确认。遥控命令用来实现对一个可操作设备状态的改变。在配电自动化中,包括单点命令和双点命令。通常,单点命令用于控制单点信息对象;双点命令用于控制双点信息对象。

张二狗的博客 7349

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

MyBatis-Plus——Service层开发

【代码】MyBatis-Plus——Service层开发。

weixin_51351637的博客 3351

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

MyBatis-Plus中的Service接口:全面解析与实战指南

首先,我们定义一个Service接口,继承自// 可以在这里定义自定义的业务方法 }// 可以在这里定义自定义的业务方法 }// 可以在这里定义自定义的业务方法 }// 可以在这里定义自定义的业务方法 }// 可以在这里定义自定义的业务方法 }IService;// 可以在这里定义自定义的业务方法接下来,我们定义一个Mapper接口,继承自// 可以在这里定义自定义的SQL方法 }// 可以在这里定义自定义的SQL方法 }// 可以在这里定义自定义的SQL方法 }

xycxycooo的博客 2283

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

dao层和service层和control_关于mybatis-plus中Service和Mapper的分析

关于mybatis-plus中Service和Mapper的分析在后端开发过程中,如果有用到mybatis-plus,肯定会发现在其内部存在着两种数据库操作接口,Iservice和BaseMapper,如果只是用增删改查会发现两者的功能是一致的,除了方法名称有所不同,其他的基本相似。对此,我颇为好奇,便打开两个接口的源码进行对比。先演示一下基本开发中的继承关系,手动创建的Service继承于Ser...

weixin_39610085的博客 1491

MyBatis-Plus Service CRUD 常用方法 Demo

1.List 1.1查询(根据 columnMap 条件查询) Collection<T> listByMap(Map<String, Object> columnMap); Map colMap = new HashMap(); colMap.put("orderNo", "fsdfsdfsdfsad1333"); colMap.put("orderType", "WK"); Collection<FastOrder> fastOrderColl = list..

qq_35921925的博客 2270

MyBatis-Plus的 Repository 层是干什么用的?

今天在复习项目的时候更新了 MyBatis-Plus 的依赖版本,发现原本好好的 Service 层代码报错了,细看是 MyBatis-Plus 的 IService 和 ServiceImpl 的原因。在通过查询官网后,发现官网提到了一个 Repository 层的概念,经过替换后,代码回归正常,这下我就好奇了,Repository 层是什么?MyBatis-Plus 为什么要加一个这东西?

zhachiken的博客 462

MyBatis-Plus中使用Mockito测试Service层时避免空指针异常

在MyBatis-Plus项目开发中,Service层的单元测试是确保业务逻辑正确性的关键环节。然而,使用Mockito框架进行测试时,空指针异常(NullPointerException)是最常见的问题之一。本文将深入探讨如何在MyBatis-Plus环境中有效避免这些异常,提供实用的解决方案和最佳实践。 ## 空指针异常的常见场景 ### 1. Service依赖未正确Mock ```j...

gitblog_01401的博客 687
上一篇: mybatis-plus 常用方法之lambdaQuery, LambdaQueryWrapper
下一篇: sql语法 DECODE, CASE ... WHEN
han_hanker
博客等级 码龄13年 35粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值