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

全文目录:

    • 开篇语
    • 前言
    • 1. MyBatis-Plus 的 `IService` 接口
      • 1.1 基本使用
        • 示例:创建实体类 `User` 和 `UserService`
        • 1.2 创建 `IService` 接口
        • 1.3 创建 `ServiceImpl` 类
      • 1.4 典型的数据库操作方法
        • 1.4.1 `save()`:保存数据
        • 1.4.2 `remove()`:删除数据
        • 1.4.3 `updateById()`:根据 ID 更新数据
        • 1.4.4 `list()`:查询所有数据
        • 1.4.5 `page()`:分页查询
      • 1.5 自定义业务方法
        • 示例:添加自定义业务方法
    • 2. MyBatis-Plus Service 层的高级用法
      • 2.1 条件构造器 `QueryWrapper`
      • 2.2 更新和删除的条件构造
      • 2.3 分页查询
      • 2.4 批量操作
    • 3. 小结
    • 文末

开篇语

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

MyBatis-Plus(简称 MP)是 MyBatis 的增强工具,它简化了 MyBatis 的开发过程,提供了很多常用的功能封装。Service 层是常见的业务逻辑层,主要负责对外提供操作数据库的接口,并在该层实现具体的业务逻辑。MyBatis-Plus 提供了 IService 接口和一些封装好的方法来帮助开发者实现数据层与业务层的交互,简化代码的编写。

本文将深入探讨如何使用 MyBatis-Plus 提供的 Service 接口来简化开发,详细讲解其基本用法、常见功能以及如何扩展和自定义业务逻辑。

1. MyBatis-Plus 的 IService 接口

MyBatis-Plus 为业务逻辑层提供了 IService 接口,该接口包含了很多常用的数据库操作方法。IService 接口通过泛型来操作具体的实体类,常用的方法包括:save()remove()update()list()page() 等。

1.1 基本使用

首先,我们需要创建一个继承 IService 接口的服务接口和实现类。

示例:创建实体类 UserUserService
// 实体类 User
public class User {private Long id;private String name;private Integer age;private String email;// Getters and setters
}
1.2 创建 IService 接口
import com.baomidou.mybatisplus.extension.service.IService;public interface UserService extends IService<User> {// 可以在这里添加一些自定义的业务方法
}

UserService 继承了 IService<User>IService 提供了一些常用的方法,例如 save(), updateById(), removeById() 等方法,UserService 类不需要实现这些方法,MyBatis-Plus 会自动为我们提供实现。

1.3 创建 ServiceImpl
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {// 这里可以添加自己的业务方法
}

ServiceImpl 是 MyBatis-Plus 提供的一个基础实现类,它实现了 IService 接口的所有方法。我们通过继承 ServiceImpl 来获得对常见方法的支持,并且可以在 UserServiceImpl 中添加自定义业务逻辑。

1.4 典型的数据库操作方法

IService 接口中,有许多已经实现的方法,这些方法极大地简化了我们常见的 CRUD 操作。以下是几个常用的方法:

1.4.1 save():保存数据

save() 方法用于保存一个实体对象,如果对象中存在主键,则会根据主键判断是插入数据还是更新数据。

User user = new User();
user.setName("Tom");
user.setAge(25);
user.setEmail("tom@example.com");userService.save(user);
1.4.2 remove():删除数据

remove() 方法根据条件删除数据。可以根据 Wrapper 来定义删除条件。

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "Tom");
userService.remove(queryWrapper);
1.4.3 updateById():根据 ID 更新数据

updateById() 方法用于根据主键更新数据。

User user = new User();
user.setId(1L);
user.setName("Jerry");
user.setAge(26);userService.updateById(user);
1.4.4 list():查询所有数据

list() 方法用于查询所有数据。

List<User> users = userService.list();
1.4.5 page():分页查询

page() 方法支持分页查询,需要传入 Page 对象和查询条件。

Page<User> page = new Page<>(1, 10);  // 第 1 页,每页 10 条数据
Page<User> userPage = userService.page(page);
System.out.println(userPage.getRecords());  // 获取查询的记录

1.5 自定义业务方法

Service 接口中,除了继承 IService 接口提供的默认方法外,我们还可以根据业务需求添加自定义的方法。例如,假设我们需要实现一个根据年龄查询用户的业务逻辑,可以在 UserService 接口中定义自定义方法,并在 UserServiceImpl 类中实现。

示例:添加自定义业务方法
public interface UserService extends IService<User> {List<User> getUsersByAge(int age);
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {@Overridepublic List<User> getUsersByAge(int age) {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("age", age);return this.list(queryWrapper);}
}

UserServiceImpl 中,我们通过 QueryWrapper 来封装查询条件,然后调用 MyBatis-Plus 提供的 list() 方法来查询符合条件的数据。

2. MyBatis-Plus Service 层的高级用法

除了常见的 CRUD 操作,MyBatis-Plus 的 IService 还提供了一些高级功能,帮助我们进行复杂的查询、分页、条件构造等操作。

2.1 条件构造器 QueryWrapper

QueryWrapper 是 MyBatis-Plus 提供的条件构造器,能够帮助我们更加灵活地构建查询条件。你可以通过 QueryWrapper 来添加各种条件、排序和分页操作。

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 25).like("name", "T");
List<User> users = userService.list(queryWrapper);

