springboot注解——项目中具体配置解析和使用环境

@MappedSuperclass:

1.@MappedSuperclass 注解使用在父类上面,是用来标识父类的

2.@MappedSuperclass 标识的类表示其不能映射到数据库表,因为其不是一个完整的实体类,但是它所拥有的属性能够映射在其子类对用的数据库表中

3.@MappedSuperclass 标识的类不能再有@Entity或@Table注解

@Column

1.当实体的属性与其映射的数据库表的列不同名时需要使用@Column标注说明,该属性通常置于实体的属性声明语句之前,还可与 @Id 标注一起使用。

2.@Column 标注的常用属性是name,用于设置映射数据库表的列名。此外,该标注还包含其它多个属性,如:unique、nullable、length、precision等。具体如下:

1 name属性:name属性定义了被标注字段在数据库表中所对应字段的名称

  2 unique属性:unique属性表示该字段是否为唯一标识,默认为false,如果表中有一个字段需要唯一标识,则既可以使用该标记,也可以使用@Table注解中的@UniqueConstraint

  3 nullable属性:nullable属性表示该字段是否可以为null值,默认为true

  4 insertable属性:insertable属性表示在使用”INSERT”语句插入数据时,是否需要插入该字段的值

  5 updateable属性:updateable属性表示在使用”UPDATE”语句插入数据时,是否需要更新该字段的值

  6 insertable和updateable属性:一般多用于只读的属性,例如主键和外键等,这些字段通常是自动生成的

  7 columnDefinition属性:columnDefinition属性表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用,如果数据库中表已经建好,该属性没有必要使用

  8 table属性:table属性定义了包含当前字段的表名

  9 length属性:length属性表示字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符

 10 precision属性和scale属性:precision属性和scale属性一起表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数

    具体如下:
   1.double类型将在数据库中映射为double类型,precision和scale属性无效
   2.double类型若在columnDefinition属性中指定数字类型为decimal并指定精度,则最终以columnDefinition为准
   3.BigDecimal类型在数据库中映射为decimal类型,precision和scale属性有效
   4.precision和scale属性只在BigDecimal类型中有效

3.@Column 标注的columnDefinition属性: 表示该字段在数据库中的实际类型.通常 ORM 框架可以根据属性类型自动判断数据库中字段的类型,但是对于Date类型仍无法确定数据库中字段类型究竟是DATE,TIME还是TIMESTAMP.此外,String的默认映射类型为VARCHAR,如果要将 String 类型映射到特定数据库的 BLOB 或TEXT字段类型.

4.@Column标注也可置于属性的getter方法之前

@Getter和@Setter(Lombok)

@Setter:注解在属性上;为属性提供 setting 方法 @Getter:注解在属性上;为属性提供 getting 方法

扩展: 

 @Data:注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法

   @Setter:注解在属性上;为属性提供 setting 方法   

   @Getter:注解在属性上;为属性提供 getting 方法   

   @Log4j2 :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象,和@Log4j注解类似   

   @NoArgsConstructor:注解在类上;为类提供一个无参的构造方法  

  @AllArgsConstructor:注解在类上;为类提供一个全参的构造方法  

  @EqualsAndHashCode:默认情况下,会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性。  

  @toString:生成toString方法,默认情况下,会输出类名、所有属性,属性会按照顺序输出,以逗号分割。  

  @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor

         无参构造器、部分参数构造器、全参构造器,当我们需要重载多个构造器的时候,只能自己手写了  

  @NonNull:注解在属性上,如果注解了,就必须不能为Null  

  @val:注解在属性上,如果注解了,就是设置为final类型,可查看源码的注释知道
@PreUpdate和@PrePersist
@PreUpdate
1.用于为相应的生命周期事件指定回调方法。
2.该注释可以应用于实体类,映射超类或回调监听器类的方法。
3.用于setter 如果要每次更新实体时更新实体的属性,可以使用@PreUpdate注释。
4.使用该注释,您不必在每次更新用户实体时显式更新相应的属性。
5.preUpdate不允许您更改您的实体。 您只能使用传递给事件的计算的更改集来修改原始字段值。

