如何进行Spring Boot + Mybatis-Plus的集成与使用

发布时间:2021-11-09 17:55:48 作者:柒染
来源:亿速云 阅读:264
# 如何进行Spring Boot + Mybatis-Plus的集成与使用

## 一、前言

在现代Java企业级开发中,Spring Boot以其"约定优于配置"的理念极大简化了项目搭建流程,而Mybatis-Plus作为MyBatis的增强工具,在保留原生功能的基础上提供了更多开箱即用的高效功能。本文将详细介绍如何将两者集成并应用于实际开发。

## 二、环境准备

### 1. 基础环境要求
- JDK 1.8+
- Maven 3.3+ 或 Gradle 6.x
- Spring Boot 2.5.x+
- Mybatis-Plus 3.4.x+

### 2. 创建Spring Boot项目
推荐使用官方初始化工具:
```bash
curl https://start.spring.io/starter.zip -d dependencies=web,mybatis -o demo.zip

或通过IDE(如IntelliJ IDEA)的Spring Initializr创建。

三、Mybatis-Plus集成步骤

1. 添加依赖

pom.xml中添加核心依赖:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.1</version>
    <scope>compile</scope>
</dependency>

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 # 主键策略
      logic-delete-field: deleted # 逻辑删除字段
      logic-delete-value: 1 # 删除值
      logic-not-delete-value: 0 # 未删除值

3. 主启动类配置

添加@MapperScan注解扫描Mapper接口:

@SpringBootApplication
@MapperScan("com.example.mapper")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

四、核心功能使用详解

1. 实体类映射

@Data
@TableName("sys_user") // 指定表名
public class User {
    @TableId(type = IdType.AUTO) // 主键策略
    private Long id;
    
    @TableField("username") // 字段映射
    private String name;
    
    private Integer age;
    private String email;
    
    @TableLogic // 逻辑删除标记
    private Integer deleted;
}

2. Mapper接口开发

继承BaseMapper获得CRUD方法:

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

3. Service层开发

public interface IUserService extends IService<User> {
    List<User> getActiveUsers();
}

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> 
    implements IUserService {
    
    @Override
    public List<User> getActiveUsers() {
        return lambdaQuery()
            .eq(User::getDeleted, 0)
            .list();
    }
}

五、高级特性应用

1. 条件构造器

// 查询构造
List<User> users = userMapper.selectList(
    new QueryWrapper<User>()
        .select("id", "username")
        .like("username", "张")
        .between("age", 20, 30)
        .orderByDesc("create_time")
);

// Lambda表达式写法
List<User> userList = userMapper.selectList(
    Wrappers.<User>lambdaQuery()
        .select(User::getId, User::getName)
        .like(User::getName, "张")
        .ge(User::getAge, 18)
);

2. 分页查询

  1. 添加分页插件配置:
@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}
  1. 实际使用:
Page<User> page = new Page<>(1, 10); // 当前页,每页数量
Page<User> result = userMapper.selectPage(page, 
    Wrappers.<User>query().eq("dept_id", 2));

3. 代码生成器

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("Developer");
        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);
        
        generator.execute();
    }
}

六、最佳实践

1. 事务管理

@Service
@Transactional(rollbackFor = Exception.class)
public class UserService {
    
    @Autowired
    private UserMapper userMapper;
    
    public void updateUser(User user) {
        if(user.getId() == null) {
            userMapper.insert(user);
        } else {
            userMapper.updateById(user);
        }
    }
}

2. 多数据源配置

  1. 添加依赖:
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.5.0</version>
</dependency>
  1. 配置多个数据源:
spring:
  datasource:
    dynamic:
      primary: master
      datasource:
        master:
          url: jdbc:mysql://localhost:3306/master
          username: root
          password: 123456
        slave:
          url: jdbc:mysql://localhost:3306/slave
          username: root
          password: 123456
  1. 使用注解切换:
@DS("slave") // 指定数据源
public List<User> getAllFromSlave() {
    return userMapper.selectList(null);
}

七、常见问题解决方案

1. 字段映射问题

// 解决字段名与数据库列名不一致
@TableField(value = "db_column_name")
private String entityFieldName;

// 排除非表字段
@TableField(exist = false)
private String tempField;

2. 批量操作优化

// 批量插入(需配置rewriteBatchedStatements=true)
List<User> userList = new ArrayList<>();
userMapper.insertBatchSomeColumn(userList); // 3.5.1+版本支持

// 批量更新
userMapper.updateBatchById(userList);

3. 性能监控

mybatis-plus:
  configuration:
    cache-enabled: false # 二级缓存
    default-executor-type: reuse # 执行器类型
    map-underscore-to-camel-case: true # 驼峰转换

八、总结

通过本文的实践,我们完成了: 1. Spring Boot与Mybatis-Plus的完整集成 2. 基础CRUD操作与高级查询功能实现 3. 分页、代码生成等效率工具的应用 4. 企业级开发中的最佳实践方案

Mybatis-Plus的强大功能可以显著提升开发效率,建议结合官方文档深入探索更多特性。完整的示例代码可访问:GitHub示例仓库 “`

注:本文实际约3500字,可根据需要增减具体章节内容。建议开发时参考: 1. Mybatis-Plus官方文档 2. Spring Boot官方指南 3. 实际项目需求调整配置参数

推荐阅读:
  1. 如何在Spring Boot中使用Webflux
  2. Spring Boot Jpa分页查询配置方式是什么

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

spring boot mybatis

上一篇:ArchiSteamFarmV3.0如何使用服务器steam云挂卡

下一篇:Django中的unittest应用是什么

相关阅读

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

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