dromara/mybatis-plus-ext 实战:从零搭建Demo项目

dromara/mybatis-plus-ext 实战:从零搭建Demo项目

【免费下载链接】mybatis-plus-ext mybatis-plus框架的拓展包,在框架原有基础上做了进一步的轻度封装,增强内容:免手写Mapper、多数据源自动建表、数据自动填充、自动关联查询、冗余数据自动更新、动态查询条件等。 【免费下载链接】mybatis-plus-ext 项目地址: https://gitcode.com/dromara/mybatis-plus-ext

文章详细介绍了如何从零开始搭建一个基于dromara/mybatis-plus-ext的Demo项目,包括项目初始化、依赖配置、数据库连接设置、MyBatis Plus Ext的配置初始化、实体类与Mapper的创建以及测试验证。此外,还涵盖了自动填充功能的集成、动态条件查询的实现以及多数据源与自动建表的配置和使用。

项目初始化与依赖配置

在开始使用 dromara/mybatis-plus-ext 进行开发之前,首先需要完成项目的初始化与依赖配置。这一部分将详细介绍如何搭建一个基于 mybatis-plus-ext 的 Demo 项目,包括项目结构的初始化、依赖的引入以及基础配置的说明。

1. 创建项目结构

首先,我们需要创建一个标准的 Maven 项目结构。以下是一个典型的项目目录结构示例:

mybatis-plus-ext-demo/
├── pom.xml
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── org/
│   │   │       └── dromara/
│   │   │           └── demo/
│   │   │               ├── config/
│   │   │               ├── entity/
│   │   │               ├── mapper/
│   │   │               └── service/
│   │   └── resources/
│   │       ├── application.yml
│   │       └── mapper/
│   └── test/
│       └── java/
│           └── org/
│               └── dromara/
│                   └── demo/

2. 引入依赖

pom.xml 中,我们需要引入 mybatis-plus-ext 的核心依赖以及其他必要的依赖。以下是一个典型的依赖配置示例:

<dependencies>
    <!-- MyBatis Plus Ext 核心依赖 -->
    <dependency>
        <groupId>org.dromara</groupId>
        <artifactId>mybatis-plus-ext-core</artifactId>
        <version>最新版本</version>
    </dependency>

    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- 数据库驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

    <!-- Lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

3. 配置数据库连接

application.yml 中配置数据库连接信息:

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

4. 初始化 MyBatis Plus Ext 配置

创建一个配置类 MyBatisPlusExtConfig,用于初始化 mybatis-plus-ext 的相关配置:

package org.dromara.demo.config;

import org.dromara.mpe.core.MpeConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusExtConfig {

    @Bean
    public MpeConfig mpeConfig() {
        MpeConfig config = new MpeConfig();
        // 配置自动填充功能
        config.setAutoFillEnabled(true);
        // 配置自动表功能
        config.setAutoTableEnabled(true);
        return config;
    }
}

5. 创建实体类与 Mapper

定义一个简单的实体类 User 和对应的 Mapper 接口:

package org.dromara.demo.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("user")
public class User {
    private Long id;
    private String name;
    private Integer age;
}
package org.dromara.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.dromara.demo.entity.User;

public interface UserMapper extends BaseMapper<User> {
}

6. 测试配置

最后,可以通过一个简单的测试类验证配置是否正确:

package org.dromara.demo;

import org.dromara.demo.entity.User;
import org.dromara.demo.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    private UserMapper userMapper;

    @Test
    void testInsert() {
        User user = new User();
        user.setName("Test");
        user.setAge(20);
        userMapper.insert(user);
    }
}

7. 总结

通过以上步骤,我们完成了 mybatis-plus-ext 项目的初始化与依赖配置。接下来,可以在此基础上继续开发更复杂的功能模块。以下是一个简单的流程图,展示了项目初始化的流程:

mermaid

自动填充功能集成

Mybatis-Plus-Ext(MPE)的自动填充功能是其核心特性之一,能够显著简化开发中对字段的自动填充需求,例如创建时间、更新时间、操作人信息等。本节将详细介绍如何集成和使用MPE的自动填充功能。

1. 自动填充功能概述

MPE的自动填充功能通过注解和处理器实现,支持以下场景:

  • 时间填充:如创建时间、更新时间。
  • 数据填充:如操作人ID、操作人名称。
  • 自定义填充:通过实现AutoFillHandler接口实现自定义填充逻辑。

