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中添加以下依赖:

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

3. 代码示例

3.1 定义实体类

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

java 复制代码
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>

java 复制代码
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接口。

java 复制代码
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 的功能,我们编写一些测试用例。

java 复制代码
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 {

    @Autowired
    private UserService userService;

    /**
     * 保存单个用户
     */
    @Test
    public void savetest(){
        User user = new User();
        user.setName("xiaoming");
        userService.save(user);
        System.out.println(user.getId());
    }

    /**
     * 批量保存用户
     */
    @Test
    public 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删除用户
     */
    @Test
    public void removeById(){
        userService.removeById(1949020695920902146L);
    }

    /**
     * 根据条件删除用户
     */
    @Test
    public void remove(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.gt("id",6l);
        userService.remove(queryWrapper);
    }

    /**
     * 根据ID更新用户信息
     */
    @Test
    public void updateById(){
        User user = new User();
        user.setId(1949019913414877186l);
        user.setName("xiaoming");
        user.setEmail("xiongda@qcby.com");
        user.setAge(18);
        userService.updateById(user);
    }

    /**
     * 根据ID查询用户信息
     */
    @Test
    public void getById(){
        userService.getById(1949020696017371138L);
    }

    /**
     * 查询用户列表
     */
    @Test
    public void list(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.gt("id",5l);
        List<User> list = userService.list(queryWrapper);
        System.out.println(list);
    }

    /**
     * 分页查询用户信息
     */
    @Test
    public 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方法用于分页查询实体对象。
相关推荐
计算机学姐9 小时前
基于SpringBoot的校园二手书籍交易系统【个性化推荐+数据可视化统计+我买到的+我卖出的】
vue.js·spring boot·后端·mysql·信息可视化·intellij-idea·mybatis
zjneymar10 小时前
Mybatis的动态sql
java·sql·mybatis
稻草猫.11 小时前
MyBatis-Plus高效开发全攻略
java·数据库·后端·spring·java-ee·mybatis·mybatis-plus
计算机学姐12 小时前
基于SpringBoot的网吧管理系统
java·spring boot·后端·spring·tomcat·intellij-idea·mybatis
弹简特12 小时前
【JavaEE20-后端部分】 MyBatis 入门第四篇:多表查询、#{}与${}详解、数据库连接池
数据库·mybatis
哆啦A梦158821 小时前
Springboot整合MyBatis实现数据库操作
数据库·spring boot·mybatis
弹简特1 天前
【JavaEE19-后端部分】 MyBatis 入门第三篇:使用XML完成增删改查
xml·mybatis
小江的记录本1 天前
【VO、DTO、Entity】VO、DTO、Entity三大核心数据对象全解析(附核心对比表 + 代码示例)
java·数据库·spring boot·spring·架构·mybatis·数据库架构
计算机学姐1 天前
基于SpringBoot的流浪动物救助收养系统
vue.js·spring boot·后端·mysql·java-ee·intellij-idea·mybatis
计算机学姐1 天前
基于SpringBoot的蛋糕烘焙销售服务系统
java·spring boot·后端·spring·tomcat·intellij-idea·mybatis