mybatis-plus自动填充

简介: mybatis-plus自动填充

遵守诺言就象保卫你的荣誉一样。——巴尔扎克

官方文档里说首先需要加@TableField注解并指定fill的值

对应的值在com.baomidou.mybatisplus.annotation.FieldFill这个枚举里

例如我这里gmtCreate字段需要在新增的时候自动填充,就使用FieldFill.INSERT

然而我需要让gmtModified字段在新增和修改的时候都自动填充,就使用FieldFill.INSERT_UPDATE

不过,加了注解后咱们还得去注入一个com.baomidou.mybatisplus.core.handlers.MetaObjectHandler

完整代码如下

package com.ruben.simpleideaboot.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.core.handlers.StrictFill;
import com.baomidou.mybatisplus.core.toolkit.LambdaUtils;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.ruben.simpleideaboot.pojo.User;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.property.PropertyNamer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.LocalDateTime;
import java.util.Arrays;
/**
 * mybatis-plus配置类
 *
 * @author <achao1441470436@gmail.com>
 * @since 2021/5/20 0020 9:29
 */
@Configuration
public class MybatisPlusConfig {
    /**
     * 分页拦截器
     *
     * @author <achao1441470436@gmail.com>
     * @since 2021/5/20 0020 9:29
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        PaginationInnerInterceptor innerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        innerInterceptor.setOverflow(true);
        // 最大分页限制200条
        innerInterceptor.setMaxLimit(200L);
        interceptor.addInnerInterceptor(innerInterceptor);
        return interceptor;
    }
    @Bean
    public MetaObjectHandler metaObjectHandler() {
        return new MetaObjectHandler() {
            /**
             * 插入元对象字段填充(用于插入时对公共字段的填充)
             *
             * @param metaObject 元对象
             */
            @Override
            public void insertFill(MetaObject metaObject) {
                // 不止一种写法
                this.strictInsertFill(findTableInfo(metaObject), metaObject,
                        Arrays.asList(
                                // 从User::getGmtCreate拿到属性gmtCreate,然后调用LocalDateTime.now()填充
                                StrictFill.of(PropertyNamer.methodToProperty(LambdaUtils.resolve(User::getGmtCreate)
                                        .getImplMethodName()), LocalDateTime::now, LocalDateTime.class),
                                // 填充LocalDateTime.now()进gmtModified对应字段
                                StrictFill.of("gmtModified", LocalDateTime.class, LocalDateTime.now())
                        ));
            }
            /**
             * 更新元对象字段填充(用于更新时对公共字段的填充)
             *
             * @param metaObject 元对象
             */
            @Override
            public void updateFill(MetaObject metaObject) {
                // 填充LocalDateTime.now()进gmtModified对应字段,这里是一行写法,中间参数可缩写为LocalDateTime::now
                this.strictUpdateFill(metaObject, "gmtModified", () -> LocalDateTime.now(), LocalDateTime.class);
            }
        };
    }
}

然后调用insert方法或者update方法就会自动更新上去啦

相关文章
|
10月前
|
Java 数据库连接 数据库
探究Java中的MyBatis Plus注解 @TableField:灵活处理字段映射与自动填充
在数据库操作中,字段映射和字段填充是开发者经常需要处理的问题。MyBatis Plus作为一款优秀的ORM框架,提供了注解 `@TableField`,能够帮助开发者更加灵活地处理字段映射,以及在特定场景下实现自动填充功能。本文将深入探讨 `@TableField` 注解的用法及其在持久层开发中的应用。
1132 0
|
19天前
|
Java 数据库连接 开发者
Mybatis Plus公共字段自动填充(MyMetaObjectHandler)
Mybatis Plus公共字段自动填充(MyMetaObjectHandler)
166 0
|
18天前
|
SQL 存储 算法
Mybatis-Plus- CRUD接口-主键策略-自动填充和乐观锁-分页-逻辑删除-条件构造器和常用接口
Mybatis-Plus- CRUD接口-主键策略-自动填充和乐观锁-分页-逻辑删除-条件构造器和常用接口
|
19天前
|
Java
Springboot集成mybatisplus的时间自动填充问题
Springboot集成mybatisplus的时间自动填充问题
|
19天前
|
安全 前端开发 Java
Java反射详解,学以致用,实战案例(AOP修改参数、Mybatis拦截器实现自动填充)3
Java反射详解,学以致用,实战案例(AOP修改参数、Mybatis拦截器实现自动填充)
87 0
|
19天前
|
Java 数据库连接 API
Java反射详解,学以致用,实战案例(AOP修改参数、Mybatis拦截器实现自动填充)2
Java反射详解,学以致用,实战案例(AOP修改参数、Mybatis拦截器实现自动填充)
45 0
|
19天前
|
存储 Java 数据库连接
Java反射详解,学以致用,实战案例(AOP修改参数、Mybatis拦截器实现自动填充)1
Java反射详解,学以致用,实战案例(AOP修改参数、Mybatis拦截器实现自动填充)
54 0
|
7月前
|
数据库
MyBatisPlus中使用@TableField完成字段自动填充
MyBatisPlus中使用@TableField完成字段自动填充
|
9月前
|
SQL Java 数据库连接
Mybatis sql参数自动填充
简述idea插件实现Mybatis sql参数自动填充
|
10月前
|
Java 数据库连接 数据库
解析Java中的MyBatis Plus注解 @FieldFill:优雅处理字段填充
在数据库操作中,有些字段的值在插入或更新时需要自动填充,比如创建时间、更新时间等。MyBatis Plus作为一款强大的ORM框架,提供了注解 `@FieldFill`,使得开发者能够更加灵活地处理字段的自动填充,从而减少了重复的代码编写。本文将详细介绍 `@FieldFill` 注解的用法及其在持久层开发中的应用。
1284 1