mybatis拦截器实现填充
时间: 2023-11-27 12:44:07 浏览: 37
Mybatis拦截器可以通过实现Interceptor接口来实现对SQL语句的拦截和修改。在实现Interceptor接口时,需要重写intercept方法,该方法会在执行SQL语句前后被调用。在该方法中,可以通过Invocation对象获取到当前执行的SQL语句和参数,并对其进行修改或者添加新的参数。
具体实现填充功能时,可以在intercept方法中判断当前执行的SQL语句是否为需要填充的语句,如果是,则可以通过反射获取到需要填充的字段,并将其值设置到参数中。最后再调用invocation.proceed()方法执行原始的SQL语句。
相关问题
mybatis plus 取消指定实体 createBy 自动填充
在 MyBatis Plus 中,可以为不同实体类设置不同的自动填充规则。取消指定实体类的createBy自动填充需要在实体类中使用注解 `@TableField(fill = FieldFill.DEFAULT)` 来标识该字段不进行自动填充。具体来说,可以按照以下步骤进行操作:
1. 在实体类中取消createBy的自动填充:
```java
@TableField(fill = FieldFill.DEFAULT)
private String createBy;
```
2. 在MyBatis Plus配置中为该实体类设置自动填充策略:
```java
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//创建拦截器链
List<Interceptor> interceptorList = new ArrayList<>();
//自动填充拦截器
Interceptor fillInterceptor = new MybatisPlusAutoFillInterceptor();
//为指定实体类设置自动填充策略
List<MetaObjectHandler> metaObjectHandlers = new ArrayList<>();
//指定实体类的自动填充策略
metaObjectHandlers.add(new MybatisPlusMetaObjectHandler());
fillInterceptor.setProperties(Collections.singletonMap("metaObjectHandlers", metaObjectHandlers));
interceptorList.add(fillInterceptor);
interceptor.setInterceptors(interceptorList);
return interceptor;
}
}
```
其中,`MybatisPlusMetaObjectHandler`是自定义的MetaObjectHandler类,用于设置该实体类的自动填充规则。在该类中,使用注解 `@Override` 标识重写的方法,然后在方法中设置不需要自动填充的字段。例如:
```java
public class MybatisPlusMetaObjectHandler extends BaseMetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
//设置createBy不进行自动填充
this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class);
}
@Override
public void updateFill(MetaObject metaObject) {
//设置updateBy不进行自动填充
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);
}
}
```
这样,就可以为指定实体类设置自动填充规则,并取消createBy的自动填充。
mybatis 审计
MyBatis Plus提供了一种审计功能,可以自动记录实体的创建时间、修改时间和操作人。要启用审计功能,你需要进行以下步骤:
1. 添加相关依赖:在项目的pom.xml文件中添加MyBatis Plus的依赖。
```xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus-version}</version>
</dependency>
```
2. 创建一个审计拦截器:新建一个类,实现`MetaObjectHandler`接口,并重写其中的方法。这些方法包括`insertFill()`、`updateFill()`等,用于填充实体的审计字段。
```java
@Component
public class AuditInterceptor implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
LocalDateTime now = LocalDateTime.now();
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, now);
this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, now);
this.strictInsertFill(metaObject, "operator", String.class, "admin");
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
this.strictUpdateFill(metaObject, "operator", String.class, "admin");
}
}
```
3. 配置审计拦截器:在`application.yml`(或`application.properties`)中配置