2.2 更新和删除的条件构造

除了查询,QueryWrapper 还可以用于更新和删除数据,帮助我们更加灵活地管理数据。

// 更新
User user = new User();
user.setAge(30);
QueryWrapper<User> updateWrapper = new QueryWrapper<>();
updateWrapper.eq("name", "Tom");
userService.update(user, updateWrapper);// 删除
QueryWrapper<User> deleteWrapper = new QueryWrapper<>();
deleteWrapper.eq("name", "Tom");
userService.remove(deleteWrapper);

2.3 分页查询

分页查询是一个常见的需求。MyBatis-Plus 提供了非常简洁的分页支持,通过 Page 对象和 page() 方法,可以轻松实现分页查询。

Page<User> page = new Page<>(1, 10);  // 第 1 页,每页 10 条数据
Page<User> resultPage = userService.page(page, new QueryWrapper<User>().like("name", "T"));
System.out.println(resultPage.getRecords());

2.4 批量操作

MyBatis-Plus 还支持批量操作,通常通过 saveBatch()updateBatchById() 等方法来实现批量插入、更新操作。

List<User> users = new ArrayList<>();
// 假设我们已经向列表中添加了多个 User 对象
userService.saveBatch(users);

3. 小结

通过 MyBatis-Plus 提供的 IService 接口,我们可以极大地简化业务层的开发,避免重复编写基础的 CRUD 操作代码。IService 接口为我们提供了常见的操作方法,如 save()updateById()remove()list() 等,而通过继承 ServiceImpl 类,我们可以直接享用这些功能,并且可以根据需要扩展自定义的业务逻辑。

MyBatis-Plus 的强大之处不仅仅在于简化了数据库操作,还支持丰富的查询功能、分页功能、条件构造等,能够满足大多数企业级应用的需求。通过合理使用这些特性,我们可以更加高效地进行数据库操作,提升开发效率。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。


版权声明:本文由作者原创,转载请注明出处,谢谢支持!

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

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

相关文章

[激光原理与应用-168]:光源 - 常见光源的分类、特性及应用场景的详细解析,涵盖技术原理、优缺点及典型应用领域

一、半导体光源1. LED光源&#xff08;发光二极管&#xff09;原理&#xff1a;通过半导体PN结的电子-空穴复合发光&#xff0c;波长由材料带隙决定&#xff08;如GaN发蓝光、AlGaInP发红光&#xff09;。特性&#xff1a;优点&#xff1a;寿命长&#xff08;>5万小时&#…

Metronic v.7.1.7企业级Web应用前端框架全攻略

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;Metronic是一款专注于构建响应式、高性能企业级Web应用的前端开发框架。最新版本v.7.1.7引入了多种功能和优化&#xff0c;以增强开发效率和用户体验。详细介绍了其核心特性&#xff0c;包括响应式设计、多种模…

鸿蒙开发--Notification Kit(用户通知服务)

通知是手机系统中很重要的信息展示方式&#xff0c;通知不仅可以展示文字&#xff0c;也可以展示图片&#xff0c;甚至可以将组件加到通知中&#xff0c;只要用户不清空&#xff0c;通知的信息可以永久保留在状态栏上通知的介绍 通知 Notification通知&#xff0c;即在一个应用…

鸿蒙 - 分享功能

文章目录一、背景二、app发起分享1. 通过分享面板进行分享2. 使用其他应用打开二、处理分享的内容1. module.json5 配置可接收分享2. 解析分享的数据一、背景 在App开发中&#xff0c;分享是常用功能&#xff0c;这里介绍鸿蒙开发中&#xff0c;其他应用分享到自己的app中&…

【Agent 系统设计】基于大语言模型的智能Agent系统

一篇阿里博文引发的思考和探索。基于大语言模型的智能Agent系统 1. 系统核心思想 核心思想是构建一个以大语言模型&#xff08;LLM&#xff09;为“大脑”的智能代理&#xff08;Agent&#xff09;&#xff0c;旨在解决将人类的自然语言指令高效、准确地转化为机器可执行的自动…

企业级Web框架性能对决:Spring Boot、Django、Node.js与ASP.NET深度测评

企业级Web应用的开发效率与运行性能直接关系到业务的成败。本文通过构建标准化的待办事项&#xff08;Todo&#xff09;应用&#xff0c;对四大主流框架——Spring Boot、Django、Node.js和ASP.NET展开全面的性能较量。我们将从底层架构特性出发&#xff0c;结合实测数据与数据…

为什么 `source ~/.bashrc` 在 systemd 或 crontab 中不生效

