注解名 | 功能 |
---|---|
@Entity | 使一个类成为实体类,将映射到指定的数据库表 例如如果注解到实体类Customer上,将会映射到customer表上 |
@Table(name=“JPA_CUSTOMERS”) | 实体类与其映射的数据库表名默认一样的,使用这个注解可以自定义类对应的表的名字。 例如左边这个注解就是将表名改为了JPA_CUSTOMERS 需要和@Entity注解并列使用 |
@Id | 声明一个实体类的属性为数据库的主键列 要加到get方法上 |
@GeneratedValue | 通过注解的strategy属性指定主键的生成策略, MySQL对应的是autoincrement |
@Column | 实体的属性与其映射的数据库表的列不同名时使用 |
@Transient | 实体类中的方法我们都是默认会在数据库中添加字段的,如果不希望自动添加该字段的话,可以在方法上方添加该注解 |
@Temporal | 调整时间类型参数的时间精度, 有DATE、TIME、TIMESTAMP三种精度 |
一些例子:
@Column(name="PERSON_ID",length=10,nullable=false)
@GeneratedValue(strategy=GenerationType.AUTO)
@Id
public Integer getPersonId(){
return personId;
}
首先类的属性personId在数据库中字段名为"PERSON_ID",字段长度为10,不可为空
然后这个属性是表的主键列(@Id)
最后这个主键列的生成策略是auto increment
// 工具方法,不需要映射为表的一个字段
@Transient
public String getInfo() {
return "lastName:"+lastName+", email:"+email;
}
这里的getInfo()方法是或者实体的一些信息,但是只要是在实体类中的方法,JPA都会尝试将属性加入到数据库表中一个字段中去。如果该方法上方不添加Transient注解,则数据库会存在"Info"字段的数据,或者运行时直接报错。加了@Transient之后,getInfo()就只是一个普通的方法了。
@Temporal(TemporalType.DATE)
public Date getBirth() {
return birth;
}
@Temporal(TemporalType.TIMESTAMP)
public Date getCreatedTime() {
return createdTime;
}
上面两个方法是获得用户的生日和当前的一个时间点。如果不添加注解@Temporal,两个日期都会精确到年月日小时分钟秒,但是在getBirth()这个方法上方加上注解@Temporal(TemporalType.DATE)
后,获得的日期就只会精确到年月日,不会到小时分秒。