🍀 前言
博客地址:
👋 简介
上一章已经完成了基础代码生成,本章就来具体使用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