使用@TableField(updateStrategy=FieldStrategy.IGNORED)遇到的坑记录
作者:易不易
这篇文章主要介绍了使用@TableField(updateStrategy=FieldStrategy.IGNORED)遇到的坑及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
@TableField(updateStrategy=FieldStrategy.IGNORED)遇到的坑
@TableField(updateStrategy = FieldStrategy.IGNORED) private String phoneNo;
因为联系人手机号码可以修改为空值,所以加@TableField(updateStrategy = FieldStrategy.IGNORED)注解,可以让phoneNo为空的时候用MP更新数据库是不会忽略此字段。
后来我在修改该对象其他属性时,没有设置phoneNo的值,更新时发现phoneNo就被更新为空。所以为了避免此情况我不得重新查询该字段值再赋值一遍。
切记用此注解需谨慎!!!
注解 @TableField 的使用笔记
@TableField 是一个注解,用于标识实体类中的字段映射关系。它是 MyBatis-Plus 框架提供的注解之一,用于与数据库表字段进行映射。
在使用 MyBatis-Plus 进行数据库操作时,我们可以通过 @TableField 注解来指定实体类中的字段与数据库表中的字段之间的映射关系。该注解可以用于类的成员变量上,也可以用于类的方法上。
常见的@TableField注解参数包括
- value:指定实体类字段与数据库表字段的映射关系,如果实体类字段名与数据库表字段名一致,可以省略该参数。
- exist:指定该字段是否为数据库表字段,默认为 true,表示是数据库表字段;设置为 false 则表示不是数据库表字段。
- fill:指定该字段是否为自动填充字段,用于在插入和更新操作时自动填充字段的值。
public class User { @TableField("user_name") private String userName; @TableField(value = "age", exist = false) private Integer age; // getter and setter }
上述代码中,userName 字段与数据库表字段 user_name 进行映射,而 age 字段并不是数据库表字段。
另外:
@TableName注解,value值指定对应的表名。
@Data @AllArgsConstructor @NoArgsConstructor @TableName("t_user") public class User { private Long id; private String name; }
@TableId注解:MyBatisPlus在实现CRUD默认会将Id作为主键,在插入数据时,使用雪花算法生成Id,如果主键不叫Id则添加功能会失败。
所以@TableId有下列用法:
@TableId(value = “uid”) //value指定当前作为主键的字段 @TableId(value = “id”,type = IdType.AUTO) //将当前属性所对应的字段作为主键
@Data @AllArgsConstructor @NoArgsConstructor @TableName("t_user") public class User { @TableId private Long id; private String name; }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。