MyBatis-Plus中自动填充功能的用法示例详解

 更新时间:2022年12月10日 09:32:47   作者:心态还需努力呀  
有些时候我们可能会有这样的需求,插入或者更新数据时,希望有些字段可以自动填充数据,比如密码、version、注册时默认的用户角色等,在MP中提供了这样的功能,可以实现自动填充功能,需要的朋友可以参考下

前言

有些时候我们可能会有这样的需求,插入或者更新数据时,希望有些字段可以自动填充数据,比如密码、version、注册时默认的用户角色等。在MP中提供了这样的功能,可以实现自动填充功能。

下面例子的场景假设:如果用户在注册时,只会输入基本的用户信息,这是后台有个字段为user_role用户角色,普通用户注册的话都会自动以USER值设置,但这个值不是用户输入的,需要自动填充。

下面我们就根据这个假设来看看该如何实现这一功能。

一、添加@TableField注解

在持久化User类中,将角色对应的属性上添加注解@TableField(fill= FieldFill.INSERT),INSERT用来插入数据时进行填充。如下代码所示:

//角色
    @TableField(fill= FieldFill.INSERT)//插入数据时进行填充
    private String userRole;

当然,不只是在插入时可自动填充。还可设置在修改时,或者插入修改时都自动填充的操作。如下图所示:

二、编写MyMetaObjectHandler

我们需要编写MyMetaObjectHandler类,在类下需要继承MetaObjectHandler接口实现其方法,在方法内编写要自动填充的字段。

因为我们是以添加为例,所以这里就直接在insertFill下编写自动填充的内容,如果增加操作传下来的属性值为null的话,就要自动让该属性值设置为USER角色。如果有值的话我们不做操作。所以接下来只需要判断字段是否为空就可以。

代码如下所示:

package cn.imust.mp.handler;
 
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
 
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        Object userRole=getFieldValByName("userRole",metaObject);
        if(null == userRole){
            //字段为空,可以进行填充
            setFieldValByName("userRole","USER",metaObject);
        }
    }
 
    @Override
    public void updateFill(MetaObject metaObject) {
 
    }
}

三、对自动填充进行测试

在测试类下编写testInsert()方法,传值时就不需要设置userRole的值,添加完成后查看是否会自动填充(即查看userRole是否为USER值)

//测试添加方法
    @Test
    public void testInsert(){
        User user=new User();
        user.setUserName("哈哈111");
        user.setUserEmail("12433");
//        user.setUserRole("ADMIN");
        user.setUserStatus("0");
        user.setUserPassword("12344");
 
//        表中没有字段
        user.setHobby("足球");
        //受影响的行数  count
        int count = userMapper.insert(user);
        if(count>0){//添加成功
            //输出所有数据
            testSelectList();
        }else {//添加失败
            System.out.println("添加失败~");
        }
    }

四、运行效果图

执行上述的测试代码,得到如下图所示的效果图,添加成功在查询会发现userRole的值会被自动填充成上面设置的USER即普通用户的值。 说明测试成功~

总结

MP中的自动填充功能在实际中也是经常使用的知识点,大家要多多练习掌握,就像开发中时用户输入的数据肯定不会是对应数据库表的全部字段,有些字段都需要系统自动填充值,这里就需要自动填充功能来完成。步骤也很简单,多多练习两遍就能够掌握并且熟练运用其知识点。

到此这篇关于MyBatis-Plus中自动填充功能的用法的文章就介绍到这了,更多相关MyBatis-Plus自动填充内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java正则多字符串匹配替换

    Java正则多字符串匹配替换

    正则表达式异常强大,一直理解不深,用的也不深,这次项目中尝试,体会到了它的强大之处。字符串查找,匹配,替换,正则无不能做,特别是灵活的运用子串匹配得到的变量值$1,$2,再进行二次处理能够达到很巧妙的效果。
    2013-02-02
  • ConditionalOnProperty配置swagger不生效问题及解决

    ConditionalOnProperty配置swagger不生效问题及解决

    这篇文章主要介绍了ConditionalOnProperty配置swagger不生效问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • springboot接口参数为List的问题

    springboot接口参数为List的问题

    这篇文章主要介绍了springboot接口参数为List的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Mybatis中设置全局变量的方法示例

    Mybatis中设置全局变量的方法示例

    我们在平时的工作中有时候是需要在配置文件中配置全局变量的,我最近工作中就遇到了,所以索性记录下来,下面这篇文章主要跟大家介绍了关于Mybatis中设置全局变量的方法示例,需要的朋友可以参考下。
    2017-07-07
  • Java基于Netty实现Http server的实战

    Java基于Netty实现Http server的实战

    本文主要介绍了Java基于Netty实现Http server的实战,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 一起来了解Java的File类和IO流

    一起来了解Java的File类和IO流

    这篇文章主要为大家详细介绍了Java File类和IO流,在Java学习中,file类与io流是非常重要的部分,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Skywalking改成适配阿里云等带Http Basic的Elasticsearch服务

    Skywalking改成适配阿里云等带Http Basic的Elasticsearch服务

    这篇文章主要介绍了改造Skywalking支持阿里云等带Http Basic的Elasticsearch服务
    2022-02-02
  • Java基础之练习打印三角形

    Java基础之练习打印三角形

    这篇文章主要介绍了Java基础之练习打印三角形,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • java Servlet 实现动态验证码图片示例

    java Servlet 实现动态验证码图片示例

    这篇文章主要介绍了java Servlet 实现动态验证码图片示例的资料,这里整理了详细的代码,有需要的小伙伴可以参考下。
    2017-02-02
  • Java中JMM与volatile关键字的学习

    Java中JMM与volatile关键字的学习

    这篇文章主要介绍了通过实例解析JMM和Volatile关键字的学习,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-09-09

最新评论