深入解析Mybatis-Plus框架:简化Java持久层开发(四)

🍀 前言

博客地址:

👋 简介

上一章已经完成了基础代码生成,本章就来具体使用Mybatis-Plus来实现CRUD简单的操作。

📖 正文

1 创建测试类

package com.power.mpdemo;

import com.power.mpdemo.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * @author power
 * @time 2023/12/21 14:30
 * @Description
 */
@SpringBootTest
public class UserTests {
    
    @Autowired
    private UserMapper userMapper;
    
    @Test
    public void insert(){

    }
}

注解介绍:

  • @SpringBootTest:用来标记一个测试类,它告诉Spring Boot启动一个完整的应用程序上下文,而不仅仅是一个单一的测试类或测试方法。
  • @Test:该方法可以不用main方法调用就可以测试出运行结果
  • @Autowired:它可以对类成员变量、方法及构造函数进行标注,让 spring 完成 bean 自动装配的工作

2 添加

需求:添加一个用户

2.1 使用mapper添加
@Autowired
private UserMapper userMapper;

@Test
public void insert(){
    // 模拟创建一个用户
    User user = User.builder()
            .username("admin")
            .password("123456")
            .name("超级管理员")
            .email("442331998@qq.com")
            .phone("18811111111")
            .avatar("头像地址url")
            .sex(1)
            .description("管理员")
            .build();
    // 调用添加用户的接口
    int insert = userMapper.insert(user);
    System.out.println("插入结果:" + insert);
}

// 插入结果:1

前面添加了p6spy依赖,所以控制台打印了实际执行的SQL

INSERT INTO tb_user ( username, password, name, email, phone, avatar, sex, description ) VALUES ( 'admin', '123456', '超级管理员', '442331998@qq.com', '18811111111', '头像地址url', 1, '管理员' )
2.2 使用service添加
@Autowired
private IUserService userService;

@Test
public void insertByService(){
    // 模拟创建一个用户
    User user = User.builder()
            .username("test01")
            .password("123456")
            .name("测试1号")
            .email("123456789@qq.com")
            .phone("18811111111")
            .avatar("头像地址url")
            .sex(1)
            .description("测试账号")
            .build();
    // 调用添加用户的接口
    boolean b = userService.save(user);
    System.out.println("插入结果:" + b);
}

// 插入结果:true

实际执行的SQL

INSERT INTO tb_user ( username, password, name, email, phone, avatar, sex, description ) VALUES ( 'test01', '123456', '测试1号', '123456789@qq.com', '18811111111', '头像地址url', 1, '测试账号' )

总结:通过对比可以发现,mapper接口调用的方法是insert,而service的方法是save,并且返回的结果也不一样,mapper接口通过返回受影响的行数,而service返回的则是布尔值

3 查询

需求:查询所有用户信息

3.1 使用mapper查询
@Test
public void select() {
    List<User> list = userMapper.selectList(null);
    list.forEach(System.out::println);
}

// User(id=1, username=admin, password=123456, name=超级管理员, email=442331998@qq.com, phone=18811111111, avatar=头像地址url, sex=1, description=管理员, status=1, createTime=2023-12-21T14:41:29, updateTime=2023-12-21T14:41:29, isDeleted=0)
// User(id=2, username=test01, password=123456, name=测试1号, email=123456789@qq.com, phone=18811111111, avatar=头像地址url, sex=1, description=测试账号, status=1, createTime=2023-12-21T14:48:24, updateTime=2023-12-21T14:48:24, isDeleted=0)

实际执行的SQL

SELECT id,username,password,name,email,phone,avatar,sex,description,status,create_time,update_time,is_deleted FROM tb_user
3.2 使用service查询
@Test
public void selectByService(){
    List<User> list = userService.list();
    list.forEach(System.out::println);
}

// User(id=1, username=admin, password=123456, name=超级管理员, email=442331998@qq.com, phone=18811111111, avatar=头像地址url, sex=1, description=管理员, status=1, createTime=2023-12-21T14:41:29, updateTime=2023-12-21T14:41:29, isDeleted=0)
// User(id=2, username=test01, password=123456, name=测试1号, email=123456789@qq.com, phone=18811111111, avatar=头像地址url, sex=1, description=测试账号, status=1, createTime=2023-12-21T14:48:24, updateTime=2023-12-21T14:48:24, isDeleted=0)

总结:servcie接口通过list()方法来查询所有的数据,与mapper接口select()方法有一定的区别,该方法需要传参,参数是查询条件,这里参数为null,表示查询所有,至于条件构造器后续会慢慢介绍

备注:根据前面对添加和查询的演示,service接口不再展示,主要介绍mapper接口的简单使用,后续在详细进行介绍。

4 修改

需求:修改id为1的用户密码和描述信息

@Test
public void update() {
    // 前置条件:当前数据库存在id为1的用户,模拟修改密码为qwe,描述为管理员123
    User user = User.builder()
            .id(1L)
            .password("qwe")
            .description("管理员123")
            .build();
    int i = userMapper.updateById(user);
    System.out.println("更新结果:" + i);
}

// 更新结果:1

实际执行的SQL

UPDATE tb_user SET password='qwe', description='管理员123' WHERE id=1

实际场景中,可以通过更新返回的受影响的行数来判断是否更新成功,如果返回的是0,那么此次更新就是失败的

5 删除

需求:删除id为2的数据

@Test
public void delete(){
    int i = userMapper.deleteById(2L);
    System.out.println("删除结果:" + i);
}

// 删除结果:1

实际执行的SQL

DELETE FROM tb_user WHERE id=2

同添加,更新一样,返回的结果都是受影响的行
此时数据库已经将id为2的数据删除,接下来我们在执行一次删除id为2的数据,返回的结果则为

// 删除结果:0

💖 欢迎关注我的公众号

在这里插入图片描述

  • 33
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值