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

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

相关文章:

  • 阿里云部署若依后,浏览器能正常访问,但是apifox和小程序访问后报错链接被重置
  • [失败记录] 使用HBuilderX创建的uniapp vue3项目添加tailwindcss3的完整过程
  • [无需 Mac] 使用 GitHub Actions 构建 iOS 应用
  • vue3 el-select 加载内容后 触发事件
  • 「耘•学社」耘少年第五期学能突破导师制领袖特训营,圆满落幕
  • C++与SparkAI实战:高效应用案例
  • Android-Kotlin基础(Jetpack②-Data Binding)
  • 国产化Excel处理组件Spire.XLS教程:使用 C# 将 DataTable 导出为 Excel 文件
  • 嵌入式C语言编程:策略模式、状态模式和状态机的应用
  • 东莞立晟精密硅胶科技有限公司将携重磅产品亮相 AUTO TECH China 2025 广州国际汽车技术展
  • 计算机网络1-4:计算机网络的定义和分类
  • 汽车娱乐信息系统域控制器的网络安全开发方案
  • FPGA实战:用PL端串口发送Hello world
  • 【C/C++】C++引用和指针的对比
  • 29-数据仓库与Apache Hive-创建库、创建表
  • 树莓派安装OpenCV环境
  • 【CDA案例】数据分析案例拆解:解锁数据分析全流程!
  • 微服务、服务网格、Nacos架构与原理
  • mapbox进阶,mapbox-gl-draw绘图插件扩展,绘制新增、编辑模式支持点、线、面的捕捉
  • Linux系统编程--权限管理
  • 在NVIDIA Orin上用TensorRT对YOLO12进行多路加速并行推理时内存泄漏(下)
  • Redis为什么要引入多线程?
  • 如何在GPU上安装使用Docker
  • 【AI】——SpringAI通过Ollama本地部署的Deepseek模型实现一个对话机器人(二)
  • 用 tcpdump 捕获网络数据包
  • RTSP播放器技术详解:功能支持、平台覆盖与快速集成指南
  • PostgreSQL 强制索引:当重复数据让优化器“失明”时的解决方案
  • centos系统sglang单节点本地部署大模型
  • Sklearn 机器学习 数据降维PCA 自己实现PCA降维算法
  • 如何打造一支AI时代下的IT团队,为企业战略目标快速赋能