前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SpringBoot实体类中的常用注解(二)

SpringBoot实体类中的常用注解(二)

原创
作者头像
Java学术趴
发布于 2022-06-27 14:44:12
发布于 2022-06-27 14:44:12
2.3K00
代码可运行
举报
文章被收录于专栏:Java全栈·Java全栈·
运行总次数:0
代码可运行

👨‍🎓作者:Java学术趴 🏦仓库:GithubGitee ✏️博客:CSDN掘金InfoQ云+社区 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。

☠️每日毒鸡汤:这个社会是存在不公平的,不要抱怨,因为没有用!人总是在反省中进步的

👋大家好!我是你们的老朋友Java学术趴

2.2 swagger中的注解

2.2.1 @ApiModel

@ApiModel :在实体类上边使用,标记类时swagger的解析类。这样生成的Swagger的Api文档就会存在对该类的详细介绍。

记住两个常用的参数:value以及description

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@ApiModel(value="Assets对象", description="关于资产的实体类")
2.2.2 @ApiModelProperty

@ApiModelProperty : 使用在被 @ApiModel 注解的模型类的属性上。这样生成的Swagger的Api文档就会存在对这个属性的详细介绍。

记住几个常用的参数:value、name、dataType、required、example、hidden、readOnly、allowEmptyValue

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@ApiModelProperty(value = "光宇编号", example = "TM1234");

2.3 jackson中的注解

2.3.1 @JsonFormat

@JsonFormat :它是一个时间格式化注解,比如我们存储在mysql中的数据是date类型的,当我们读取出来封装在实体类中的时候,就会变成英文时间格式,而不是yyyy-MM-dd HH:mm:ss这样的中文时间,因此我们需要用到JsonFormat注解来格式化我们的时间。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8");

当不使用这个注解仍然想让时间不解析为英文时间格式,那么就需要在 application.yml 中对jackson进行配置。

配置完之后就可以省略 @JsonFormat 注解了。

当然也可以使用 @JsonFormat(pattern = "yyyy-MM-dd ",timezone = "GMT+8") 来进行格式的覆盖。

2.3.2 @JsonIgnore

@JsonIgnore :此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。也就是在前后端进行数据交互的时候会忽略掉这个注解,不传递关于这个注解的任何参数值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@JsonIgnore
private Integer mainId;
2.3.4 @Excel
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Excel(name = "无效时间", width = 15, format = "yyyy-MM-dd HH:mm:ss")
2.3.5 @DateTimeFormat
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@DateTimeFormat(pattren = "yyyy-MM-dd HH:mm:ss")
  • @DateTimeFormat :有的时候由前台jsp页面填写一个日期,提交到后台spring mvc的时候,我们希望直接转换成一个Date类型,而不是由一个string 类型接收,然后再通过simpleDateFormat来进行转格式,这样太麻烦了,代码会显的很乱,spring为我们提供了类型转化器,写起来也是很麻烦,我们的需求很简单就是由框架帮我们去自动的转换类型而不是手动的转换,在这样的背景下,我们可以使用@DateTimeFormat注解。
  • @JsonFormat : 我们从数据库里面查询到了日期,然后我们想把这个日期自动的变成string类型,这时我们可以使用@JsonFormat注解。就是把Date类型的数据转换为String类型传递给前端。

@DateTimeFormat @JsonFormat 使用注意的地方:

  1. 注意这两个注解的注解位置
  2. 注意被注解的字段应该是Date类型
  3. 一般会用在VO中
  4. @JsonFormat不要忘了加GMT+8
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@DateTimeFormat(pattern="yyyy-MM-dd")  
private Date alertDate;    
  
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
public Date getAlertDate() {
  return alertDate;
} 
public void setAlertDate(Date alertDate) {
  this.alertDate = alertDate;
}

2.4 mybatisplus中的注解

2.4.1 @TableName

@TableName : 在实体类上指定,指定实体类和数据库表的映射关系。重点:当实体类的类名在转成小写后和数据库表名相同时,可以不指定该注解。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@TableName("alarm_prehandle");  // 参数为表名,该注解在实体类上
2.4.2 @Tableld

@Tableld : 用于指定实体类的某个属性为对应的数据表中的主键。这个注解在实体类中只存在一个。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// value:指定对应表中的字段名,当声明的属性名和表中的字段名一致的时候可以省略不写。
// type:是主键的类型,AUTO代表的主键自增
@TableId(value = "id", type = IdType.AUTO);   
private Integer id;
2.4.3 @TableField

@TableField : 解决实体类中属性名和表中的字段名不一致(非驼峰),还有对象中的某个属性不在表中进行忽略。

在开发中一般在 application.yml 对MyBatis进行实体类的驼峰与表中_对应的配置。此时会对实体类中的大写字母转为小写,并且在单词之间拼接 _ ,让其与数据库字段对应。

