尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

SpringBoot3整合MyBatis-Plus实战指南

SpringBoot3整合MyBatis-Plus实战指南 1. 环境准备与工具选型在开始构建SpringBoot3 MyBatis-Plus项目之前我们需要确保开发环境配置正确。我推荐使用以下组合IntelliJ IDEA 2023.3.5目前最稳定的版本对SpringBoot3支持完善JDK 17SpringBoot3的最低要求版本推荐使用Amazon Corretto 17MySQL 8.0.27完全兼容MyBatis-Plus的最新特性注意如果使用其他版本的MySQL连接器需要特别注意与SpringBoot3的兼容性问题。我遇到过MySQL 8.0.23与SpringBoot3.1.0的时区处理异常最终通过升级驱动解决。2. 创建SpringBoot工程的两种方式2.1 使用Spring Initializr自动创建推荐新手在IDEA中通过Spring Initializr创建项目是最快捷的方式选择File → New → Project → Spring Initializr关键配置项Type: Maven ProjectLanguage: JavaPackaging: JarJava Version: 17依赖选择必须勾选Spring Web建议勾选Lombok后续会用到创建完成后pom.xml会自动包含基础依赖。我建议立即执行以下操作mvn clean install这个步骤可以验证项目是否能够正常构建避免后续添加依赖后出现隐藏的构建问题。2.2 手动创建Maven项目适合进阶用户对于需要更精细控制的项目可以手动创建创建标准Maven项目选择maven-archetype-quickstart在pom.xml中添加SpringBoot父依赖parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.4.1/version /parent添加基础依赖dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency /dependencies手动创建时最容易忽略的是资源目录的配置。必须确保src/main/resources目录存在application.properties/yml文件位置正确3. MyBatis-Plus整合详解3.1 依赖配置关键点在pom.xml中添加以下核心依赖!-- MyBatis-Plus SpringBoot3专用starter -- dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-spring-boot3-starter/artifactId version3.5.8/version /dependency !-- MySQL驱动 -- dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.27/version /dependency !-- Lombok -- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/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?useSSLfalseserverTimezoneAsia/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 BaseMapperDept { // 无需任何方法基础CRUD已由MyBatis-Plus提供 }经验即使表字段与实体属性命名规范一致如user_name → userName也建议使用TableField注解显式映射避免后期表结构调整导致问题。4. 服务层与控制器实现4.1 服务层架构采用接口实现类的标准模式public interface DeptService extends IServiceDept { // 可扩展自定义方法 } Service public class DeptServiceImpl extends ServiceImplDeptMapper, Dept implements DeptService { // 实现类只需继承ServiceImpl即可获得完整CRUD能力 }4.2 控制器设计RESTful风格控制器示例RestController RequestMapping(/api/dept) public class DeptController { Autowired private DeptService deptService; GetMapping public ResultListDept listAll() { return Result.success(deptService.list()); } GetMapping(/{id}) public ResultDept getById(PathVariable Integer id) { return Result.success(deptService.getById(id)); } }建议统一返回封装对象如Result 便于前端处理。5. 常见问题排查指南5.1 启动时报错Failed to configure a DataSource可能原因数据库配置错误依赖冲突解决方案检查application.yml缩进YAML对缩进敏感执行mvn dependency:tree检查依赖冲突5.2 MyBatis-Plus方法不生效典型表现调用baseMapper方法无效果SQL日志未打印检查步骤确认Mapper接口有Mapper注解确认启动类有MapperScan(com.xxx.mapper)检查实体类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映射文件可选对于复杂项目建议按业务模块分包分离API和实现使用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. 性能优化建议连接池配置spring: datasource: hikari: maximum-pool-size: 20 connection-timeout: 30000二级缓存Configuration EnableCaching public class CacheConfig { Bean public RedisCacheManager cacheManager(RedisConnectionFactory factory) { // Redis缓存配置 } }批量操作// 使用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 集成测试建议使用Testcontainers进行数据库测试配置独立的测试数据库使用Transactional实现测试回滚10. 部署注意事项打包插件配置build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin /plugins /build生产环境配置禁用开发工具devtools关闭SQL日志使用JVM参数调优健康检查端点management: endpoints: web: exposure: include: health,info经过多个项目的实践验证这套技术栈组合在开发效率和运行性能上取得了很好的平衡。特别是在快速迭代的业务场景中MyBatis-Plus的自动化CRUD能力可以节省大量重复编码时间。对于复杂查询仍然可以通过自定义XML映射文件实现灵活控制。
返回列表