MyBatis Plus 使用 Service 接口进行增删改查

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 本文介绍了基于 MyBatis-Plus 的数据库操作流程,包括配置、实体类、Service 层及 Mapper 层的创建。通过在 `application.yml` 中配置 SQL 日志打印,确保调试便利。示例中新建了 `UserTableEntity` 实体类映射 `sys_user` 表,并构建了 `UserService` 和 `UserServiceImpl` 处理业务逻辑,同时定义了 `UserTableMapper` 进行数据交互。测试部分展示了查询、插入、删除和更新的操作方法及输出结果,帮助开发者快速上手 MyBatis-Plus 数据持久化框架。

一、概述

一般我们不在 controller 层直接使用 mapper 方法去操控数据库,而是通过 service 写业务逻辑,然后去操控数据库。

src/main/resources/application.yml 中加上以下配置,可以在控制台打印 sql 语句。

yml

体验AI代码助手

代码解读

复制代码

mybatis-plus:
  configuration:
    # 显示查询语句
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

二、步骤

2.1 新建实体类

java

体验AI代码助手

代码解读

复制代码

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

/**
 * @author: yunhu
 * @date: 2022/6/14
 */

@Data
@TableName("sys_user")
public class UserTableEntity {
    @TableId("id")
    private Integer id;

    @TableField("username")
    private String username;

    @TableField("password")
    private String password;
}

sys_user 中的数据

id username password
1 admin yunhu0
2 test 123456

2.2 新建 UserService 接口

新建 service目录,在 service目录下新建 UserService 接口继承 IService<T>

T 泛型在这边就是 UserTableEntity实体类。

java

体验AI代码助手

代码解读

复制代码

import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.util.List;

/**
 * @author: yunhu
 * @date: 2022/6/14
 */

@Service
@Component
public interface UserService extends IService<UserTableEntity> {
}

2.3 新建 UserServiceImpl 类

service目录下新建 impl目录,在 impl目录中新建 UserServiceImpl类 。

UserServiceImpl去继承 ServiceImpl<M extends BaseMapper<T> , T> implements IService<T>

ServiceImpl 有两个参数:

  1. M extends BaseMapper<T>是一个继承 BaseMapper<T>的自定义 mapper,接下来会新建。
  2. T实体类。

java

体验AI代码助手

代码解读

复制代码

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author: yunhu
 * @date: 2022/6/14
 */

@Service
public class UserServiceImpl extends ServiceImpl<UserTableMapper, UserTableEntity> implements UserService {
}

2.4 新建UserTableMapper接口

新建 mapper 目录,然后在 mapper 目录下新建 UserTableMapper接口。

java

体验AI代码助手

代码解读

复制代码

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

/**
 * @author: yunhu
 * @date: 2022/6/14
 */

@Mapper
public interface UserTableMapper extends BaseMapper<UserTableEntity> {

}

三、测试

3.1 查询

java

体验AI代码助手

代码解读

复制代码

package com.example.library;

import com.example.library.entity.UserTableEntity;
import com.example.library.service.UserService;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;

/**
 * @author: yunhu
 * @date: 2022/6/14
 */

@MapperScan("com.example.library.mapper")
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
class LibraryApplicationTests {

    @Autowired
    private UserService userService;

    @Test
    void contextLoads() {
        // 查找所有值
        List<UserTableEntity> list = userService.list();
        list.forEach(System.out::println);

    }
}

output:

sh

体验AI代码助手

代码解读

复制代码

UserTableEntity(id=1, username=admin, password=yunhu0)
UserTableEntity(id=2, username=test, password=123456)

3.2 插入

java

体验AI代码助手

代码解读

复制代码

void contextLoads() {
    // 插入操作
    UserTableEntity userTableEntity = new UserTableEntity();
    userTableEntity.setId(3);
    userTableEntity.setUsername("cheng");
    userTableEntity.setPassword("666666");
    Boolean res = userService.save(userTableEntity);
    if (res) {
        System.out.println("add success");
        // 查看插入后的表中数据
        List<UserTableEntity> list = userService.list();
        list.forEach(System.out::println);
    } 
}