通过以下代码说明 @TableField 的几种用法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Data
@NoArgsConstructor
@AllArgsConstructor 
@TableName("tb_user")
// 注意:此时在MyBatis中配置了实体类中的属性驼峰与表中_相对应的配置,所以不一定都要指定@TableField
public class User{
    private Integer id;
    // @TableField(value = "user_name") 可以省略,因为配置了MyBatis
    private String userName;//不希望password出现在查询结果中,默认为true,还可以指定update、detete、insert
    @TableField(select = false)
    private String passWord;
    
    // 解决字段名不一致,此时不满足MyBatis配置的驼峰和_对应
    // 其实这个有个小技巧,就是你可以自定义一个属性名,然后通过@TableField指定它对应数据库表中的某个字段的值,那么此时这个自定义的属性就存在了数据表中某个字段的值,然后可以传递给前端进行响应操作。
    @TableField(value = "email")
    private String mail;// 当address属性在数据库表中不存在,但是我们必须使用这个属性的时候,就可以使用 exist = false 进行忽略,这样在MyBatis-plus解析实体类的时候就会忽略这个属性。否则会报错。
    // 如果不使用 exist 进行忽略,那么必须使用value让它对应表中的某个字段才可以。
    @TableField(exist = false)//指明该属性在数据库表的字段中不存在
    private String address;
}

@TableField完成字段自动填充的操作

实现方式:这个自动填充是添加到实体类中的某个属性之上,是对该属性在进行指定操作的时候完成自动填充

  • 在进行插入操作时 :对添加了注解@tablefield(fill = fieldfill.insert) 的字段进行自动填充。
  • 对添加了注解 @tablefield(fill = fieldfill.insert_update) 的字段在进行插入和更新时进行自动填充。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
  * 创建人
  */
 // 该属性对应的数据表中的字段(creator_id)会在执行 insert 语句的时候会自动进行填充
 @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.UPDATE)
 private boolean availableFlag;

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

重点:那么这些自动填充的数据从何而来????

  • 项目的config包下新建自动填充处理类使其实现接口metaobjecthandler,并且重写其中的方法(这个配置类用于给定自动填充的数据),以下代码可以直接复制粘贴在项目中使用。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package cn.gyyx.config;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;import java.util.Date;