摘要&#xff1a;你是否遇到过这样的问题&#xff1a;在终端里运行脚本能正常工作&#xff0c;但用 systemd 或 crontab 自动启动时却报错“命令找不到”、“模块导入失败”&#xff1f; 本文将揭示一个深藏在 ~/.bashrc 中的“陷阱”&#xff1a;非交互式 shell 会直接退出&am…

Linux 磁盘中的文件

1.磁盘结构 Linux中的文件加载到内存上之前是放到哪的&#xff1f; 放在磁盘上的文件——>访问文件&#xff0c;打开它——>找到这个文件——>路径 但文件是怎样存储在磁盘上的 1.1物理结构磁盘可以理解为上百亿个小磁铁&#xff08;如N为1&#xff0c;S为0&#xff0…

【方法】Git本地仓库的文件夹不显示红色感叹号、绿色对号等图标

文章目录前言开始操作winr&#xff0c;输入regedit&#xff0c;打开注册表重启资源管理器前言 这个绿色对号图标表示本地仓库和远程的GitHub仓库内容保持一致&#xff0c;红色则是相反咯&#xff0c;给你们瞅一下。 首先这两个东西你一定要安装配置好了&#xff0c;安装顺序不…

量化交易与主观交易:哪种方式更胜一筹?

文章概要 在投资的世界里&#xff0c;量化交易和主观交易如同冰与火&#xff0c;各自拥有独特的优势与挑战。作为一名投资者&#xff0c;了解这两种交易方式的差异和各自的优缺点至关重要。本文将从决策依据、执行方式、风险管理等方面深入探讨量化交易的精确性与主观交易的灵活…

【JS】扁平树数据转为树结构

扁平数据转为最终效果[{"label":"疼逊有限公司","code":"1212","disabled":false,"parentId":"none","children":[{"label":"财务部","code":"34343&quo…

数据结构4-栈、队列

摘要&#xff1a;本文系统介绍了栈和队列两种基础数据结构。栈采用"先进后出"原则&#xff0c;分为顺序栈和链式栈&#xff0c;详细说明了压栈、出栈等基本操作及其实现方法。队列遵循"先进先出"规则&#xff0c;同样分为顺序队列和链式队列&#xff0c;重…

大数据spark、hasdoop 深度学习、机器学习算法的音乐平台用户情感分析系统设计与实现

大数据spark、hasdoop 深度学习、机器学习算法的音乐平台用户情感分析系统设计与实现

视频汇聚系统EasyCVR调用设备录像保活时视频流不连贯问题解决方案

在使用EasyCVR过程中&#xff0c;有用户反馈调用设备录像保活功能时&#xff0c;出现视频流不连贯的情况。针对这一问题&#xff0c;我们经过排查与测试&#xff0c;整理出如下解决步骤&#xff0c;供开发者参考&#xff1a;具体解决步骤1&#xff09;先调用登录接口完成鉴权确…

【保姆级喂饭教程】python基于mysql-connector-python的数据库操作通用封装类(连接池版)

目录项目环境一、db_config.py二、mysql_executor.py三、test/main.py在使用mysql-connector-python连接MySQL数据库的时候&#xff0c;如同Java中的jdbc一般&#xff0c;每条sql需要创建和删除连接&#xff0c;很自然就想到写一个抽象方法&#xff0c;但是找了找没有官方标准的…

【MCP服务】蓝耘元生代 | 蓝耘MCP平台来袭!DeepSeek MCP服务器玩转大模型集成

【作者主页】Francek Chen 【专栏介绍】⌈⌈⌈人工智能与大模型应用⌋⌋⌋ 人工智能&#xff08;AI&#xff09;通过算法模拟人类智能&#xff0c;利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络&#xff08;如ChatGPT&#xff09…

Spring Boot 整合 Minio 实现高效文件存储解决方案(本地和线上)

文章目录前言一、配置1.配置文件&#xff1a;application.yml2.配置类&#xff1a;MinioProperties3.工具类&#xff1a;MinioUtil3.1 初始化方法3.2 核心功能3.3 关键技术点二、使用示例1.控制器类&#xff1a;FileController2.服务类3.效果展示总结前言 Minio 是一个高性能的…

【Unity3D实例-功能-镜头】第三人称视觉-镜头优化

这一篇我们一起来调整一下Cinemachine的第三人称视觉的镜头设置。一般用于ARPG角色扮演游戏的场景中。Unity里头&#xff0c;这种视角简直就是标配。来吧&#xff0c;咱们一起研究研究怎么调出这种视角效果&#xff01;目录&#xff1a;1.调整虚拟摄像机的Y轴2.调整虚拟摄像机的…

二叉树算法之【中序遍历】

目录 LeetCode-94题 LeetCode-94题 给定一个二叉树的根节点root&#xff0c;返回它的中序遍历结果。 class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> result new ArrayList<>();order(root, result);return res…

Android14的QS面板的加载解析

/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java QS 面板的创建 getNotificationShadeWindowView()&#xff1a;整个systemui的最顶级的视图容器&#xff08;super_notification_shade.xml&#xff09;R.id.qs_frame &…