output:

sh

体验AI代码助手

代码解读

复制代码

add success
UserTableEntity(id=1, username=admin, password=yunhu0)
UserTableEntity(id=2, username=test, password=123456)
UserTableEntity(id=3, username=cheng, password=666666)

3.3 删除

删除用户名为 admin 的记录。

java

体验AI代码助手

代码解读

复制代码

void contextLoads() {
        QueryWrapper<UserTableEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("username", "admin");
        boolean res = userService.remove(queryWrapper);
        if(res) {
            System.out.println("delete success");
            // 查看删除后的表中数据
            List<UserTableEntity> list = userService.list();
            list.forEach(System.out::println);
        }
}

output:

sh

体验AI代码助手

代码解读

复制代码

delete success
UserTableEntity(id=2, username=test, password=123456)
UserTableEntity(id=3, username=cheng, password=666666)

3.4 更新

java

体验AI代码助手

代码解读

复制代码

void contextLoads() {
        UserTableEntity userTableEntity = new UserTableEntity();
        userTableEntity.setId(3);
        userTableEntity.setUsername("Tom Sawyer");
        userTableEntity.setPassword("777777");
        // 通过 id 更新
        boolean res = userService.updateById(userTableEntity);
        if(res) {
            System.out.println("update success");
            // 查看更新后的表中数据
            List<UserTableEntity> list = userService.list();
            list.forEach(System.out::println);
        }
}

output:

sh

体验AI代码助手

代码解读

复制代码

update success
UserTableEntity(id=2, username=test, password=123456)
UserTableEntity(id=3, username=Tom Sawyer, password=777777)


转载来源:https://juejin.cn/post/7109017150328668174

相关文章
|
1月前
|
XML Java 数据库连接
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
113 21
|
6月前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
148 10
|
7月前
|
SQL XML Java
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
7月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
116 1
|
8月前
|
SQL Java 数据库
4、Mybatis-Plus 通用service的操作
这篇文章介绍了如何在Mybatis-Plus框架中进行通用Service层的操作。内容包括目录结构、创建继承了IService接口的UserService接口、实现该接口的UserServiceImpl类,以及如何在Controller层注入Service接口来进行业务操作。文章通过具体的代码示例,展示了如何利用Mybatis-Plus提供的通用Service和ServiceImpl类来简化数据库的CRUD操作,并提高开发效率。
|
8月前
|
XML Java 数据库连接
MyBatis中的接口代理机制及其使用
【8月更文挑战第5天】MyBatis的接口代理机制是其核心功能之一,允许通过定义接口并在运行时生成代理对象来操作数据库。开发者声明一个带有`@Mapper`注解的接口,MyBatis则依据接口方法、映射配置(XML或注解)及数据库信息动态生成代理类。此机制分为四步:创建接口、配置映射文件或使用注解、最后在业务逻辑中注入并使用代理对象。这种方式简化了数据库操作,提高了代码的可读性和可维护性。例如,在电商系统中可通过`OrderMapper`处理订单数据,在社交应用中利用`MessageMapper`管理消息,实现高效且清晰的数据库交互。
|
9月前
|
Java 数据库连接 数据库
mybatis plus 中增删改查及Wrapper的使用
mybatis plus 中增删改查及Wrapper的使用
362 3
|
8月前
|
druid Java 数据库连接
SpringBoot项目整合MybatisPlus持久层框架+Druid数据库连接池,以及实现增删改查功能
SpringBoot项目整合MybatisPlus和Druid数据库连接池,实现基本的增删改查功能。
596 0
MybatisPlus--IService接口基本用法,MP提供了Service接口,save(T) 这里的意思是新增了一个T, saveBatch 是批量新增的意思,saveOrUpdate是增或改
MybatisPlus--IService接口基本用法,MP提供了Service接口,save(T) 这里的意思是新增了一个T, saveBatch 是批量新增的意思,saveOrUpdate是增或改
|
1月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
42 0