悠悠楠杉
SpringBoot整合MyBatisPlus完整配置教程:从入门到实战
Spring Boot整合MyBatis Plus完整配置教程:从入门到实战
关键词:Spring Boot整合MyBatis Plus、MyBatis Plus配置、ORM框架实战、Spring Boot数据持久化
描述:本文详细讲解Spring Boot与MyBatis Plus的整合全流程,包括环境配置、基础CRUD操作、分页插件、代码生成器等核心功能,提供可落地的企业级解决方案。
一、为什么选择MyBatis Plus?
作为MyBatis的增强工具,MyBatis Plus在保留原生特性的基础上,提供了:
- 开箱即用的CRUD操作(减少30%以上重复代码)
- 强大的条件构造器(支持Lambda表达式)
- 内置分页插件(无需手动计算分页参数)
- 代码生成器(一键生成实体类、Mapper、Service)
二、环境准备
1. 创建Spring Boot项目
推荐使用Spring Initializr(https://start.spring.io/)添加:
- Spring Web
- MySQL Driver
- Lombok(简化实体类)
2. 引入依赖
xml
<!-- pom.xml关键依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.16</version>
</dependency>
三、核心配置详解
1. 数据源配置(application.yml)
yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
druid:
initial-size: 5
max-active: 20
2. MyBatis Plus配置类
java
@Configuration
@MapperScan("com.example.mapper")
public class MybatisPlusConfig {
// 分页插件(必需)
@Bean
public MybatisPlusInterceptor paginationInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
// 自动填充功能(如创建时间、更新时间)
@Bean
public MetaObjectHandler metaObjectHandler() {
return new MetaObjectHandler() {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", new Date(), metaObject);
}
};
}
}
四、基础CRUD实战
1. 实体类配置
java
@Data
@TableName("sys_user") // 指定表名
public class User {
@TableId(type = IdType.AUTO) // 主键自增
private Long id;
private String username;
private Integer age;
@TableField(fill = FieldFill.INSERT) // 自动填充
private Date createTime;
}
2. Mapper接口
java
public interface UserMapper extends BaseMapper<User> {
// 继承BaseMapper即获得基础CRUD方法
// 自定义SQL示例:
@Select("SELECT * FROM sys_user WHERE age > #{age}")
List<User> selectByAge(@Param("age") Integer age);
}
3. Service层示例
java
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User>
implements UserService {
// 条件构造器查询
public List<User> queryUsers(String keyword) {
return lambdaQuery()
.like(StringUtils.isNotBlank(keyword), User::getUsername, keyword)
.orderByDesc(User::getCreateTime)
.list();
}
}
五、高级功能扩展
1. 代码生成器(强烈推荐)
java
public class CodeGenerator {
public static void main(String[] args) {
AutoGenerator generator = new AutoGenerator();
generator.setGlobalConfig(buildGlobalConfig());
generator.setDataSource(buildDataSourceConfig());
generator.setPackageInfo(buildPackageConfig());
// 详细配置参考官方文档...
generator.execute();
}
}
2. 多数据源配置
使用@DS
注解轻松切换数据源:java
@Service
@DS("slave") // 默认使用从库
public class UserServiceImpl {
@DS("master") // 写操作切到主库
public void addUser(User user) {
save(user);
}
}
六、常见问题排查
- SQL不生效:检查是否漏加
@MapperScan
注解 - 分页失效:确认已配置分页插件
- 字段值为null:检查
@TableField
的exist
属性 - NPE异常:实体类建议用包装类型(如Integer代替int)
最佳实践建议:
1. 生产环境务必配置Druid监控页面
2. 复杂查询建议使用XML方式维护SQL
3. 定期检查@TableField
注解与数据库字段的映射关系
通过以上配置,您已经掌握了Spring Boot与MyBatis Plus的整合核心要点。实际开发中可根据项目需求灵活组合各项功能,这将显著提升持久层开发效率。完整示例代码可访问GitHub仓库获取(示例链接)。