2. 核心注解与类

MPE提供了以下注解和类来实现自动填充功能:

注解
  • @FillData:标记字段需要自动填充,需指定填充处理器。
  • @InsertFillData:仅插入时填充。
  • @UpdateFillData:仅更新时填充。
  • @InsertUpdateFillData:插入和更新时均填充。
处理器
  • AutoFillHandler:填充逻辑的接口,需自定义实现。
  • DefaultAuditHandler:默认的填充处理器,用于演示。
核心类
  • AutoFillMetaObjectHandler:MPE的元对象处理器,负责实际填充逻辑。

3. 集成步骤

以下是从零开始集成自动填充功能的步骤:

步骤1:添加依赖

确保项目的pom.xml中已包含MPE的自动填充模块依赖:

<dependency>
    <groupId>org.dromara</groupId>
    <artifactId>mybatis-plus-ext-autofill-core</artifactId>
    <version>最新版本</version>
</dependency>
步骤2:定义填充字段

在实体类中标记需要自动填充的字段:

public class User {
    @InsertFillData(DefaultAuditHandler.class)
    private String createBy;

    @UpdateFillData(DefaultAuditHandler.class)
    private String updateBy;

    @InsertUpdateFillData(DefaultAuditHandler.class)
    private LocalDateTime updateTime;
}
步骤3:实现填充处理器

自定义填充逻辑需实现AutoFillHandler接口:

@Component
public class CustomFillHandler implements AutoFillHandler<String> {
    @Override
    public String getVal(Object object, Class<?> clazz, Field field) {
        return "当前用户ID"; // 返回填充值
    }
}
步骤4:配置自动填充

在Spring Boot的配置类中启用自动填充:

@Configuration
public class MybatisPlusExtConfig {
    @Bean
    public AutoFillMetaObjectHandler autoFillMetaObjectHandler() {
        return new AutoFillMetaObjectHandler();
    }
}

4. 示例代码

以下是一个完整的示例,展示如何自动填充创建时间和更新时间:

public class Order {
    @InsertFillData(CustomFillHandler.class)
    private String createBy;

    @InsertUpdateFillData(CustomFillHandler.class)
    private LocalDateTime updateTime;
}

5. 流程图

以下是自动填充的流程示意图: mermaid

6. 注意事项

  • 注解优先级@InsertFillData@UpdateFillData的优先级高于@FillData
  • 处理器缓存:MPE会缓存填充处理器,避免重复创建。
  • 字段类型匹配:填充值的类型需与字段类型匹配,否则会抛出异常。

通过以上步骤,即可轻松集成MPE的自动填充功能,显著提升开发效率!

动态条件查询实现

Mybatis-Plus-Ext(MPE)的动态条件查询功能通过注解和拦截器机制实现,能够灵活地为SQL查询动态添加条件。以下将详细介绍其实现原理和使用方式。

核心组件

动态条件查询功能主要由以下几个核心组件组成:

  1. @DynamicCondition 注解
    用于标记需要动态添加条件的字段,指定对应的条件处理器类。

  2. IDynamicConditionHandler 接口
    定义动态条件处理器的接口,开发者需实现该接口以自定义条件逻辑。

  3. DynamicConditionInterceptor 拦截器
    在SQL执行前拦截查询,解析并动态添加条件。

  4. DynamicConditionManager 管理器
    维护动态条件的缓存和注册逻辑。

  5. ConditionInitScanEntityEventListener 监听器
    在应用启动时扫描实体类,注册动态条件。

实现流程

以下流程图展示了动态条件查询的实现流程:

mermaid

代码示例

1. 定义动态条件处理器

实现 IDynamicConditionHandler 接口,定义条件逻辑:

public class StatusConditionHandler implements IDynamicConditionHandler {
    @Override
    public String getCondition(String tableName, String fieldName, Object fieldValue) {
        return tableName + "." + fieldName + " = 1"; // 仅查询状态为1的记录
    }
}
2. 标记实体类字段

使用 @DynamicCondition 注解标记需要动态添加条件的字段:

public class User {
    @DynamicCondition(StatusConditionHandler.class)
    private Integer status;
}
3. 拦截器动态添加条件

