一文搞懂 Mybatis Plus
本文参考:https://mp.baomidou.com/,列出了主要需要学习的对象。
快速开始
数据表构造
DROP TABLE IF EXISTS user;
CREATE TABLE user
(
id BIGINT(20) NOT NULL COMMENT '主键ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT(11) NULL DEFAULT NULL COMMENT '年龄',
email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (id)
);
插入数据:
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
初始化SpringBoot项目
导入依赖
pom.xml 文件如下,官方文档使用了微型数据库h2,但我们使用 mysql,这里导入依赖。
注意:引入 MyBatis-Plus
之后请不要再次引入 MyBatis
以及 MyBatis-Spring
,以避免因版本差异导致的问题。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>top.ddbb</groupId>
<artifactId>mybatis_plus</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.6</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
</project>
配置文件
在 application.yml 中配置数据源,配置 mybatis-plus 的日志,方便学习使用。
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/holdonbei?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
username: root
password: 123456
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
编写代码
程序入口
package top.ddbb;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DBApplication {
public static void main(String[] args) {
SpringApplication.run(DBApplication.class, args);
}
}
User 实体类
package top.ddbb.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
// TableId 配置 IdType.AUTO 可以实现代码在添加时进行自增,但需要在数据库中该字段保持自增
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
}
UserMapper
这个 UserMapper 需要继承 BaseMapper,通过继承 BaseMapper,可以获取基础的 CRUD能力,这里的实现,MyBatisPlus 都帮我们做好了。
package top.ddbb.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import top.ddbb.entity.User;
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
测试
这个快速入门,我们简单测试一下查询。
package top.ddbb;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import top.ddbb.entity.User;
import top.ddbb.mapper.UserMapper;
import java.util.List;
@SpringBootTest
public class CRUDTest {
@Autowired
private UserMapper userMapper;
@Test
public void testSelect() {
/**
UserMapper 中的 selectList() 方法的参数为 MP 内置的条件封装器 Wrapper,所以不填写就是无任何条件
**/
List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);
}
}
CRUD 接口
说明:
- 通用CRUD封装BaseMapper接口,为
Mybatis-Plus
启动时自动解析实体表关系映射转换为Mybatis
内部对象注入容器。- 对象
Wrapper
为条件构造器。
Insert
@Test void testInsert() {
User user = User
.builder()
.age(16)
.name("donghuang")
.email("donghuang@88.com")
.build();
userMapper.insert(user);
}
Delete
@Test
public void testDelete() {
User user = User
.builder()
.id(6L)
.age(16)
.name("donghuang")
.email("donghuang@88.com")
.build();
Wrapper userWrapper = new QueryWrapper<User>(user);
userMapper.delete(userWrapper);
}
Update
@Test
public void testUpdate() {
Wrapper userWrapper = new QueryWrapper(
User
.builder()
.id(1L)
.build());
User user = User
.builder()
.id(1L)
.age(16)
.name("donghuang")
.email("donghuang@88.com")
.build();
userMapper.update(user, userWrapper);
}
Select
@Test
public void testSelect2() {
System.out.println(userMapper.selectById(1L));
}