dromara/mybatis-plus-ext 实战:从零搭建Demo项目
文章详细介绍了如何从零开始搭建一个基于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 项目的初始化与依赖配置。接下来,可以在此基础上继续开发更复杂的功能模块。以下是一个简单的流程图,展示了项目初始化的流程:
自动填充功能集成
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. 流程图
以下是自动填充的流程示意图:
6. 注意事项
- 注解优先级:
@InsertFillData和@UpdateFillData的优先级高于@FillData。 - 处理器缓存:MPE会缓存填充处理器,避免重复创建。
- 字段类型匹配:填充值的类型需与字段类型匹配,否则会抛出异常。
通过以上步骤,即可轻松集成MPE的自动填充功能,显著提升开发效率!
动态条件查询实现
Mybatis-Plus-Ext(MPE)的动态条件查询功能通过注解和拦截器机制实现,能够灵活地为SQL查询动态添加条件。以下将详细介绍其实现原理和使用方式。
核心组件
动态条件查询功能主要由以下几个核心组件组成:
-
@DynamicCondition注解
用于标记需要动态添加条件的字段,指定对应的条件处理器类。 -
IDynamicConditionHandler接口
定义动态条件处理器的接口,开发者需实现该接口以自定义条件逻辑。 -
DynamicConditionInterceptor拦截器
在SQL执行前拦截查询,解析并动态添加条件。 -
DynamicConditionManager管理器
维护动态条件的缓存和注册逻辑。 -
ConditionInitScanEntityEventListener监听器
在应用启动时扫描实体类,注册动态条件。
实现流程
以下流程图展示了动态条件查询的实现流程:
代码示例
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
}
}
配置与使用
- 启用动态条件功能
在Spring Boot配置类中注册ConditionAutoConfig:
@Configuration
@Import(ConditionAutoConfig.class)
public class MybatisPlusExtConfig {
}
- 自定义条件逻辑
通过实现IDynamicConditionHandler接口,可以灵活定义各种动态条件逻辑。
总结
动态条件查询功能通过注解和拦截器机制,实现了对SQL查询的动态增强。开发者只需简单标记字段并实现条件处理器,即可灵活控制查询逻辑,提升开发效率。
多数据源与自动建表示例
在现代企业级应用中,多数据源管理和自动建表功能是提升开发效率的关键。mybatis-plus-ext通过其强大的扩展能力,为开发者提供了简洁而高效的解决方案。本节将详细介绍如何使用mybatis-plus-ext实现多数据源配置和自动建表功能,并通过代码示例和流程图展示其实现原理。
多数据源配置
mybatis-plus-ext通过@DataSource注解实现多数据源的动态切换。以下是一个典型的多数据源配置示例:
@DataSource("slave")
public interface UserMapper extends BaseMapper<User> {
// 查询方法
}
实现原理
- 注解驱动:
@DataSource注解标记在Mapper接口或方法上,指定数据源名称。 - 动态切换:框架通过AOP拦截器在运行时动态切换数据源。
- 数据源管理:
DataSourceManager类负责数据源的注册和切换。
配置步骤
- 定义数据源:在
application.yml中配置多个数据源。 - 启用注解:在启动类上添加
@EnableDynamicDataSource注解。 - 标记Mapper:在需要切换数据源的Mapper接口或方法上添加
@DataSource注解。
自动建表示例
mybatis-plus-ext的自动建表功能通过@AutoTable注解实现,支持根据实体类自动创建或更新数据库表结构。
@AutoTable
public class User {
@ColumnId
private Long id;
private String name;
private Integer age;
}
实现原理
- 注解解析:框架扫描
@AutoTable标记的实体类。 - 表结构生成:根据实体类字段生成对应的DDL语句。
- 执行建表:在应用启动时自动执行DDL语句。
配置步骤
- 添加依赖:引入
mybatis-plus-ext-autotable模块。 - 标记实体类:在需要自动建表的实体类上添加
@AutoTable注解。 - 启动应用:框架会自动完成建表操作。
多数据源与自动建表的结合
在实际项目中,多数据源和自动建表功能可以结合使用。例如,为不同的数据源配置不同的自动建表策略:
@DataSource("master")
@AutoTable
public class Order {
@ColumnId
private Long id;
private String orderNo;
}
示例场景
| 数据源 | 实体类 | 自动建表策略 |
|---|---|---|
| master | Order | 自动创建 |
| slave | User | 仅查询 |
通过以上配置,Order表会在master数据源中自动创建,而User表则仅用于查询操作。
总结
mybatis-plus-ext的多数据源和自动建表功能极大地简化了开发流程,提升了代码的可维护性。通过注解驱动和动态拦截,开发者可以轻松实现复杂的数据源管理和表结构维护需求。
总结
通过本文的详细步骤和示例代码,读者可以全面了解如何使用dromara/mybatis-plus-ext进行项目开发。从项目初始化到高级功能的集成,如自动填充、动态条件查询和多数据源管理,本文提供了完整的实战指南。这些功能不仅简化了开发流程,还提升了代码的可维护性和灵活性,为开发者提供了强大的工具支持。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



