Spring Boot + Mybatis-Plus的集成与使用方法

发布时间:2021-10-20 17:32:38 作者:柒染
来源:亿速云 阅读:318
# Spring Boot + MyBatis-Plus的集成与使用方法

## 一、技术概述

### 1.1 Spring Boot简介
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是简化Spring应用的初始搭建和开发过程。它通过以下特性显著提升开发效率:
- 自动配置:基于类路径和已定义的bean自动配置Spring应用
- 起步依赖:提供功能化的依赖描述符,简化构建配置
- 内嵌服务器:默认集成Tomcat、Jetty等服务器
- 生产就绪:提供健康检查、指标监控等运维特性

### 1.2 MyBatis-Plus简介
MyBatis-Plus(简称MP)是MyBatis的增强工具,在MyBatis基础上只做增强不做改变:
- 内置通用Mapper:通过继承BaseMapper可获得单表CRUD操作
- 内置通用Service:通过继承IService可获得更丰富的业务层方法
- 条件构造器:支持Lambda形式的条件构造
- 代码生成器:可快速生成Entity、Mapper等代码
- 分页插件:支持多种数据库的分页查询

## 二、环境准备

### 2.1 开发环境要求
- JDK 1.8+
- Maven 3.3+ 或 Gradle 6.x
- IDE(推荐IntelliJ IDEA)
- MySQL 5.7+ 或其他关系型数据库

