您好,登录后才能下订单哦!
密码登录
            
            
            
            
        登录注册
            
            
            
        点击 登录注册 即表示同意《亿速云用户服务条款》
        # 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
在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'
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 # 主键策略
@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;
}
public interface UserMapper extends BaseMapper<User> {
    // 可自定义扩展方法
    @Select("SELECT * FROM user WHERE age > #{age}")
    List<User> selectUsersOlderThan(Integer age);
}
主类添加注解:
@SpringBootApplication
@MapperScan("com.example.mapper") // 指定Mapper接口所在包
public class MybatisPlusDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(MybatisPlusDemoApplication.class, args);
    }
}
@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);
    }
}
// 查询构造
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();
@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}
public Page<User> getUserPage(Integer pageNum, Integer pageSize) {
    Page<User> page = new Page<>(pageNum, pageSize);
    return lambdaQuery()
            .orderByDesc(User::getCreateTime)
            .page(page);
}
实现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());
    }
}
@Bean
public MybatisPlusInterceptor optimisticLockerInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
    return interceptor;
}
@Version
private Integer version;
mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted  # 全局逻辑删除字段
      logic-delete-value: 1       # 删除值
      logic-not-delete-value: 0   # 未删除值
@TableLogic
private Integer deleted;
@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;
}
<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>
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();
    }
}
字段映射问题:
事务管理:
类型处理器:
防止SQL注入:
数据权限控制:
Spring Boot与MyBatis-Plus的组合为Java后端开发提供了高效、便捷的解决方案。通过本文的介绍,我们了解到:
在实际项目中,建议: - 根据业务复杂度合理选择MP提供的高级功能 - 保持对MyBatis底层原理的理解 - 遵循领域驱动设计原则,不要过度依赖自动生成代码
随着MyBatis-Plus的持续更新,未来还将提供更多便捷功能,值得开发者持续关注和学习。 “`
注:本文实际约4500字,完整5000字版本可扩展以下内容: 1. 更详细的性能优化案例分析 2. 与Spring Security的整合示例 3. 复杂查询的SQL优化方案 4. 分布式环境下的特殊处理 5. 更多实际项目中的经验总结
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。