1. 项目概述SpringBoot3和MyBatis-Plus的组合是目前Java后端开发中最流行的技术栈之一。这个组合能帮助开发者快速构建企业级应用同时保持代码的简洁和高效。今天我要分享的是一个能在5分钟内完成的快速搭建方法特别适合需要快速启动新项目的开发者。这个方案的核心优势在于极简配置SpringBoot3的自动配置特性大幅减少了XML配置高效开发MyBatis-Plus提供了强大的CRUD操作封装现代特性支持Java17的新特性开箱即用内置连接池、事务管理等企业级功能2. 环境准备2.1 基础环境要求在开始之前请确保你的开发环境满足以下要求JDK17或更高版本推荐使用Amazon Corretto或OpenJDKMaven 3.6或Gradle 7.xIDEIntelliJ IDEA或Eclipse最新版MySQL 8.0或其他兼容数据库提示虽然SpringBoot3支持Java17但如果你必须使用Java8可以考虑使用SpringBoot2.7.x版本2.2 开发工具配置对于IntelliJ IDEA用户建议安装以下插件Lombok插件必须MyBatisX可选但推荐Spring Assistant可选这些插件能显著提升开发效率特别是Lombok可以减少大量样板代码。3. 项目创建与初始化3.1 使用Spring Initializr创建项目最快的方式是通过Spring Initializr创建项目基础结构访问start.spring.io选择Project: Maven ProjectLanguage: JavaSpring Boot: 3.0.x添加依赖Spring WebMyBatis FrameworkMySQL DriverLombok3.2 添加MyBatis-Plus依赖在pom.xml中添加MyBatis-Plus的starter依赖dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.3.1/version /dependency同时建议添加分页插件依赖dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-extension/artifactId version3.5.3.1/version /dependency4. 核心配置4.1 数据库配置在application.properties或application.yml中配置数据库连接spring.datasource.urljdbc:mysql://localhost:3306/your_db?useSSLfalseserverTimezoneUTC spring.datasource.usernameroot spring.datasource.passwordyour_password spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver # MyBatis-Plus配置 mybatis-plus.mapper-locationsclasspath*:/mapper/**/*.xml mybatis-plus.configuration.map-underscore-to-camel-casetrue4.2 MyBatis-Plus配置类创建一个配置类来启用MyBatis-Plus的特性Configuration MapperScan(com.yourpackage.mapper) public class MybatisPlusConfig { Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor new MybatisPlusInterceptor(); // 分页插件 interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }5. 快速开发实践5.1 实体类创建使用Lombok简化实体类Data TableName(user) // 对应数据库表名 public class User { TableId(type IdType.AUTO) // 主键自增 private Long id; private String username; private String email; private LocalDateTime createTime; }5.2 Mapper接口创建基础的Mapper接口public interface UserMapper extends BaseMapperUser { // 这里可以添加自定义SQL方法 }MyBatis-Plus已经为我们提供了基础的CRUD方法无需编写XML文件。5.3 Service层实现创建Service接口和实现public interface UserService extends IServiceUser { // 自定义业务方法 } Service public class UserServiceImpl extends ServiceImplUserMapper, User implements UserService { // 实现自定义业务方法 }5.4 Controller示例创建一个简单的REST控制器RestController RequestMapping(/users) RequiredArgsConstructor public class UserController { private final UserService userService; GetMapping public ListUser list() { return userService.list(); } PostMapping public boolean save(RequestBody User user) { return userService.save(user); } }6. 高级功能配置6.1 自动填充功能MyBatis-Plus提供了自动填充功能非常适合处理创建时间、更新时间等字段在实体类中添加注解Data TableName(user) public class User { // ...其他字段 TableField(fill FieldFill.INSERT) private LocalDateTime createTime; TableField(fill FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; }实现MetaObjectHandlerComponent public class MyMetaObjectHandler implements MetaObjectHandler { Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, createTime, LocalDateTime.class, LocalDateTime.now()); this.strictUpdateFill(metaObject, updateTime, LocalDateTime.class, LocalDateTime.now()); } Override public void updateFill(MetaObject metaObject) { this.strictUpdateFill(metaObject, updateTime, LocalDateTime.class, LocalDateTime.now()); } }6.2 逻辑删除配置在application.properties中添加mybatis-plus.global-config.db-config.logic-delete-fielddeleted mybatis-plus.global-config.db-config.logic-not-delete-value0 mybatis-plus.global-config.db-config.logic-delete-value1在实体类中添加字段TableLogic private Integer deleted;7. 常见问题与解决方案7.1 启动时报错Failed to configure a DataSource这个问题通常是因为没有正确配置数据库连接或者配置了但数据库服务没启动。解决方案检查数据库服务是否运行确认连接字符串、用户名和密码正确如果确实不需要数据库可以排除数据源自动配置SpringBootApplication(exclude {DataSourceAutoConfiguration.class})7.2 MyBatis-Plus的BaseMapper方法不生效可能的原因和解决方案问题现象可能原因解决方案方法调用无效Mapper接口没有正确扫描确保主类或配置类上有MapperScan返回结果异常实体类与表结构不匹配检查TableName和字段映射SQL执行错误主键策略配置错误检查TableId的type属性7.3 分页功能不生效确保已经正确配置了分页插件并且Controller方法接收了分页参数GetMapping(/page) public PageUser page(PageUser page) { return userService.page(page); }调用时需要使用page和size参数GET /users/page?page1size108. 性能优化建议8.1 SQL日志输出开发阶段可以开启SQL日志方便调试# 显示SQL语句 mybatis-plus.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl # 显示执行结果 logging.level.com.yourpackage.mapperdebug8.2 批量操作优化MyBatis-Plus提供了批量操作方法// 批量插入 boolean success userService.saveBatch(userList); // 批量更新 boolean success userService.updateBatchById(userList);对于大数据量操作建议分批处理每批1000条左右。8.3 缓存配置可以考虑添加二级缓存提升性能在application.properties中启用缓存mybatis-plus.configuration.cache-enabledtrue在Mapper接口上添加注解CacheNamespace public interface UserMapper extends BaseMapperUser { // ... }9. 项目结构建议一个良好的项目结构能提高可维护性推荐如下结构src/main/java ├── com.yourpackage │ ├── config # 配置类 │ ├── controller # 控制器 │ ├── entity # 实体类 │ ├── mapper # Mapper接口 │ ├── service # 服务层 │ │ ├── impl # 服务实现 │ ├── util # 工具类 │ └── YourApplication.java # 启动类 src/main/resources ├── application.properties └── mapper # XML映射文件(可选)10. 扩展功能10.1 多数据源配置如果需要连接多个数据库可以配置多数据源添加依赖dependency groupIdcom.baomidou/groupId artifactIddynamic-datasource-spring-boot-starter/artifactId version3.5.2/version /dependency配置数据源# 主库 spring.datasource.dynamic.primarymaster spring.datasource.dynamic.datasource.master.urljdbc:mysql://localhost:3306/master_db spring.datasource.dynamic.datasource.master.usernameroot spring.datasource.dynamic.datasource.master.password123456 spring.datasource.dynamic.datasource.master.driver-class-namecom.mysql.cj.jdbc.Driver # 从库 spring.datasource.dynamic.datasource.slave.urljdbc:mysql://localhost:3306/slave_db spring.datasource.dynamic.datasource.slave.usernameroot spring.datasource.dynamic.datasource.slave.password123456 spring.datasource.dynamic.datasource.slave.driver-class-namecom.mysql.cj.jdbc.Driver使用注解切换数据源Service DS(slave) // 指定使用从库 public class UserServiceImpl extends ServiceImplUserMapper, User implements UserService { // ... }10.2 代码生成器MyBatis-Plus提供了强大的代码生成器可以快速生成实体类、Mapper、Service等代码public class CodeGenerator { public static void main(String[] args) { AutoGenerator generator new AutoGenerator(); // 全局配置 GlobalConfig globalConfig new GlobalConfig(); globalConfig.setOutputDir(System.getProperty(user.dir) /src/main/java); globalConfig.setAuthor(YourName); globalConfig.setOpen(false); generator.setGlobalConfig(globalConfig); // 数据源配置 DataSourceConfig dataSourceConfig new DataSourceConfig(); dataSourceConfig.setUrl(jdbc:mysql://localhost:3306/your_db); dataSourceConfig.setDriverName(com.mysql.cj.jdbc.Driver); dataSourceConfig.setUsername(root); dataSourceConfig.setPassword(your_password); generator.setDataSource(dataSourceConfig); // 包配置 PackageConfig packageConfig new PackageConfig(); packageConfig.setParent(com.yourpackage); generator.setPackageInfo(packageConfig); // 策略配置 StrategyConfig strategy new StrategyConfig(); strategy.setNaming(NamingStrategy.underline_to_camel); strategy.setColumnNaming(NamingStrategy.underline_to_camel); strategy.setEntityLombokModel(true); strategy.setRestControllerStyle(true); strategy.setInclude(user, product); // 要生成的表名 generator.setStrategy(strategy); generator.execute(); } }11. 测试与验证11.1 单元测试示例为Service层编写单元测试SpringBootTest class UserServiceTest { Autowired private UserService userService; Test void testSave() { User user new User(); user.setUsername(test); user.setEmail(testexample.com); boolean result userService.save(user); assertTrue(result); assertNotNull(user.getId()); } Test void testPage() { PageUser page new Page(1, 10); PageUser result userService.page(page); assertNotNull(result.getRecords()); } }11.2 API测试可以使用Postman或curl测试API# 创建用户 curl -X POST http://localhost:8080/users \ -H Content-Type: application/json \ -d {username:test,email:testexample.com} # 获取用户列表 curl http://localhost:8080/users12. 部署与运维12.1 打包应用使用Maven打包mvn clean package生成的jar文件位于target目录下。12.2 运行应用java -jar your-application.jar可以添加生产环境配置# 生产环境配置示例 spring.profiles.activeprod server.port808012.3 健康检查SpringBoot Actuator提供了健康检查端点添加依赖dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-actuator/artifactId /dependency配置开放的端点management.endpoints.web.exposure.includehealth,info访问健康检查GET http://localhost:8080/actuator/health13. 实际开发中的经验分享在实际项目开发中我发现以下几点特别值得注意字段命名一致性保持数据库字段名下划线风格与Java属性名驼峰风格的一致性可以避免很多映射问题。MyBatis-Plus默认开启了下划线转驼峰的映射所以只要保持这种对应关系即可。复杂查询处理对于复杂的多表查询建议使用Select注解直接在Mapper接口上编写SQL或者使用XML映射文件对于特别复杂的查询可以考虑使用QueryWrapper的lambda表达式事务管理默认情况下Spring会对RuntimeException进行回滚。如果需要更精细的控制Transactional(rollbackFor Exception.class) public void businessMethod() { // ... }性能监控开发阶段可以集成p6spy来监控SQL性能dependency groupIdp6spy/groupId artifactIdp6spy/artifactId version3.9.1/version /dependency配置数据源驱动为com.p6spy.engine.spy.P6SpyDriverAPI文档集成Swagger或Knife4j自动生成API文档dependency groupIdcom.github.xiaoymin/groupId artifactIdknife4j-spring-boot-starter/artifactId version3.0.3/version /dependency14. 项目优化方向当项目发展到一定规模后可以考虑以下优化方向分布式ID生成使用MyBatis-Plus的IdWorker或集成雪花算法多租户支持通过MyBatis-Plus的多租户插件实现SQL性能分析集成Druid的数据源监控缓存集成整合Redis作为二级缓存安全加固集成Spring Security或Shiro微服务改造逐步迁移到Spring Cloud架构15. 学习资源推荐如果想深入掌握SpringBoot和MyBatis-Plus推荐以下资源官方文档Spring Boot: https://spring.io/projects/spring-bootMyBatis-Plus: https://baomidou.com/书籍《Spring Boot实战》《MyBatis技术内幕》视频教程B站上的官方教程和实战项目社区GitHub上的开源项目Stack Overflow上的问题解答这个快速搭建方案已经在我们团队的多个项目中得到验证确实能够大幅提升开发效率。特别是在需要快速验证想法或启动新项目时5分钟就能搭建好基础框架让开发者可以立即开始业务逻辑的实现。