### 2.2 创建Spring Boot项目
通过Spring Initializr创建项目(https://start.spring.io/):
- 选择Maven/Gradle
- 添加依赖:Spring Web、Lombok、MySQL Driver

或使用命令行:
```bash
spring init -dweb,lombok,mysql mybatis-plus-demo

三、集成MyBatis-Plus

3.1 添加依赖

在pom.xml中添加:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>

Gradle项目:

implementation 'com.baomidou:mybatis-plus-boot-starter:3.5.3.1'

3.2 配置数据源

application.yml配置示例:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mp_demo?useSSL=false&serverTimezone=UTC
    username: root
    password: 123456

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启SQL日志
  global-config:
    db-config:
      id-type: auto # 主键策略

3.3 创建实体类

@Data
@TableName("user") // 指定表名
public class User {
    @TableId(type = IdType.AUTO) // 主键自增
    private Long id;
    private String name;
    private Integer age;
    private String email;
    
    @TableField(fill = FieldFill.INSERT) // 自动填充
    private LocalDateTime createTime;
    
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}

3.4 创建Mapper接口

public interface UserMapper extends BaseMapper<User> {
    // 可自定义扩展方法
    @Select("SELECT * FROM user WHERE age > #{age}")
    List<User> selectUsersOlderThan(Integer age);
}

3.5 添加Mapper扫描

主类添加注解:

@SpringBootApplication
@MapperScan("com.example.mapper") // 指定Mapper接口所在包
public class MybatisPlusDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(MybatisPlusDemoApplication.class, args);
    }
}

四、核心功能使用

4.1 基本CRUD操作

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    
    // 插入
    public boolean addUser(User user) {
        return save(user);
    }
    
    // 批量插入
    public boolean batchAdd(List<User> users) {
        return saveBatch(users);
    }
    
    // 更新
    public boolean updateUser(User user) {
        return updateById(user);
    }
    
    // 查询
    public User getById(Long id) {
        return getById(id);
    }
    
    // 删除
    public boolean deleteUser(Long id) {
        return removeById(id);
    }
}

4.2 条件构造器

// 查询构造
List<User> users = lambdaQuery()
        .eq(User::getName, "张三")
        .gt(User::getAge, 18)
        .list();

// 更新构造
boolean updated = lambdaUpdate()
        .eq(User::getName, "李四")
        .set(User::getAge, 25)
        .update();

// 删除构造
boolean removed = lambdaUpdate()
        .lt(User::getAge, 10)
        .remove();

4.3 分页查询

  1. 添加分页插件配置:
@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}
  1. 使用分页:
public Page<User> getUserPage(Integer pageNum, Integer pageSize) {
    Page<User> page = new Page<>(pageNum, pageSize);
    return lambdaQuery()
            .orderByDesc(User::getCreateTime)
            .page(page);
}

4.4 自动填充功能

实现MetaObjectHandler接口:

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

    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }
}

五、高级特性

5.1 乐观锁实现

  1. 添加乐观锁插件:
@Bean
public MybatisPlusInterceptor optimisticLockerInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
    return interceptor;
}
  1. 实体类添加版本字段:
@Version
private Integer version;

5.2 逻辑删除

  1. 全局配置:
mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted  # 全局逻辑删除字段
      logic-delete-value: 1       # 删除值
      logic-not-delete-value: 0   # 未删除值
  1. 实体类添加字段:
@TableLogic
private Integer deleted;

5.3 多租户支持

@Bean
public MybatisPlusInterceptor multiTenantInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() {
        @Override
        public Expression getTenantId() {
            return new LongValue(1L); // 实际应从上下文中获取
        }
        
        @Override
        public String getTenantIdColumn() {
            return "tenant_id";
        }
        
        @Override
        public boolean ignoreTable(String tableName) {
            return !Arrays.asList("user", "order").contains(tableName);
        }
    }));
    return interceptor;
}

六、代码生成器

6.1 添加生成器依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.3.1</version>
</dependency>
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.31</version>
</dependency>

6.2 生成器配置示例

public class CodeGenerator {
    public static void main(String[] args) {
        AutoGenerator generator = new AutoGenerator();
        
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
        gc.setAuthor("YourName");
        gc.setOpen(false);
        generator.setGlobalConfig(gc);
        
        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/mp_demo");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("123456");
        generator.setDataSource(dsc);
        
        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.example");
        pc.setModuleName("system");
        generator.setPackageInfo(pc);
        
        // 策略配置
        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", "role"); // 要生成的表
        generator.setStrategy(strategy);
        
        generator.execute();
    }
}

七、最佳实践

7.1 性能优化建议

  1. 合理使用二级缓存
  2. 避免N+1查询问题
  3. 大数据量查询使用流式处理
  4. 批量操作使用executeBatch

7.2 常见问题解决

  1. 字段映射问题:

    • 使用@TableField解决字段名不一致
    • 使用resultMap处理复杂映射
  2. 事务管理:

    • 添加@Transactional注解
    • 配置事务管理器
  3. 类型处理器:

    • 自定义类型处理器处理特殊类型

7.3 安全建议

  1. 防止SQL注入:

    • 始终使用参数化查询
    • 避免拼接SQL语句
  2. 数据权限控制:

    • 实现数据过滤拦截器
    • 结合Spring Security使用

八、总结

Spring Boot与MyBatis-Plus的组合为Java后端开发提供了高效、便捷的解决方案。通过本文的介绍,我们了解到:

  1. 集成步骤简单,只需少量配置即可快速搭建项目
  2. MyBatis-Plus提供了丰富的功能,显著减少样板代码
  3. 条件构造器、分页插件等工具极大提升开发效率
  4. 代码生成器可以快速生成基础代码

在实际项目中,建议: - 根据业务复杂度合理选择MP提供的高级功能 - 保持对MyBatis底层原理的理解 - 遵循领域驱动设计原则,不要过度依赖自动生成代码

随着MyBatis-Plus的持续更新,未来还将提供更多便捷功能,值得开发者持续关注和学习。 “`

注:本文实际约4500字,完整5000字版本可扩展以下内容: 1. 更详细的性能优化案例分析 2. 与Spring Security的整合示例 3. 复杂查询的SQL优化方案 4. 分布式环境下的特殊处理 5. 更多实际项目中的经验总结

推荐阅读:
  1. Spring Boot 2.X怎么解决跨域问题
  2. 如何使用Loki监控SpringBoot应用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

springboot mybatis-plus

上一篇:Nginx安装及配置是什么

下一篇:如何理解dubbo的ExtensionLoader.getActivateExtension

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》