MybatisPlus中@TableField注解的使用详解

MybatisPlus中@TableField注解的使用详解

实现

官方文档说明:

com.baomidou.mybatisplus.annotations.TableField

img

TableField注解新增属性 update 预处理 set 字段自定义注入

(讲解:比如我们使用mybatisplus自带的insert()方法向数据库插入数据时,假设我们给age字段赋值为1,但是我们在age字段上的@TableField注解里面加了update=“%s+1”,那么真真插入到数据库的值就是age=2,而不是age+1了)

例如: @TableField(.. , update="%s+1") 其中 %s 会填充为字段
输出 SQL 为:update 表 set 字段=字段+1 where …

如果给某个字段上@TableField注解里面写update=“now()”,那么最后我们使用mybatisplus自带的insert()方法向数据库插入数据时,这个字段插入到数据库中的值就为当前时间,看下面代码的sql语句即可明白

例如: @TableField(.. , update="now()") 使用数据库时间输出 SQL 为:update 表 set 字段=now() where …

TableField 注解新增属性 condition 预处理 WHERE 实体条件自定义运算规则,下面会有代码讲解

@TableField(condition = SqlCondition.LIKE)
private String name;
输出 SQL 为:select 表 where name LIKE CONCAT('%',,'%')

讲解:举个例子来说明@TableField(condition = SqlCondition.LIKE)的作用

@Data
@TableName("admin_role")
public class RoleDO extends Model<RoleDO> {/*** 角色ID*/@TableId(type = IdType.AUTO)private Long id;/*** 角色名称*/@TableField(condition = SqlCondition.LIKE)private String name;/*** 角色描述*/private String description;/*** 是否启用:0-不可用,1-可用*/private Boolean enabled;/*** 删除标示:0-未删除,1-已删除*/@TableLogicprivate Boolean deleted;/*** 创建人ID*/protected Long creatorId;/*** 创建人*/protected String creator;/*** 创建时间*/@SuppressFBWarnings("EI_EXPOSE_REP")protected Date dateCreated;/*** 修改人ID*/protected Long modifierId;/*** 修改人*/protected String modifier;/*** 更新时间*/@SuppressFBWarnings("EI_EXPOSE_REP")protected Date lastModified;/** 指定主键 */@Overrideprotected Serializable pkVal() {return this.id;}
}

我们通过直接给EntityWrapper对象传入RoleDO实体类来构造EntityWrapper,, EntityWrapper eWrapper = new EntityWrapper(roleDO); (代码如下)

