2、快速入门:Spring Boot整合MyBatis Plus、基础CRUD操作、日志配置
好,咱们直接进入正题。这一章我带你从零开始,把 MyBatis Plus 跑起来。你想想看,一个框架好不好用,最快的方式就是看它能不能让你少写代码。MP 在这方面,确实做得不错。
2.1 环境准备与依赖引入
我个人习惯用 Spring Boot 2.7.x 系列,配合 MP 3.5.x。版本搭配上,我建议你尽量用最新的稳定版,别用太老的,否则有些新特性用不了。
先创建一个 Spring Boot 项目,然后在 pom.xml 里加依赖:
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis Plus Starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</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>
小提示: 如果你用的是 Spring Boot 3.x,记得把 MP 版本升级到 3.5.5 以上,否则会有兼容问题。我在项目中踩过这个坑,升级后一切正常。
2.2 配置文件与数据源
接下来配置 application.yml。这里我直接给出一份我常用的配置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mp_demo?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
global-config:
db-config:
id-type: auto # 主键策略:自增
table-prefix: t_ # 表前缀,比如 User 对应 t_user
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 控制台输出 SQL
嗯,这里要注意 table-prefix。我建议你养成加表前缀的习惯,比如 t_user、t_order。为什么?因为生产环境里,表多了容易重名,加个前缀能避免很多麻烦。
2.3 实体类与 Mapper 接口
先建一张简单的用户表:
CREATE TABLE t_user (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
age INT DEFAULT 0,
email VARCHAR(50),
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
然后写实体类。我用 Lombok 简化代码:
@Data
@TableName("t_user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
private LocalDateTime createTime;
}
Mapper 接口就更简单了:
@Mapper
public interface UserMapper extends BaseMapper<User> {
// 啥都不用写,CRUD 方法已经继承了
}
核心要点: 继承
BaseMapper<T> 后,你就拥有了 insert、deleteById、updateById、selectById、selectList 等 20+ 个方法。这就是 MP 的魔力——零 SQL 实现基础 CRUD。
2.4 基础 CRUD 操作实战
写个测试类,咱们跑一遍:
@SpringBootTest
class MpDemoApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void testInsert() {
User user = new User();
user.setName("张三");
user.setAge(25);
user.setEmail("zhangsan@example.com");
int rows = userMapper.insert(user);
System.out.println("影响行数:" + rows);
System.out.println("自增ID:" + user.getId());
}
@Test
void testSelect() {
// 查询所有
List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);
// 按ID查询
User user = userMapper.selectById(1L);
System.out.println(user);
}
@Test
void testUpdate() {
User user = new User();
user.setId(1L);
user.setAge(30);
int rows = userMapper.updateById(user);
System.out.println("更新行数:" + rows);
}
@Test
void testDelete() {
int rows = userMapper.deleteById(1L);
System.out.println("删除行数:" + rows);
}
}
跑一下看看。你会发现控制台输出了完整的 SQL 语句。这就是日志配置的作用。
2.5 日志配置详解
刚才配置里我用了 StdOutImpl,它会直接把 SQL 打印到控制台。但说实话,生产环境我不建议这么干。为什么?因为日志量太大,会影响性能。
我一般这样区分环境:
| 环境 | 日志实现 | 说明 |
|---|---|---|
| 开发/测试 | StdOutImpl |
直接控制台输出,方便调试 |
| 生产 | Slf4jImpl 或关闭 |
配合 Logback/Log4j2,控制日志级别 |
配置方式也很灵活:
# 方式一:全局配置(上面已经演示过)
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# 方式二:按包配置日志级别(推荐生产用)
logging.level.com.example.mapper=DEBUG
我曾经踩过的坑: 有一次生产环境忘了改配置,结果
StdOutImpl 疯狂打印 SQL,把磁盘打满了。从那以后,我每次上线前都会检查日志配置。你也要记住:生产环境别用 StdOutImpl。
2.6 常见问题与避坑指南
- 表名映射失败: 如果实体类名和表名对不上,记得加
@TableName注解。我习惯统一加,避免后期改表名出问题。 - 主键策略选择: 我建议用
IdType.AUTO(数据库自增)或IdType.ASSIGN_ID(雪花算法)。别用IdType.NONE,否则你会收到一个空 ID。 - 字段自动填充: 像
create_time、update_time这类字段,可以用 MP 的自动填充功能。后面章节我会详细讲。
好了,这一章的内容就到这里。你跟着敲一遍代码,应该就能跑起来了。下一章咱们聊聊条件构造器——那是 MP 真正好用的地方。