DynamicConditionInterceptor 拦截器会在查询时动态添加条件:

public class DynamicConditionInterceptor extends JsqlParserSupport implements InnerInterceptor {
    @Override
    public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) {
        // 解析并添加动态条件
        List<DynamicConditionDescription> descriptions = DynamicConditionManager.getDynamicCondition(tableName);
        Expression where = getExpression(descriptions, originalWhere);
        // 合并到SQL
    }
}

配置与使用

  1. 启用动态条件功能
    在Spring Boot配置类中注册 ConditionAutoConfig
@Configuration
@Import(ConditionAutoConfig.class)
public class MybatisPlusExtConfig {
}
  1. 自定义条件逻辑
    通过实现 IDynamicConditionHandler 接口,可以灵活定义各种动态条件逻辑。

总结

动态条件查询功能通过注解和拦截器机制,实现了对SQL查询的动态增强。开发者只需简单标记字段并实现条件处理器,即可灵活控制查询逻辑,提升开发效率。

多数据源与自动建表示例

在现代企业级应用中,多数据源管理和自动建表功能是提升开发效率的关键。mybatis-plus-ext通过其强大的扩展能力,为开发者提供了简洁而高效的解决方案。本节将详细介绍如何使用mybatis-plus-ext实现多数据源配置和自动建表功能,并通过代码示例和流程图展示其实现原理。

多数据源配置

mybatis-plus-ext通过@DataSource注解实现多数据源的动态切换。以下是一个典型的多数据源配置示例:

@DataSource("slave")
public interface UserMapper extends BaseMapper<User> {
    // 查询方法
}
实现原理
  1. 注解驱动@DataSource注解标记在Mapper接口或方法上,指定数据源名称。
  2. 动态切换:框架通过AOP拦截器在运行时动态切换数据源。
  3. 数据源管理DataSourceManager类负责数据源的注册和切换。

mermaid

配置步骤
  1. 定义数据源:在application.yml中配置多个数据源。
  2. 启用注解:在启动类上添加@EnableDynamicDataSource注解。
  3. 标记Mapper:在需要切换数据源的Mapper接口或方法上添加@DataSource注解。

自动建表示例

mybatis-plus-ext的自动建表功能通过@AutoTable注解实现,支持根据实体类自动创建或更新数据库表结构。

@AutoTable
public class User {
    @ColumnId
    private Long id;
    private String name;
    private Integer age;
}
实现原理
  1. 注解解析:框架扫描@AutoTable标记的实体类。
  2. 表结构生成:根据实体类字段生成对应的DDL语句。
  3. 执行建表:在应用启动时自动执行DDL语句。

mermaid

配置步骤
  1. 添加依赖:引入mybatis-plus-ext-autotable模块。
  2. 标记实体类:在需要自动建表的实体类上添加@AutoTable注解。
  3. 启动应用:框架会自动完成建表操作。

多数据源与自动建表的结合

在实际项目中,多数据源和自动建表功能可以结合使用。例如,为不同的数据源配置不同的自动建表策略:

@DataSource("master")
@AutoTable
public class Order {
    @ColumnId
    private Long id;
    private String orderNo;
}
示例场景
数据源实体类自动建表策略
masterOrder自动创建
slaveUser仅查询

通过以上配置,Order表会在master数据源中自动创建,而User表则仅用于查询操作。

总结

mybatis-plus-ext的多数据源和自动建表功能极大地简化了开发流程,提升了代码的可维护性。通过注解驱动和动态拦截,开发者可以轻松实现复杂的数据源管理和表结构维护需求。

总结

通过本文的详细步骤和示例代码,读者可以全面了解如何使用dromara/mybatis-plus-ext进行项目开发。从项目初始化到高级功能的集成,如自动填充、动态条件查询和多数据源管理,本文提供了完整的实战指南。这些功能不仅简化了开发流程,还提升了代码的可维护性和灵活性,为开发者提供了强大的工具支持。

【免费下载链接】mybatis-plus-ext mybatis-plus框架的拓展包,在框架原有基础上做了进一步的轻度封装,增强内容:免手写Mapper、多数据源自动建表、数据自动填充、自动关联查询、冗余数据自动更新、动态查询条件等。 【免费下载链接】mybatis-plus-ext 项目地址: https://gitcode.com/dromara/mybatis-plus-ext

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值