MybatisPlus中@TableField注解的使用

MybatisPlus中@TableField注解的使用实现官方文档说明 com baomidou mybatisplus annotations TableFieldTa 注解新增属性 update 预处理 set 字段自定义注入 讲解 比如我们使用 mybatisplus 自带的 insert 方法向数据库插入数据时 假设我们给 age 字段赋值为 1 但是我们在 age 字段上的 TableField 注解里面加了 update s

实现

官方文档说明:

  • com.baomidou.mybatisplus.annotations.TableField
    在这里插入图片描述

  • 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-已删除 */ @TableLogic private 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; / 指定主键 */ @Override protected 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提供的AR return roleDOList; } 

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

  • 字段填充策略 FieldFill
    在这里插入图片描述
    讲解如下:




实体类中有如下属性,通过上面的自动填充属性,我们可以实现在进行插入(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; 

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

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; 

就不会报错了。

在这里插入图片描述

接下来的一段时间,我会专注Java技术栈,计算机网络,数据结构和算法,操作系统,设计模式,计算机组成原理,数据库原理,设计模式来做分享,欢迎你们和我一起学习,一起提高,Fighting!

本文转载自:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/198527.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午3:01
下一篇 2026年3月26日 下午3:01


相关推荐

  • python编程100例_python进阶路线

    python编程100例_python进阶路线异常模块下面介绍python常用的异常模块AttributeError异常AttributeError试图访问一个类中不存在的成员(包括:成员变量、属性和成员方法)而引发的异常Attribut

    2022年7月29日
    10
  • No qualifying bean of type [XXX.XXX] found for dependency 解决方法「建议收藏」

    No qualifying bean of type [XXX.XXX] found for dependency 解决方法「建议收藏」源代码:@ServicepublicclassUserServiceimplementsUserServices{@AutowiredUserMapperuserMapper;publicbooleanAddUserInfo(Useruser){if(userMapper.insert(user)>0)

    2022年8月22日
    9
  • 智能家居产业链分析

    智能家居产业链分析“一盘散沙,各自为营”是目前国内智能家居产业生态的真实写照。从地域上来看,北京、华南地区比较活跃。北京高校、科研院所云集,具备雄厚的科技力量优势,华南地区的中小企业多,也较为活跃。“这也和十几年前一样,智能家居这块目前还是小企业更为活跃,大企业在等待时机。”广东华南家电研究院院长孙颖楷向记者表示。“从传统的家具行业角度划分,上游是元器件厂商,如传感器、芯片等;中游是控制器和控制软件

    2022年6月22日
    43
  • python表白代码简单「建议收藏」

    python表白代码简单「建议收藏」谢谢大家的支持,您的一键三连是罡罡同学前进的最大动力!一键三连一键三连一键三连一键三连一键三连一键三连python表白代码简单1.首先你要现有python,以及环境配置(自己去网上找资源)2.下载pycharm(相当于Dev、Eclipse编译器)3.复制粘贴即可下面放上源代码:importturtle#str=input(‘请输入表白语:’)str=”糖浆不分离”str1=”2020/12/22~2021/2/16″turtle.speed(

    2022年6月2日
    50
  • shell中各种括号的作用()、(())、[]、[[]]、{}「建议收藏」

    shell中各种括号的作用()、(())、[]、[[]]、{}「建议收藏」一、小括号,园括号()1、单小括号()①命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。②命令替换。等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将

    2022年7月11日
    17
  • 常用电脑资料速查

    常用电脑资料速查总目录1.《BIOS报警声意义》2.《BIOS自检与开机故障相关问题》3.《计算机几个常见指标的意义》4.《显卡GPU参数和比较[转译]》5.《显示卡常见故障全面解决》6.《显示器经典故障以及处理办法》7.《主板代码大全》8.《黑屏故障》9.《WindowsXP操作系统进程》10.《[续]一般程序进程)》11.《网页恶意代码的手工处理》12.《电脑重启故障》13.《光驱常见故障》14.《显示器抖

    2022年10月7日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号