Appearance
MyBatis-Plus 快速入门
5 分钟搭建一个 MyBatis-Plus 项目,体验零 SQL 完成 CRUD 的快感。
一、环境准备
技术栈:
JDK 8+
Maven 3.6+
Spring Boot 2.7+ / 3.x
MySQL 5.7+
MyBatis-Plus 3.5+1.1 数据库建表
sql
CREATE DATABASE mp_demo DEFAULT CHARACTER SET utf8mb4;
USE mp_demo;
CREATE TABLE `user` (
`id` BIGINT NOT NULL COMMENT '主键',
`name` VARCHAR(50) NOT NULL COMMENT '用户名',
`age` INT COMMENT '年龄',
`email` VARCHAR(100) COMMENT '邮箱',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` TINYINT DEFAULT 0 COMMENT '逻辑删除(0=未删除,1=已删除)',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';二、Maven 依赖
xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
</parent>
<dependencies>
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis-Plus(已包含 MyBatis + JDBC) -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.5</version>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>三、配置文件
yaml
# application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/mp_demo?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
# MyBatis-Plus 配置
mybatis-plus:
# 全局配置
global-config:
db-config:
# 主键策略:雪花算法
id-type: assign_id
# 逻辑删除字段
logic-delete-field: deleted
logic-delete-value: 1
logic-not-delete-value: 0
# 打印 SQL 日志
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true四、实体类
java
@Data
@TableName("user") // 表名映射(类名和表名一致时可不加)
public class User {
@TableId(type = IdType.ASSIGN_ID) // 雪花算法生成 ID
private Long id;
private String name;
private Integer age;
private String email;
@TableField(fill = FieldFill.INSERT) // 插入时自动填充
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE) // 插入和更新时自动填充
private Date updateTime;
@TableLogic // 逻辑删除
private Integer deleted;
}五、Mapper 接口
java
@Mapper
public interface UserMapper extends BaseMapper<User> {
// 继承 BaseMapper 后,自动拥有 17 种通用方法
// 不需要写任何代码!
}六、Service 层
java
// 接口
public interface UserService extends IService<User> {
// 继承 IService 后,自动拥有通用 Service 方法
}
// 实现
@Service
public class UserServiceImpl
extends ServiceImpl<UserMapper, User>
implements UserService {
// 继承 ServiceImpl 后,不需要写任何代码
}七、Controller 层
java
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
// 查询全部
@GetMapping
public List<User> list() {
return userService.list();
}
// 根据 ID 查询
@GetMapping("/{id}")
public User getById(@PathVariable Long id) {
return userService.getById(id);
}
// 新增
@PostMapping
public boolean save(@RequestBody User user) {
return userService.save(user);
}
// 修改
@PutMapping
public boolean update(@RequestBody User user) {
return userService.updateById(user);
}
// 删除(逻辑删除)
@DeleteMapping("/{id}")
public boolean delete(@PathVariable Long id) {
return userService.removeById(id);
}
}八、测试
java
@SpringBootTest
class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
void testInsert() {
User user = new User();
user.setName("张三");
user.setAge(25);
user.setEmail("zhangsan@test.com");
int rows = userMapper.insert(user);
System.out.println("插入成功,ID:" + user.getId()); // 雪花 ID
}
@Test
void testSelectById() {
User user = userMapper.selectById(1L);
System.out.println(user);
}
@Test
void testSelectList() {
// 查询所有年龄 > 20 的用户
List<User> users = userMapper.selectList(
new LambdaQueryWrapper<User>()
.gt(User::getAge, 20)
);
users.forEach(System.out::println);
}
@Test
void testUpdate() {
User user = new User();
user.setId(1L);
user.setAge(30);
userMapper.updateById(user); // 只更新非 null 字段
}
@Test
void testDelete() {
userMapper.deleteById(1L); // 逻辑删除:deleted = 1
}
}九、开发流程总结
MyBatis-Plus 开发步骤(五步走):
① 加依赖 → mybatis-plus-spring-boot3-starter
② 配文件 → 数据源 + MP 全局配置
③ 写实体 → @TableName + @TableId + @TableLogic
④ 写 Mapper → extends BaseMapper<Entity>
⑤ 写 Service → extends ServiceImpl<M, T> + implements IService<T>
速记:引→配→实体→Mapper→Service,零 SQL 完成 CRUD十、面试要点
| 问题 | 答案要点 |
|---|---|
| 快速入门步骤? | 引依赖→配数据源→写实体→Mapper 继承 BaseMapper→Service 继承 ServiceImpl |
| BaseMapper 提供什么? | 17 种通用 CRUD 方法,单表操作零 SQL |
| 实体类常用注解? | @TableName、@TableId、@TableField、@TableLogic、@Version |
