MyBatis-Plus中自动填充功能的用法

news2025/1/12 6:41:01

系列文章目录

Mybatis-Plus+SpringBoot结合运用_心态还需努力呀的博客-CSDN博客
MyBaits-Plus中@TableField和@TableId用法_心态还需努力呀的博客-CSDN博客

MyBatis-Plus之ActiveRecord[基础增删改查操作]_心态还需努力呀的博客-CSDN博客

MyBatis-Plus分页查询(快速上手运用)_心态还需努力呀的博客-CSDN博客_mybatis plus分页查询

注:上述所列只是部分文章,本系列还在更新中~感兴趣可看专栏哦~ 


目录

系列文章目录

前言

一、添加@TableField注解

二、编写MyMetaObjectHandler

三、对自动填充进行测试

四、运行效果图

总结


前言

有些时候我们可能会有这样的需求,插入或者更新数据时,希望有些字段可以自动填充数据,比如密码、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中的自动填充功能在实际中也是经常使用的知识点,大家要多多练习掌握,就像开发中时用户输入的数据肯定不会是对应数据库表的全部字段,有些字段都需要系统自动填充值,这里就需要自动填充功能来完成。步骤也很简单,多多练习两遍就能够掌握并且熟练运用其知识点。

还有就是今天粉丝数量达到一千粉了,在这里也很感谢大家的支持~只要我的文章能够帮助到大家在实际练习中解决问题,哪怕是一个很小的点,我也会觉得很开心~今后我会更加努力,争取早日突破我的万粉梦,哈哈~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/76251.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaWeb开发-Servlet】day06-学生成绩管理系统-实现分页功能

目录 一、前端设计 二、分页功能 ①创建实体层 ②在DAO层新建两个方法 ③编写业务层 ④实现Servlet层 ⑤修改前端页面 ⑥测试 ⑦思路 ⑧扩展 一、前端设计 原来的前端非常简陋,没有明显的突出其功能,下面将对前端页面进行新的完善。 写一个标题…

HPPH-DSPE-PEG/NH2/MAL光克洛-磷脂-聚乙二醇/光克洛-聚乙二醇-氨基/马来酰亚胺

小编今天和大家一起来学习HPPH-DSPE-PEG/NH2/MAL光克洛-磷脂-聚乙二醇/光克洛-聚乙二醇-氨基/马来酰亚胺相关研究内容! 光克洛,第二代的光敏剂,可用于光动力疗法 (PDT),基本结构为二氢卟吩类化合物。美国研究人员从绿色植物中提取、纯化&…

nginx笔记

作者:ThinkStu 文章目录一、简介二、常用配置1、listen2、server_name3、location4、sendfile5、nodelay/push6、add_header7、set 变量8、if9、return10、keepalive三、常用操作1、Gzip压缩2、正则表达式3、rewrite重写4、rewrite范例5、跨域6、防盗链7、适配移动设…

R语言数据可视化分析案例:探索BRFSS数据

最近我们被客户要求撰写关于BRFSS数据的研究报告,包括一些图形和统计输出。 加载包 library(tidyr) library(knitr) opts_chunk$set(echo TRUE, fig.align "center") 载入资料 load("brfss2013.RData")第1部分:数据 描述如何收…

Spring Boot ActuatorAdmin

Spring Boot Actuator&Admin 指标监控简介 干嘛的: 主要运用在微服务架构,所以我建议你先学微服务,否则可能get不到它的用处,只有大型的分布式系统才会用到指标监控… Why:? 对于一个大型的几十个、…

低代码如何自定义主题?一文教会你

SuccAP低代码开发平台,除了提供了多主题供选择外,还支持自定义报表主题,当系统自带的主题无法满足项目需求时,可以根据项目设计并新增主题,本文将介绍如何去新增自定义主题。 新增自定义主题可按如下步骤操作&#xf…

APS高级计划排程在乳制品行业的应用

目前乳制品行业供应链管理中存在的主要问题 生产盲目性,应对市场变化能力不足。现如今牛奶已经成为人们日常饮食需求的必需品,很多生产厂家就开始大量的生产,全然不顾市场的需求度,应对市场变化的能力不足,导致了有一…

