# MyBatis-Plus 集成(forge-starter-orm)
MyBatis-Plus 集成模块,提供自动填充、分页、乐观锁等开箱即用功能。
## 快速开始
### 1. 引入依赖
```xml
com.mdframe.forge
forge-starter-orm
```
### 2. 配置 Mapper 扫描包路径
```yaml
mybatis-plus:
mapperPackage: com.mdframe.forge.**.mapper
```
## 核心功能
### 自动填充
`InjectionMetaObjectHandler` 会自动填充以下审计字段:
#### 插入时(`insertFill`)
| 字段 | 值 |
|------|-----|
| `createTime` | `LocalDateTime.now()` |
| `updateTime` | `LocalDateTime.now()` |
| `createBy` | 当前登录用户 ID(`SessionHelper.getLoginUser().getUserId()`) |
| `updateBy` | 当前登录用户 ID |
| `createDept` | 当前登录用户所属部门 ID(`loginUser.getOrgIds().get(0)`) |
#### 更新时(`updateFill`)
| 字段 | 值 |
|------|-----|
| `updateTime` | `LocalDateTime.now()` |
| `updateBy` | 当前登录用户 ID(`SessionHelper.getUserId()`) |
### 实体类使用示例
```java
@Data
@TableName("sys_user")
public class User extends BaseEntity {
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@TableField(fill = FieldFill.INSERT)
private Long createBy;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateBy;
@TableField(fill = FieldFill.INSERT)
private Long createDept;
// 业务字段...
private String username;
private String phone;
}
```
> **提示**:继承 `BaseEntity` 即可享受自动填充功能。
### 分页插件
自动注册 `PaginationInnerInterceptor`,支持 MyBatis-Plus 分页查询:
```java
Page page = new Page<>(1, 10);
userMapper.selectPage(page, Wrappers.lambdaQuery()
.eq(User::getStatus, 1));
```
### 乐观锁
自动注册 `OptimisticLockerInnerInterceptor`,支持乐观锁:
```java
@Version
private Integer version;
```
### 分布式 ID 生成器
自动注册集群安全的 Snowflake ID 生成器:
```java
@Bean
public IdentifierGenerator identifierGenerator() {
return new DefaultIdentifierGenerator(NetUtil.getLocalhost());
}
```
## 配置项
```yaml
mybatis-plus:
mapperPackage: com.mdframe.forge.**.mapper
mapperLocations: classpath*:mapper/**/*.xml
typeAliasesPackage: com.mdframe.forge.**.entity
global-config:
db-config:
id-type: ASSIGN_ID # Snowflake ID
logic-delete-field: deleted
logic-delete-value: 1
logic-not-delete-value: 0
```
## 扩展点
模块支持自动发现其他模块注册的 `InnerInterceptor`,可通过实现 `InnerInterceptor` 接口并注册为 Spring Bean 来扩展拦截器。