SpringBoot3整合MyBatis-Plus实战指南
2026/9/19 0:58:30 网站建设 项目流程

1. 环境准备与工具选型

在开始构建SpringBoot3 + MyBatis-Plus项目之前,我们需要确保开发环境配置正确。我推荐使用以下组合:

  • IntelliJ IDEA 2023.3.5:目前最稳定的版本,对SpringBoot3支持完善
  • JDK 17:SpringBoot3的最低要求版本,推荐使用Amazon Corretto 17
  • MySQL 8.0.27+:完全兼容MyBatis-Plus的最新特性

注意:如果使用其他版本的MySQL连接器,需要特别注意与SpringBoot3的兼容性问题。我遇到过MySQL 8.0.23与SpringBoot3.1.0的时区处理异常,最终通过升级驱动解决。

2. 创建SpringBoot工程的两种方式

2.1 使用Spring Initializr自动创建(推荐新手)

在IDEA中通过Spring Initializr创建项目是最快捷的方式:

  1. 选择File → New → Project → Spring Initializr
  2. 关键配置项:
    • Type: Maven Project
    • Language: Java
    • Packaging: Jar
    • Java Version: 17
  3. 依赖选择:
    • 必须勾选Spring Web
    • 建议勾选Lombok(后续会用到)

创建完成后,pom.xml会自动包含基础依赖。我建议立即执行以下操作:

mvn clean install

这个步骤可以验证项目是否能够正常构建,避免后续添加依赖后出现隐藏的构建问题。

2.2 手动创建Maven项目(适合进阶用户)

对于需要更精细控制的项目,可以手动创建:

  1. 创建标准Maven项目(选择maven-archetype-quickstart)
  2. 在pom.xml中添加SpringBoot父依赖:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.4.1</version> </parent>
  1. 添加基础依赖:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>

手动创建时最容易忽略的是资源目录的配置。必须确保:

  • src/main/resources目录存在
  • application.properties/yml文件位置正确

3. MyBatis-Plus整合详解

3.1 依赖配置关键点

在pom.xml中添加以下核心依赖:

<!-- MyBatis-Plus SpringBoot3专用starter --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> <version>3.5.8</version> </dependency> <!-- MySQL驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.27</version> </dependency> <!-- Lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>

特别注意:SpringBoot3必须使用mybatis-plus-spring-boot3-starter,常规的mybatis-plus-boot-starter不兼容。

3.2 数据库配置最佳实践

推荐使用YAML格式配置,更清晰易读:

spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/mybatis?useSSL=false&serverTimezone=Asia/Shanghai username: root password: 123456 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启SQL日志

关键配置说明:

  • 必须指定serverTimezone,否则可能遇到时区异常
  • 建议开启SQL日志,方便调试

3.3 实体类与Mapper设计

使用Lombok简化实体类:

@Data @TableName("dept") // 显式指定表名 public class Dept { @TableId(type = IdType.AUTO) // 主键自增 private Integer id; private String name; private Integer age; private String sex; private String address; }

Mapper接口只需简单继承:

@Mapper public interface DeptMapper extends BaseMapper<Dept> { // 无需任何方法,基础CRUD已由MyBatis-Plus提供 }

经验:即使表字段与实体属性命名规范一致(如user_name → userName),也建议使用@TableField注解显式映射,避免后期表结构调整导致问题。

4. 服务层与控制器实现

4.1 服务层架构

采用接口+实现类的标准模式:

public interface DeptService extends IService<Dept> { // 可扩展自定义方法 } @Service public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements DeptService { // 实现类只需继承ServiceImpl即可获得完整CRUD能力 }

4.2 控制器设计

RESTful风格控制器示例:

@RestController @RequestMapping("/api/dept") public class DeptController { @Autowired private DeptService deptService; @GetMapping public Result<List<Dept>> listAll() { return Result.success(deptService.list()); } @GetMapping("/{id}") public Result<Dept> getById(@PathVariable Integer id) { return Result.success(deptService.getById(id)); } }

建议统一返回封装对象(如Result ),便于前端处理。

5. 常见问题排查指南

5.1 启动时报错"Failed to configure a DataSource"

可能原因:

  1. 数据库配置错误
  2. 依赖冲突

解决方案:

  1. 检查application.yml缩进(YAML对缩进敏感)
  2. 执行mvn dependency:tree检查依赖冲突

5.2 MyBatis-Plus方法不生效

典型表现:

  • 调用baseMapper方法无效果
  • SQL日志未打印

检查步骤:

  1. 确认Mapper接口有@Mapper注解
  2. 确认启动类有@MapperScan("com.xxx.mapper")
  3. 检查实体类@TableName配置

5.3 分页查询失效

必须添加分页插件:

@Configuration public class MyBatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return interceptor; } }

6. 项目结构优化建议

标准项目结构示例:

src/main/java ├── com.example.demo │ ├── config # 配置类 │ ├── controller # 控制器 │ ├── entity # 实体类 │ ├── mapper # Mapper接口 │ ├── service # 服务接口 │ │ └── impl # 服务实现 │ └── DemoApplication.java src/main/resources ├── application.yml └── mapper # XML映射文件(可选)

对于复杂项目,建议:

  1. 按业务模块分包
  2. 分离API和实现
  3. 使用DTO隔离实体与视图

7. 高级特性探索

7.1 自动填充功能

实现元数据自动填充:

@TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime;

需要配置填充处理器:

@Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); } @Override public void updateFill(MetaObject metaObject) { this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); } }

7.2 逻辑删除配置

application.yml配置:

mybatis-plus: global-config: db-config: logic-delete-field: deleted # 逻辑删除字段名 logic-not-delete-value: 0 # 未删除值 logic-delete-value: 1 # 删除值

实体类添加字段:

@TableLogic private Integer deleted;

8. 性能优化建议

  1. 连接池配置
spring: datasource: hikari: maximum-pool-size: 20 connection-timeout: 30000
  1. 二级缓存
@Configuration @EnableCaching public class CacheConfig { @Bean public RedisCacheManager cacheManager(RedisConnectionFactory factory) { // Redis缓存配置 } }
  1. 批量操作
// 使用Service的saveBatch方法 deptService.saveBatch(deptList, 1000); // 每批1000条

9. 测试策略

9.1 单元测试示例

@SpringBootTest class DeptMapperTest { @Autowired private DeptMapper deptMapper; @Test void testSelect() { Dept dept = deptMapper.selectById(1); Assertions.assertNotNull(dept); } }

9.2 集成测试建议

  1. 使用@Testcontainers进行数据库测试
  2. 配置独立的测试数据库
  3. 使用@Transactional实现测试回滚

10. 部署注意事项

  1. 打包插件配置
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
  1. 生产环境配置
  • 禁用开发工具(devtools)
  • 关闭SQL日志
  • 使用JVM参数调优
  1. 健康检查端点
management: endpoints: web: exposure: include: health,info

经过多个项目的实践验证,这套技术栈组合在开发效率和运行性能上取得了很好的平衡。特别是在快速迭代的业务场景中,MyBatis-Plus的自动化CRUD能力可以节省大量重复编码时间。对于复杂查询,仍然可以通过自定义XML映射文件实现灵活控制。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询