👨🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。
☠️每日毒鸡汤:这个社会是存在不公平的,不要抱怨,因为没有用!人总是在反省中进步的
👋大家好!我是你们的老朋友Java学术趴。
@ApiModel :在实体类上边使用,标记类时swagger的解析类。这样生成的Swagger的Api文档就会存在对该类的详细介绍。
记住两个常用的参数:value以及description
@ApiModel(value="Assets对象", description="关于资产的实体类")
@ApiModelProperty : 使用在被 @ApiModel 注解的模型类的属性上。这样生成的Swagger的Api文档就会存在对这个属性的详细介绍。
记住几个常用的参数:value、name、dataType、required、example、hidden、readOnly、allowEmptyValue
@ApiModelProperty(value = "光宇编号", example = "TM1234");
@JsonFormat :它是一个时间格式化注解,比如我们存储在mysql中的数据是date类型的,当我们读取出来封装在实体类中的时候,就会变成英文时间格式,而不是yyyy-MM-dd HH:mm:ss这样的中文时间,因此我们需要用到JsonFormat注解来格式化我们的时间。
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8");
当不使用这个注解仍然想让时间不解析为英文时间格式,那么就需要在 application.yml 中对jackson进行配置。
配置完之后就可以省略 @JsonFormat 注解了。
当然也可以使用 @JsonFormat(pattern = "yyyy-MM-dd ",timezone = "GMT+8") 来进行格式的覆盖。
@JsonIgnore :此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。也就是在前后端进行数据交互的时候会忽略掉这个注解,不传递关于这个注解的任何参数值。
@JsonIgnore
private Integer mainId;
@Excel(name = "无效时间", width = 15, format = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattren = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat @JsonFormat 使用注意的地方:
@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;
}
@TableName : 在实体类上指定,指定实体类和数据库表的映射关系。重点:当实体类的类名在转成小写后和数据库表名相同时,可以不指定该注解。
@TableName("alarm_prehandle"); // 参数为表名,该注解在实体类上
@Tableld : 用于指定实体类的某个属性为对应的数据表中的主键。这个注解在实体类中只存在一个。
// value:指定对应表中的字段名,当声明的属性名和表中的字段名一致的时候可以省略不写。
// type:是主键的类型,AUTO代表的主键自增
@TableId(value = "id", type = IdType.AUTO);
private Integer id;
@TableField : 解决实体类中属性名和表中的字段名不一致(非驼峰),还有对象中的某个属性不在表中进行忽略。
在开发中一般在 application.yml 对MyBatis进行实体类的驼峰与表中_对应的配置。此时会对实体类中的大写字母转为小写,并且在单词之间拼接 _ ,让其与数据库字段对应。
通过以下代码说明 @TableField 的几种用法
@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完成字段自动填充的操作
实现方式:这个自动填充是添加到实体类中的某个属性之上,是对该属性在进行指定操作的时候完成自动填充
/**
* 创建人
*/
// 该属性对应的数据表中的字段(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;
这样我们在具体业务中对实体类进行赋值就可以不用对这些公共字段进行赋值,在执行插入或者更新时就能自动赋值并插入数据库。
重点:那么这些自动填充的数据从何而来????
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 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有