/*** 查询角色列表(分页)** @param roleParam 角色参数* @return 查询角色分页列表*/public Page<RoleDO> selectListPage(ListRoleParam roleParam) {RoleDO roleDO = new RoleDO();BeanUtils.copyProperties(roleParam, roleDO);Page<RoleDO> page = new Page<RoleDO>((int)roleParam.getPi(), (int)roleParam.getPs()); //得到分页的信息EntityWrapper<RoleDO> eWrapper = new EntityWrapper<RoleDO>(roleDO);//构建条件查询对象Page<RoleDO> roleDOList = roleDO.selectPage(page, eWrapper);//这里使用的就是Model提供的ARreturn roleDOList;}

而对于name这样的字段在日常查询中往往是通过like方式来进行匹配的而非精确匹配,所以此处通过@TableField(condition = SqlCondition.LIKE)来实现动态组合查询条件,会根据前台传入的参数自动组合查询语句并进行分页。

字段填充策略 FieldFill

img

讲解如下:

实体类中有如下属性,通过上面的自动填充属性,我们可以实现在进行插入(insert)操作时对添加了注解@TableField(fill = FieldFill.INSERT)的字段进行自动填充(解释:后面会写配置自动填充的配置类,该配置类的作用用于配置自动填充的值)。

对添加了注解@TableField(fill = FieldFill.INSERT_UPDATE)的字段在进行插入(insert)和更新(update)时进行自动填充。(解释:后面会写配置自动填充的配置类,该配置类的作用用于配置自动填充的值)。

/*** 创建人*/@TableField(fill = FieldFill.INSERT)private Long creatorId;/*** 创建时间*/@TableField(fill = FieldFill.INSERT)private Date gmtCreat;/*** 修改人*/@TableField(fill = FieldFill.INSERT_UPDATE)private Long modifierId;/*** 修改时间*/@TableField(fill = FieldFill.INSERT_UPDATE)private Date gmtModified;/*** 是否可用*/@TableField(fill = FieldFill.INSERT)private Boolean availableFlag;

这样我们在具体业务中对实体类进行赋值就可以不用对这些公共字段进行赋值,在执行插入或者更新时就能自动赋值并插入数据库。

那么要自动赋的值在哪里配置?
在项目的config包下新建自动填充处理类使其实现接口MetaObjectHandler,接下来我们来写自动赋值的配置类,并重写其方法:

package com.ws.api.config;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;import java.util.Date;/*** 自动填充处理类* @author badao* @version 1.0* @see**/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {@Override  //在执行mybatisPlus的insert()时,为我们自动给某些字段填充值,这样的话,我们就不需要手动给insert()里的实体类赋值了public void insertFill(MetaObject metaObject) {//其中方法参数中第一个是前面自动填充所对应的字段,第二个是要自动填充的值。第三个是指定实体类的对象this.setFieldValByName("modifierId", new Long(111), metaObject);this.setFieldValByName("gmtModified", new Date(), metaObject);this.setFieldValByName("creatorId", new Long(111), metaObject);this.setFieldValByName("gmtCreat",new Date(), metaObject);this.setFieldValByName("availableFlag",true, metaObject);}@Override//在执行mybatisPlus的update()时,为我们自动给某些字段填充值,这样的话,我们就不需要手动给update()里的实体类赋值了public void updateFill(MetaObject metaObject) {this.setFieldValByName("modifierId", new Long(111), metaObject);this.setFieldValByName("gmtModified", new Date(), metaObject);}
}

到此,@TableField完成字段自动填充的内容就讲完了

接下来我们来看@TableField(exist=false)的作用

比如在实体类中有一个属性为remark,但是在数据库中没有这个字段,但是在执行插入操作时给实体类的remark属性赋值了,那么可以通过在实体类的remark属性上添加

@TableField(exist=false)private String remark;

就不会报错了。

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

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

相关文章

dataframe记录数_大数据系列之Spark SQL、DataFrame和RDD数据统计与可视化

Spark大数据分析中涉及到RDD、Data Frame和SparkSQL的操作&#xff0c;本文简要介绍三种方式在数据统计中的算子使用。1、在IPython Notebook运行Python Spark程序IPython Notebook具备交互式界面&#xff0c;可以在Web界面输入Python命令后立刻看到结果&#xff0c;还可将数据…

bug的生命周期、bug状态转换图

当我们发现一个bug的时候&#xff0c;应该怎么理清他们之间的关系呢&#xff1f;一个bug 从open到close的所有状态 都是我们测试人员需要注意的。 一、bug的状态 新建&#xff08;New&#xff09; 新发现的bug&#xff0c;未经评审决定是否指派给开发人员进行修改。 确认&…

青岛经济职业学校有计算机专业吗,青岛经济职业学校

原标题&#xff1a;青岛经济职业学校山东省青岛第二十中学(青岛经济职业学校)是青岛市教育局属公办中等职业学校、国家级重点职业学校、省规范化学校、省教学示范学校、省教学科研示范学校、省首批健康示范学校、市文明标兵单位、市首批办学模式改革示范学校、市首批文明校园。…

wps居中对齐不在中间_WPS文字快捷键总结(Windows版本)--值得收藏

WPS Office是一款国产的办公软件套装&#xff0c;有WPS文字、WPS表格和WPS演示三个板块&#xff0c;可以实现办公软件最常见的文字、表格、演示等多种功能&#xff0c;支持阅读和输出PDF文件&#xff0c;全面兼容Microsoft Office97-2010格式。想要熟练地使用WPS办公软件&#…

bugzilla使用规范分享

bugzilla使用规范分享 1.new/confirmed 测试人员将Bug提交给任务分发人员&#xff08;研发模块负责人&#xff09;&#xff0c; 此时Bug状态为new/confirmed&#xff0c;开始Bug的生命周期&#xff0c;如果测试人员知道具体负责的研发人员&#xff0c;也可以直接指定&#x…

管理计算机(域)的内置账户名称,管理active directory中用户和计算机账户

匿名用户1级2013-05-29 回答Active Directory用户账户用于验证用户身份&#xff0c;指派用户的访问权限。用户必须使用用户账户登录到特定的计算机和域。登录到网络的每个用户应有自己的惟一账户和密码。用户账户也可用作某些应用程序的服务账户。在域控制器上建立的是域用户账…

编程语言_如何正确地学习编程语言

首先&#xff0c;当前学生和职场人学习编程已经成为了一个大的趋势&#xff0c;掌握编程语言不仅能够提升自身获取信息的能力&#xff0c;同时也能够拓展自身的能力边界&#xff0c;这一点在工业互联网时代会有更加明显的体现。编程语言本身并不难&#xff0c;但是要想形成自己…

MySQL——decimal类型长度

分为三种&#xff1a; float&#xff1a;浮点型&#xff0c;含字节数为4&#xff0c;32bit&#xff0c;数值范围为-3.4E38~3.4E38&#xff08;7个有效位&#xff09;double&#xff1a;双精度实型&#xff0c;含字节数为8&#xff0c;64bit&#xff0c;数值范围-1.7E308~1.7E3…

测试游戏帧率电脑温度的软件,游戏中显示帧数和温度方法_游戏画面中实时显示FPS帧数温度技巧...

相信很多游戏玩家平时都是在用电脑玩游戏&#xff0c;而且大家也喜欢看一看自己在在游戏画面中实时的FPS帧数和温度信息。但是很网友对这个游戏画面中如何实时显示FPS帧数、频率、硬件温度不太清楚&#xff0c;下面智能手机网分享一下具体的操作方法&#xff0c;以便大家在玩游…

12面魔方公式图解法_一位建筑工程师:多年渴望就是学会魔方还原,只按这七步就可以!...

本人性别男&#xff0c;年龄47岁&#xff0c;一位建筑工程师&#xff0c;性格开朗&#xff0c;喜欢学习&#xff0c;2013年在网上搜索记忆关键词&#xff0c;从此开始了学习超级记忆和思维导图之路&#xff01;也因此&#xff0c;接触了魔方&#xff01;初学魔方&#xff0c;我…

计算机更新服务,使用 Microsoft Update 更新计算机

使用 Microsoft Update 更新计算机本文介绍可用于定期更新 Microsoft Office 2010 和其他 Microsoft 软件以及有助于增强计算机安全性的 Microsoft Update 选项。本文内容检查 Office 程序更新Microsoft Update 提供用于 Office 2010 和其他 Microsoft 程序的更新。注释如果您的…

navicat运行db文件_使用 YAML 文件配置 Jenkins 流水线

本文转载自&#xff1a;Jenkins 中文社区这也是一种自定义流水线 DSL 的方法几年前&#xff0c;我们的 CTO 写了一篇关于 使用 Jenkins 和 Docker 为 Ruby On Rails 应用提供持续集成服务 的文章。这些年&#xff0c;我们一直使用这个 CI 流水线解决方案&#xff0c;直到我们最…

Mybatis-Plus实现逻辑删除

数据库中的数据删除会分为两种&#xff1a;物理删除 和 逻辑删除 物理删除 物理删除就是我们删除数据库中的一条数据时&#xff0c;数据会真的被删除 逻辑删除 逻辑删除指的是我们删除一条数据时&#xff0c;数据不会在数据库中消息&#xff0c;逻辑删除是我们现在开发中经…

完美国际单机修改服务器端,完美国际改国内版单机一键服务端

最喜欢的一款网游&#xff0c;曾经出来的时候可以说是划时代的&#xff0c;3D游戏&#xff0c;空战&#xff0c;大地图无缝对接等。从比较早的113版本&#xff0c;经典的六职业136版本&#xff0c;到现在的155版本。都保存的有。玩官服就不说啦&#xff0c;从13年接触服务端到现…

HTTPClient和CloseableHttpClient

使用HttpClient发送请求的一般步骤 (1) 创建HttpClient对象。 (2)创建请求方法的实例&#xff0c;并指定请求URL。如果需要发送GET请求&#xff0c;创建HttpGet对象&#xff1b;如果需要发送POST请求&#xff0c;创建HttpPost对象。 (3) 如果需要发送请求参数&#xff0c;可调用…

开发 数组里面的字典_Redis字典结构与rehash解读

关注公众号&#xff1a;后端技术漫谈&#xff0c;技术之路不迷路~字典是一种用于保存键值对的抽象数据结构&#xff0c;也被称为查找表、映射或关联表。在字典中&#xff0c;一个键(key)可以和一个值(value)进行关联&#xff0c;这些关联的键和值就称之为键值对。抽象数据结构&…

MyBatisPlus 学习笔记_MP的AR模式

狂神说 MyBatisPlus 学习笔记 一、快速入门 文档&#xff1a;https://mp.baomidou.com/ 使用第三方组件&#xff1a; 导入对应依赖研究依赖如何配置代码如何编写提高扩展技术能力 步骤&#xff1a; 1、创建数据库 mybatis_plus 2、创建user表 DROP TABLE IF EXISTS user;CREATE…

ajax调用java程序,从微信小程序到鸿蒙JS开发-JS调用Java

除轻量级智能穿戴设备&#xff0c;现鸿蒙支持的手机、汽车、TV、手表、平板等属于富鸿蒙&#xff0c;在JS语言的项目中也有Java模块&#xff0c;并提供了JS跨语言调用Java方法的技术。现需要实现查看商品评论时&#xff0c;统计出长评、中评和短评的比例&#xff0c;这里将评论…

文本删除空行_010 Editor for mac(文本和十六进制编辑器)

为大家带来最新版本的010 Editor for mac&#xff0c;这是一款专业的文本和十六进制编辑器&#xff0c;新版本的010 editor mac版包含了语法突出显示、更多字符集支持、添加了删除行和删除空行命令等新功能&#xff0c;另外修复了各种错误&#xff0c;功能更加全面。010editor …