​
@Component 
public class MyMetaObjectHandler implements MetaObjectHandler {// 覆盖重写 insertFill()、updateFill() 方法,代表插入和更新
    @Override
    public void insertFill(MetaObject metaObject) {
        // this此时代表的就是:MetaObject实例对象,metaObject
        // 方法的第一个参数是:实体类中的属性名。第二个参数是:自动赋值的值。第三个参数this
        this.setFieldValByName("updateDate", new Date(), metaObject);
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("deleteFlag", 0, metaObject);
        this.setFieldValByName("operUser", "username", metaObject);
    }
​
    @Override
    public void updateFill(MetaObject metaObject) {this.setFieldValByName("updateDate", new Date(), metaObject);
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
在线问题反馈模块实战(五):实现对通用字段内容自动填充功能
       接下来的这几期,bug菌想跟大家分享一下自己昨天刚接到一个临时的需求,热乎着呢,想分享一下自己是如何面对临时需求并制定整个开发周期,其中包括从梳理业务到创建业务表再到实现业务逻辑形成闭环再到与前端对接,其中会穿插一些业务拓展及功能性拓展,这一条龙流程在线与大家一起见证,分享给刚入门的小伙伴,希望对你们有所帮助。
bug菌
2023/05/27
2810
mybatis-plus的扩展功能
在我们的开发中 数据的创建时间 ,修改时间 !这些操作都是自动更新的 不需要我们手动操作
暴躁的程序猿
2022/03/23
3260
mybatis-plus的扩展功能
MyBatis-Plus踩坑记录
最近写个小项目要用到mybatis plus,有些不太清楚的点,查了下官方文档,顺便做下简要的记录,下面是笔记。
无敌小菜鸟
2021/12/14
1.4K0
MyBatis-Plus踩坑记录
Mybatis Plus 更新时间 creatDate字段报错 Could not set property 'creatDate' 原
MySQL数据库,表中字段名为creatDate,类型为datetime。Java实体类中对应的变量是 java.time.LocalDateTime类型的creatDate。
故久
2020/07/03
4.8K0
MetaObjectHandler探秘:了解对象元数据处理的奥秘
大家好,我是腾讯云开发者社区的 Front_Yue,本篇文章将介绍spring boot项目中操作数据时如何自动填充创建人,创建时间等公共字段。
Front_Yue
2024/04/23
1.6K0
MetaObjectHandler探秘:了解对象元数据处理的奥秘
MyBatis-Plus属性自动填充以及前后端交互中时间属性匹配问题的解决
大家都知道,MyBatis-Plus是为了简化MyBatis开发而生,这个自动填充就是在我们进行一些操作时进行某些属性的自动填充(废话)。
Karos
2023/01/03
1K0
MybatisPlus常用注解
随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量。
用户7630333
2023/12/07
2740
MybatisPlus常用注解
mybatisplus自动填充值:添加信息,自动添加创建时间,更新信息,自动更新信息
这个是自增策略,我希望createTime只是在插入的时候会自动赋值,而updateTime是插入和更新的时候自动赋值 一共是有一下几种:
一写代码就开心
2022/05/09
9380
mybatisplus自动填充值:添加信息,自动添加创建时间,更新信息,自动更新信息
超级全面的SpringBoot注解介绍,每一个注解都深入骨髓!!
👨‍🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。 ☠️每日毒鸡汤:放心,闭上眼,睡一觉,反正明天也不一定比今天好。 👋大家好!我是你们的老朋友Java学术趴。今天的文章是小编经过了长达两个星期的创作,毫不出牛逼的说,这篇文章完全可以作为一个字典查询。里面几乎包含了你目前你
Java学术趴
2022/07/26
6.1K0
超级全面的SpringBoot注解介绍,每一个注解都深入骨髓!!
Mybatis-Plus常用API教程,看这一篇就够了
注意:-- 真实开发中往往都会有这四个字段,version(乐观锁)、deleted(逻辑删除)、gmt_create(创建时间)、gmt_modified(修改时间)。
码神联盟
2021/11/10
1K1
Mybatis-Plus常用API教程,看这一篇就够了
Spring Boot(四)Mybatis-Pus
如果已经配置了逻辑删除,那么实际上的删除操作就是将字段deleted变成1,其实实际并未删除该数据,但是相应的在更新查询操作中也会自动带上deleted=0的才能操作,这些逻辑删除可以防止数据误删,以后可以一键删除delete=1的数据
HcodeBlogger
2020/07/14
5050
为简化开发而生
Mybatis-Plus(简称MP)是一个Mybatis的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发、提升效率而生。就像魂斗罗的1P、2P,基友搭配,效率翻倍。
故里
2020/11/25
3400
为简化开发而生
SpringBoot 集成 MybatisPlus 十——数据自动填充
之前学习了逻辑删除字段,在向数据库插入数据时,都需要设置 isDeleted=0,这在进行频繁地数据插入时就显得有些繁琐,于是 MybatisPlus 就为我们提供了自动填充的功能。
用户8100582
2023/11/14
9760
Mybatis 自动保存操作人 操作时间等
使用Mybatis的时候,Mybatis提倡的是简单,官方也没有类似的功能,这个时候如果业务需要审计数据的时候需要手工维护,这时候可以模仿JPA实现一个类似的功能,如下:
BUG弄潮儿
2022/03/08
6720
【MyBatis-Plus】MyBatis-Plus插件机制以及通用Service、新功能
项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。
陶然同学
2023/02/27
4460
【MyBatis-Plus】MyBatis-Plus插件机制以及通用Service、新功能
mybatisplus相关特性使用
我们所有的sql现在是不可见的,我们希望知道它是怎么执行的,所以我们必须要看日志! 配置如下 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
名字是乱打的
2021/12/24
6570
mybatisplus相关特性使用
MyBatis Plus 高级
项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。
Maynor
2021/12/21
6550
MyBatis Plus 高级
Mybatis-plus常用API全套教程,看完没有不懂的
注意:-- 真实开发中往往都会有这四个字段,version(乐观锁)、deleted(逻辑删除)、gmt_create(创建时间)、gmt_modified(修改时间)
业余草
2020/12/29
4720
【谷粒学院】002-Mybatis Plus:主键策略、实现自动填充、乐观锁
参考资料:分布式系统唯一ID生成方案汇总:分布式系统唯一ID生成方案汇总 - nick hao - 博客园
訾博ZiBo
2025/01/06
1380
【谷粒学院】002-Mybatis Plus:主键策略、实现自动填充、乐观锁
跟我学Springboot开发后端管理系统2:Mybatis-Plus实战2
在上一篇文章讲述了如何使用Mybatis-plus自动生成代码,生成的代码具有单表操作数据库的能力,节约了开发时间。然后讲述了如何在Spring Boot中整合Mybatis-Plus。这篇文章讲述如何使用Mybatis-Plus的增强功能:自动填充功能和查询分页功能。
方志朋
2022/01/06
7020
跟我学Springboot开发后端管理系统2:Mybatis-Plus实战2
推荐阅读
相关推荐
在线问题反馈模块实战(五):实现对通用字段内容自动填充功能
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验