@Prepersist
1.查看@PrePersist注释,帮助您在持久化之前自动填充实体属性。
2.可以用来在使用jpa的时记录一些业务无关的字段,比如最后更新时间等等。生命周期方法注解(delete没有生命周期事件)
3.@PrePersist save之前被调用,它可以返回一个DBObject代替一个空的 @PostPersist save到datastore之后被调用 
4.@PostLoad 在Entity被映射之后被调用 @EntityListeners 指定外部生命周期事件实现类 

实体Bean生命周期的回调事件

方法的标注: @PrePersist @PostPersist @PreRemove @PostRemove @PreUpdate @PostUpdate @PostLoad 。

它们标注在某个方法之前,没有任何参数。这些标注下的方法在实体的状态改变前后时进行调用,相当于拦截器;

pre 表示在状态切换前触发,post 则表示在切换后触发。

@PostLoad 事件在下列情况触发:

1. 执行 EntityManager.find()或 getreference()方法载入一个实体后;

2. 执行 JPA QL 查询过后;

3. EntityManager.refresh( )方法被调用后。

@PrePersist 和 @PostPersist事件在实体对象插入到数据库的过程中发生;

@PrePersist 事件在调用 EntityManager.persist()方法后立刻发生,级联保存也会发生此事件,此时的数据还没有真实插入进数据库。

@PostPersist 事件在数据已经插入进数据库后发生。

@PreUpdate 和 @PostUpdate 事件的触发由更新实体引起, @PreUpdate 事件在实体的状态同步到数据库之前触发,此时的数据还没有真实更新到数据库。

@PostUpdate 事件在实体的状态同步到数据库后触发,同步在事务提交时发生。

@PreRemove 和 @PostRemove 事件的触发由删除实体引起,@ PreRemove 事件在实体从数据库删除之前触发,即调用了 EntityManager.remove()方法或者级联删除

 

当你在执行各种持久化方法的时候,实体的状态会随之改变,状态的改变会引发不同的生命周期事件。这些事件可以使用不同的注释符来指示发生时的回调函数。

@javax.persistence.PostLoad:加载后。

@javax.persistence.PrePersist:持久化前。

@javax.persistence.PostPersist:持久化后。

@javax.persistence.PreUpdate:更新前。

@javax.persistence.PostUpdate:更新后。

@javax.persistence.PreRemove:删除前。

@javax.persistence.PostRemove:删除后。

http://images.51cto.com/files/uploadimg/20090907/134455251.jpg

1)数据库查询

@PostLoad事件在下列情况下触发:

执行EntityManager.find()或getreference()方法载入一个实体后。

执行JPQL查询后。

EntityManager.refresh()方法被调用后。

2)数据库插入

@PrePersist和@PostPersist事件在实体对象插入到数据库的过程中发生:

@PrePersist事件在调用persist()方法后立刻发生,此时的数据还没有真正插入进数据库。

@PostPersist事件在数据已经插入进数据库后发生。

3)数据库更新

@PreUpdate和@PostUpdate事件的触发由更新实体引起:

@PreUpdate事件在实体的状态同步到数据库之前触发,此时的数据还没有真正更新到数据库。

@PostUpdate事件在实体的状态同步到数据库之后触发,同步在事务提交时发生。

4)数据库删除

@PreRemove和@PostRemove事件的触发由删除实体引起:

@PreRemove事件在实体从数据库删除之前触发,即在调用remove()方法删除时发生,此时的数据还没有真正从数据库中删除。

@PostRemove事件在实体从数据库中删除后触发。

@NoArgsConstructor & @AllArgsConstructor(lombok)

@NoArgsConstructor,提供一个无参的构造方法。

@AllArgsConstructor,提供一个全参的构造方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值