Mybatis-plus注解:@TableField注解以及其updateStrategy 属性的介绍

前几天研发的时候遇到了一个问题,需求是这样的,言简意赅就是要让查询结果多查出来几个字段。具体的实现也不用写太多的业务逻辑代码,就是改sql,我要在别人写好的sql语句上,来改进sql语句从而实现这个功能。但是看了Mapper层写的方法返回的集合的泛型实体类,发现该集合的泛型实体类中的属性并不能与查询结果的字段一一对应。

举个简单的例子,也就是说:XxxMapper.java文件中List<A> 方法名(参数1,参数2……)中的实体A中的属性只有name和gender。而我这个List<A> 方法名(参数1,参数2……)方法对应的sql语句,却是要查出来name、gender之外的age属性(有人会问了,一个实体类在设计的时候就是对应数据库的一张表啊,实体类的属性跟数据库那张表的字段一一对应,那这个age字段就不应该有啊。这里说明一下,其实这个age字段,是通过多表联查取到的,也就是说,这个age字段是在另外一张表上。)

那么这个时候就显而易见的出现了一个问题了,这个方法里面的泛型A,显然接不住age这个字段。因为属性就name和gender嘛,怎么接?

接不住怎么办?

Mybatis-plus有个注解能够很好的帮助我们解决了这个令人苦恼的问题,那就是@TableField。

@Tablefield是用来指定属性对应的字段名,@Tablefield(exist=false)用来表示该属性并不是对应数据库中的字段的。而该属性可能是因为前端的需要,在项目中必须使用。该注解的使用为加在实体类的属性上,而该属性必须是数据库中数据表中不存在的字段。

2023.1.11更新。补充对@Tablefield注解的详细说明。

@Tablefield注解可以指定字段的属性,常用来解决以下场景的问题:

1.对象中的属性名和字段名不一致的问题(非驼峰)

2.对象中的属性字段在表中不存在的问题(表中有这个字段但是代码中实体类属性名想另取)

  1. 对象中的属性字段在表中不存在的问题(表中压根没有这个字段,这种情况我在上面已经详细举例并且介绍了场景及使用效果,不再过多赘述。)

下面来针对1和2来进行场景举例和介绍:

场景1:假如代码中有个User实体类,User内有对象属性username,该字段对应数据库里面的User表的user_name字段,此时在实体类中的user_name属性上加上注解@Tablefield(value="user_name")即可

场景2:假如代码中有个User实体类,User内有对象属性eamil,该字段对应数据库面的User表的mail字段,此时在实体类中的eamil属性上加上注解@Tablefield(value="mail")即可。

在 MyBatis-Plus 中,@TableField 注解用于指定 Java 类字段和表列之间的映射。此注解的 updateStrategy 属性可用于指定在更新操作期间如何处理该字段。

该更新策略属性可以采用四种可能的值:

  • FieldStrategy.IGNORED:在更新操作期间将忽略该字段,如果该字段为null 将在数据库设置为null

  • FieldStrategy.NOT_NULL:该字段将插入或更新为非空。

  • FieldStrategy.NULL:该字段将插入或更新为空。

  • FieldStrategy.DEFAULT:当值不为 null 时将更新该字段

在您提供的示例中,使用的策略是 FieldStrategy.IGNORED,这意味着在更新此字段时,将不会更新数据库中的该列,并且此字段的任何现有值将被忽略,不包括在更新中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值