计算机毕业设计ssm+vue基本微信小程序的心理服务平台 uniapp 小程序

项目介绍 随着计算机技术的发展,带来社会各行业的进步,信息化逐渐运用到人们的生活中。传统模式的青少年心理健康管理满足不了现代人的生活追求,服务质量、服务速度,之前的很多网站由于功能、或者框架设计等原因,无法完美的展现它的特色,优势,浪费了很多资源。使用管理系统进行…

今天步行数5000多

今天步行数量比较多的,有五千多步吧,希望明天能继续保持下去。

企业知识分享系统的设计与实现

摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&…

两种方案解决vscode浏览器跨域问题

一、 问题 1.1 在接收 json 数据的时候出现了以下错误; 打开测试用的 json 文件发现数据并没有问题,而第一个报错可以看到 Cross origin requests are only supported for protocol schemes:… ,也就是说所使用的数据不在跨域的许…

毕业后5年,我终于变成了月薪13000的软件测试工程师

目录 我为什么选择转行 工作环境 我选择了转行软件测试 写在最后 《软件测试工程师发展规划路线》 一、测试基础 了解测试的基础技能,掌握主流缺陷管理工具的使用,熟练测试环境的操作与运维 二、Linux必备知识 Linux作为现在最流行的软件环境系…

场景案例│数字员工助力医疗行业打通信息系统壁垒,实现高效率运营

据埃森哲研究预测,到2026年人工智能技术每年将为医疗保健行业节省1500亿美元。 随着人们对数字化的需求日益增长,数字技术成为转型升级的新兴力量,许多医疗机构积极采用数字员工推进数字化转型的步伐。 在数字员工的支持下,医疗…

Redis Replication

高可用架构-Redis Replication 今天学习下如何基于Redis 复制功能构建高可用架构-主从复制,Redis Replication 支持数据复制和故障切换。Redis复制是允许Redis实例完全复制主实例的过程。默认情况下,复制是一个异步过程。Redis复制在主机端和副本端都是…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java毕业设计选题档案管理系统bvr3c

毕业设计其实不难,主要毕业的时候任务太紧了,所以大家都非常忙没有时间去做,毕业设计还是早做准备比较好,多花点时间也可以做出来的,建议还是自己动手去做,比如先选一个题,这样就有方向&#xf…

Flutter实现文件上传华为对象存储(OBS)

本文主要讲述在 Flutter 项目中如何实现将文件上传到华为 OBS(对象存储)中,并封装为三方库方便灵活使用。 背景介绍 在大多项目中都会存在文件上传的需求,之前的实现都是调用后台的文件上传接口将文件上传到服务器上,…

从投资人发现“新大陆”,看“产融星城”为何成?

文丨熔财经 作者|陈小江 “我从来不把《我要投资》节目看作是秀(综艺),要知道《我要投资》是在前面的,秀(综艺)只是一种形式而已。本质上,(参加节目)还是为了投资”。 …

「Redis数据结构」跳跃表(SkipList)

「Redis数据结构」跳跃表(SkipList) 文章目录「Redis数据结构」跳跃表(SkipList)一、概述二、结构跳跃表节点跳跃表三、特点一、概述 跳表(SkipList,全称跳跃表)是用于有序元素序列快速搜索查找…

shell编程二

目录语法引号exprtestif...then...fiif...elseif...elseif嵌套case…esacforwhilebreak 和 continue函数语法 引号 " ":如果有字符串,字符串原样输出,如果有$变量则查看变量的值 :所有的字符无论是否有变量都原样输出 ˋˋ:在该引号包含的…

如何批量查询网站的搜狗收录情况?搜狗收录么查询

如何批量查询网站的搜狗收录情况?搜狗收录么查询 查询网站的搜狗收录的具体操作: 第一步、打开网站综合查询工具 第二步、添加需要查询的网站域名 第三步、勾选要查询的功能(勾选搜狗是否收录和搜狗总收录) 第…