在 Spring Boot 项目中使用 MyBatis-Plus 实现查询时给公共字段create_by赋值
时间: 2024-09-12 18:14:27 浏览: 60
在Spring Boot项目中使用MyBatis-Plus实现查询时给公共字段`create_by`赋值,通常需要使用MyBatis-Plus提供的钩子函数(Hook Methods)或者注解来实现。`create_by`字段通常用于记录数据创建者的标识,比如用户的ID。以下是几种实现方式:
1. 使用`@TableField`注解:
在你的实体类中,可以为`create_by`字段使用`@TableField`注解,并设置`fill`属性为`FieldFill.INSERT`或`FieldFill.INSERT_UPDATE`。这样在执行插入或更新操作时,MyBatis-Plus会自动填充这个字段。
```java
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.activerecord.Model;
public class YourEntity extends Model<YourEntity> {
// 其他字段...
@TableField(fill = FieldFill.INSERT)
private Long createBy;
// 省略getter和setter方法...
}
```
然后,你需要自定义一个`MetaObjectHandler`的实现类,并在Spring Boot的配置中注册它,以便在插入或更新时自动填充`create_by`字段。
```java
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.LocalDateTime;
@Configuration
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
}
@Bean
public MyMetaObjectHandler myMetaObjectHandler() {
return new MyMetaObjectHandler();
}
}
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createBy", Long.class, 1L); // 假设1L是当前用户ID
}
@Override
public void updateFill(MetaObject metaObject) {
// 更新时不需要填充create_by字段
}
}
```
2. 在Mapper接口中重写方法:
如果需要在查询时也填充`create_by`字段,可以在自定义的Mapper接口中重写查询方法,并在方法中手动设置该字段的值。
```java
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface YourEntityMapper extends BaseMapper<YourEntity> {
default YourEntity selectWithCreateBy(Long id, Long userId) {
YourEntity entity = selectById(id);
if (entity != null) {
entity.setCreateBy(userId);
}
return entity;
}
}
```
使用这种方式需要注意的是,每次进行查询操作时,都必须调用带有`create_by`字段填充的方法,否则`create_by`字段将不会被设置。
阅读全文