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

MyBatis-Plus 通用 Service

引言

在开发 Java Web 应用程序时,我们经常需要进行大量的数据库操作,如创建、读取、更新和删除(CRUD)。MyBatis-Plus 作为一个强大的 MyBatis 增强工具,为我们提供了通用 Service 接口,极大地简化了这些操作。本文将详细介绍 MyBatis-Plus 通用 Service 的使用,结合具体代码示例,帮助大家更好地理解和应用。

1. 通用 Service 概述

MyBatis-Plus 的通用 Service CRUD 封装了IService接口,通过采用get查询单行、remove删除、list查询集合、page分页等前缀命名方式,进一步封装了 CRUD 操作,避免了 Mapper 层的混淆。同时,泛型T可以是任意实体对象,使得该接口具有很高的通用性。

如果我们在项目中可能存在自定义通用 Service 方法的需求,建议创建自己的IBaseService继承 MyBatis-Plus 提供的基类。官方文档地址为:[https://baomidou.com/pages/49cc81/#service-crud-接口](https://baomidou.com/pages/49cc81/#service-crud-%E6%8E%A5%E5%8F% A3)

2. 项目环境搭建

在开始之前,我们需要确保项目中已经引入了 MyBatis-Plus 的依赖。以 Maven 为例,在pom.xml中添加以下依赖:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>最新版本号</version>
</dependency>

 

3. 代码示例

3.1 定义实体类

首先,我们需要定义一个实体类User,用于表示数据库中的用户表。

package com.qcby.entity;import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("user")
public class User {private Long id;private String name;private Integer age;private String email;
}

 

 

3.2 定义 Service 接口

接下来,我们定义一个UserService接口,继承自IService<User>

 

package com.qcby.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.qcby.entity.User;public interface UserService extends IService<User> {
}

3.3 实现 Service 接口

然后,我们实现UserService接口。

package com.qcby.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qcby.entity.User;
import com.qcby.mapper.UserMapper;
import com.qcby.service.UserService;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

 

3.4 测试 Service 方法

为了验证通用 Service 的功能,我们编写一些测试用例。

package com.qcby;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qcby.entity.User;
import com.qcby.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@SpringBootTest
public class MybatisPlusServiceTest {@Autowiredprivate UserService userService;/*** 保存单个用户*/@Testpublic void savetest(){User user = new User();user.setName("xiaoming");userService.save(user);System.out.println(user.getId());}/*** 批量保存用户*/@Testpublic void saveBatchTest(){List<User> userList = new ArrayList<>();User user1 = new User();user1.setName("xiaobai");userList.add(user1);User user2 = new User();user2.setName("xiaoli");userList.add(user2);userService.saveBatch(userList);System.out.println(userList.size());}/*** 根据ID删除用户*/@Testpublic void removeById(){userService.removeById(1949020695920902146L);}/*** 根据条件删除用户*/@Testpublic void remove(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.gt("id",6l);userService.remove(queryWrapper);}/*** 根据ID更新用户信息*/@Testpublic void updateById(){User user = new User();user.setId(1949019913414877186l);user.setName("xiaoming");user.setEmail("xiongda@qcby.com");user.setAge(18);userService.updateById(user);}/*** 根据ID查询用户信息*/@Testpublic void getById(){userService.getById(1949020696017371138L);}/*** 查询用户列表*/@Testpublic void list(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.gt("id",5l);List<User> list = userService.list(queryWrapper);System.out.println(list);}/*** 分页查询用户信息*/@Testpublic void pageNavigation() {// 创建分页对象,查询第1页,每页5条Page<User> page = new Page<>(1, 5);// 执行分页查询Page<User> resultPage = userService.page(page);// 打印分页信息System.out.println("当前页: " + resultPage.getCurrent());System.out.println("每页大小: " + resultPage.getSize());System.out.println("总记录数: " + resultPage.getTotal());System.out.println("总页数: " + resultPage.getPages());System.out.println("当前页数据: " + resultPage.getRecords());int i = 2;while(resultPage.hasNext()){System.out.println("\n=== 查询下一页 ===");page.setCurrent(i); // 设置为第i页Page<User> nextPage = userService.page(page);System.out.println("当前页: " + nextPage.getCurrent());System.out.println("当前页数据: " + nextPage.getRecords());i++;}}
}

4. 代码解释

4.1 保存操作

  • save方法用于保存单个实体对象。
  • saveBatch方法用于批量保存实体对象。

4.2 删除操作

  • removeById方法根据 ID 删除实体对象。
  • remove方法根据条件删除实体对象。

4.3 更新操作

  • updateById方法根据 ID 更新实体对象的信息。

4.4 查询操作

  • getById方法根据 ID 查询单个实体对象。
  • list方法根据条件查询实体对象列表。
  • page方法用于分页查询实体对象。
http://www.dtcms.com/a/299736.html

相关文章:

  • J2EE模式---表现层集成模式
  • MyBatis Plus 对数据表常用注解
  • 进阶数据结构:用红黑树实现封装map和set
  • Sql server查询汇总补缺月份
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 热词评论查询功能实现
  • Android开发中内存泄漏问题治理方案
  • 四通OKI5560SC针式打印机如何复位清零和恢复出厂设置??
  • 昇思学习营-昇思+香橙派+deepseek介绍课程内容及心得
  • Chukonu 阅读笔记
  • Rerank 模型的其中两种路径:BERT 相似度与 CoT 推理
  • 如何应对心事干扰学习工作?
  • 高可用集群KEEPALIVED的详细部署
  • 【CTF-Web】dirsearch寻找download.php进行?path=flag.txt任意文件下载
  • 深入解析命名管道:原理、实现与进程间通信应用
  • 机器学习对中特估股票关键特征选取的应用与研究
  • 【橘子分布式】gRPC(番外篇-监听流)
  • Thinkph6中常用的验证方式实例
  • 【时时三省】(C语言基础)用指向函数的指针作函数参数
  • 网络:应用层
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-30,(知识点:传输线特性阻抗,影响因素)
  • 【web应用】基于Vue3和Spring Boot的课程管理前后端数据交互过程
  • 1、虚拟机安装
  • InfluxDB Flux 查询协议实战应用(二)
  • Linux726 raid0,raid1,raid5;raid 创建、保存、停止、删除
  • Python 程序设计讲义(22):循环结构——for 循环
  • 使用FRP搭建内网穿透工具,自己公网服务器独享内外网端口转发
  • C++ APM异步编程模式剖析
  • 2025微前端架构研究与实践方案
  • 【6G新技术探索】AG-UI(Agent User Interaction Protocol) 协议介绍
  • Flutter开发实战之动画与交互设计