全文目录:
- 开篇语
- 前言
- 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
接口的服务接口和实现类。
示例:创建实体类 User
和 UserService
// 实体类 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 !!!
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
版权声明:本文由作者原创,转载请注明出处,谢谢支持!