【Java那些事】@TableField对字段的自动填充

ops/2024/9/23 20:20:24/

问题:当你有个对象User时,这个User对象的属性还有类似createTime ,updateTime的属性,每次创建这个对象都要设置createTime ,updateTime,对这个对象User进行操作又要来更新它的updateTime,是不是很麻烦???【O(≧口≦)O每次都要多写几行代码 或者 忘记写了 】 

首先,先创建 “自定义元数据对象处理器”

java">
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {HashMap<String, Object> map = ThreadLocalUtil.get();Long id = (Long) map.get("id");//获得当前用户的idmetaObject.setValue("createTime", LocalDateTime.now());metaObject.setValue("updateTime", LocalDateTime.now());metaObject.setValue("createUser", id);metaObject.setValue("updateUser", id);}@Overridepublic void updateFill(MetaObject metaObject) {HashMap<String, Object> map = ThreadLocalUtil.get();Long id = (Long) map.get("id");metaObject.setValue("updateUser", id);metaObject.setValue("updateTime", LocalDateTime.now());}
}

使用@TableField注解

java">
public class User {private Long id;private String username;private String nickname;@TableField(fill = FieldFill.INSERT)private LocalDateTime createTime;@TableField(fill = FieldFill.INSERT)private LocalDateTime createUser;@TableField(fill = FieldFill.INSERT_UPDATE)private LocalDateTime updateTime;@TableField(fill = FieldFill.INSERT_UPDATE)private LocalDateTime updateUser;
}

 

@TableField 是MyBatis Plus提供的一个注解,用于标识实体类中的字段与数据库表中的字段之间的映射关系

以下是 @TableField 注解的一些常用属性及其说明:

  1. value:指定字段在数据库表中的列名。当实体类中的字段名与数据库表的列名不一致时,可以通过这个属性来映射。
  2. exist:指定字段是否为数据库表中的字段,默认值为 true,表示存在对应的数据库字段。
  3. fill:指定字段为自动填充字段,可选值有 FieldFill.DEFAULTFieldFill.INSERTFieldFill.UPDATE 等,用于控制字段在插入或更新时的自动填充策略。
  4. select:指定字段在查询时是否进行查询,默认为 true,即默认情况下会查询该字段。
  5. condition:指定字段在更新操作时的条件,默认为空字符串,即不指定特定条件。
  6. update:用于预处理 set 字段自定义注入,可以定义更新时字段的计算表达式。例如,如果设置了 update="%s+1",那么在更新时会将字段值加1。

使用 @TableField 注解可以灵活地控制实体类与数据库表之间的映射关系,以及字段的各种操作行为,使得ORM(对象关系映射)更加符合业务需求。


http://www.ppmy.cn/ops/21228.html

相关文章

逆数对(树状数组的方法)

本题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 题目&#xff1a; 样例&#xff1a; 输入 5 4 5 1 3 2 输出 7 思路&#xff1a; 根据题意&#xff0c;求逆序对总数。 逆序对含义&#xff1a;如果数组中的两个不同位置&#xff0c;前面的数字比后面的数字严格大&…

FebHost:顶级域名、通用域名、国别域名注册介绍

在创建网站时&#xff0c;选择适当的顶级域名是至关重要的。顶级域名不仅有助于传播产品信息&#xff0c;还能提高受众的信任度和参与度&#xff0c;进而改善品牌记忆。 顶级域名有各种类型&#xff0c;每种都有其特定用途。最常见的两种顶级域是通用顶级域&#xff08;gTLD&a…

设计模式- 模板方法模式(Template Method Pattern) 结构|原理|优缺点|场景|示例

设计模式&#xff08;分类&#xff09; 设计模式&#xff08;六大原则&#xff09; 创建型&#xff08;5种&#xff09; 工厂方法 抽象工厂模式 单例模式 建造者模式 原型模式 结构型&#xff08;7种&#xff09; 适配器…

微信小程序详解

微信小程序是一种无需下载安装即可使用的应用&#xff0c;它实现了应用“触手可及”的梦想&#xff0c;用户只需扫一扫或搜索一下即可打开应用。微信小程序全面开放申请后&#xff0c;企业、政府、媒体、其他组织或个人开发者均可申请注册。 微信小程序的特点包括&#xff1a;…

Selenium web自动化测试环境搭建

Selenium web自动化环境搭建主要要经历以下几个步骤&#xff1a; 1、安装python 在python官网&#xff1a;Welcome to Python.org&#xff0c;根据各自对应平台如&#xff1a;windows&#xff0c;下载相应的python版本。 ​ 下载成功后&#xff0c;点击安装包&#xff0c;一直…

socket编程-----常用socket编程函数

操作系统&#xff1a;Linux 编程语言&#xff1a;C语言 简述&#xff1a;socket编程函数是socket编程中的基础&#xff0c;通过组合使用它们&#xff0c;可以实现各种网络通信功能。 socket编程函数较多&#xff0c;在这里只是列出较为常用的socket函数 socket()函数 socket()函…

二维码门楼牌管理应用平台建设:档案管理的新篇章

文章目录 前言一、二维码门楼牌管理应用平台的构建背景二、九小场所档案管理的重要性三、二维码门楼牌管理应用平台在九小场所档案管理中的应用四、二维码门楼牌管理应用平台的优势与挑战五、结语 前言 随着信息技术的飞速发展&#xff0c;二维码门楼牌管理应用平台的建设已成…

交通气象站监测站

TH-GQX8交通运输在人们的日常生活中扮演着越来越重要的角色。然而&#xff0c;气候变化、环境污染等因素对交通安全产生了极大的影响。为了应对这些挑战&#xff0c;交通气象站监测站应运而生&#xff0c;成为守护交通安全的重要利器。 一、交通气象站监测站的功能 交通气象站…