spring boot jpa中的注解不少,参数也比较多。不必所有记住,可是常常查看官方文档也比较麻烦,记录一下一些经常使用的注解。经过一些具体的例子来帮助记忆。java
@Entity @Table(name = "flow")
@SQLDelete(sql = "update flow set deleted = 1 where id = ?")
@Where(clause = "deleted = 0")
public class Flow {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Column(updatable = false)
private Date createTime;
private Date operateTime;
@PrePersist
protected void onCreate() {
createTime = new Date();
}
@PreUpdate
protected void onUpdate() {
operateTime = new Date();
}
@Column(columnDefinition = "TEXT")
private String message;
private deleted = 0;
}
一、Entity 表示这个类是一个实体类,对应数据库中的一个表spring
二、@Table 指定这个类对应数据库中的表名。若是这个类名的命名方式符合数据库的命名方式,能够省略这个注解。如FlowType类名对应表名flow_type。sql
三、@Id 指定这个字段为表的主键数据库
四、@GeneratedValue(strategy=GenerationType.IDENTITY) 指定主键的生成方式,通常主键为自增的话,就采用GenerationType.IDENTITY的生成方式app
五、@Column(updatable = false) @Columun 注解针对一个字段,对应表中的一列。有不少参数,name表示对应数据表中的字段名。insertable 表示插入式是否更新。updateable,表示update的时候是否更新;columnDefinition表示字段类型,当使用jpa自动生成表的时候比较有用。blog
六、@PrePersist 表示持久化以前执行继承
七、@PreUpdate 表示执行Update操做以前执行。文档
八、SQLDelete表示当执行jpa中的delete操做时,执行的语句it
九、@Where 当执行查询语句时,会附带这个条件。这个和上面的一块儿使用,能够实现软删除io
上述代码表示数据库中有一个表名为flow的表。主键为id,为自增。createTime为建立时间,当第一次插入的时候产生时间,后续不会随着update变更。而operateTime仅在Update的时候更新。message是String类型,默认建立的字段为Varchar类型,这里指定为TEXT。
咱们建立数据库的时候,推荐每一个表都要有建立时间和更新时间,可是不必每一个表都写重复的代码,能够用下面的注解来解决
@MappedSuperclass public class BaseEntity implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) protected Long id; @Column(updatable = false) private Date createTime; private Date updateTime; @PrePersist protected void onCreate() { createTime = new Date(); } @PreUpdate protected void onUpdate() { updateTime = new Date(); }
十、@MappedSuperclass 表示一个这是一个父类,不会被当成一个实体类。在这里定义一些表中的通用字段。而后其余实体类继承这个类就能够了,避免写重复代码。