目录
一、简单的案例
数据库结构:
顾客表costumer:
主键:costumer_id
非主属性:name、sex
报纸表newspaper:
主键:newspaper_id
非主属性:name、price、volume
购买表purchase:
主键:purchase_time
外键:newspaper_id、costumer_id、
非主属性:newspaper_id、costumer_id、purchase_amount
Costumer配置
package com.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "costumer")
public class Costumer {
@Id
@Column(name = "costumer_id", nullable = false)
private Integer id;
@Column(name = "name", length = 45)
private String name;
@Column(name = "sex", length = 45)
private String sex;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
Newspaper配置
package com.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.math.BigDecimal;
@Entity
@Table(name = "newspapers")
public class Newspaper {
@Id
@Column(name = "newspaper_id", nullable = false)
private Integer id;
@Column(name = "name", length = 45)
private String name;
@Column(name = "price", precision = 10, scale = 2)
private BigDecimal price;
@Column(name = "volume", nullable = false)
private Integer volume;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public Integer getVolume() {
return volume;
}
public void setVolume(Integer volume) {
this.volume = volume;
}
}
Purchase配置
package com.model;
import javax.persistence.*;
import java.time.Instant;
@Entity
@Table(name = "purchase")
public class Purchase {
@Id
@Column(name = "purchase_time", nullable = false)
private Instant id;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "newspaper_id", nullable = false)
private Newspaper newspaper;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "costumer_id", nullable = false)
private Costumer costumer;
@Column(name = "purchase_amount")
private Integer purchaseAmount;
public Instant getId() {
return id;
}
public void setId(Instant id) {
this.id = id;
}
public Newspaper getNewspaper() {
return newspaper;
}
public void setNewspaper(Newspaper newspaper) {
this.newspaper = newspaper;
}
public Costumer getCostumer() {
return costumer;
}
public void setCostumer(Costumer costumer) {
this.costumer = costumer;
}
public Integer getPurchaseAmount() {
return purchaseAmount;
}
public void setPurchaseAmount(Integer purchaseAmount) {
this.purchaseAmount = purchaseAmount;
}
}
二、@Entity注释
@Entity注解来这标志着这个类作为一个实体类,使用这个注释需要导入javax.persistence包
三、@Table注释
@Table注释是用于指定实体类所映射的数据库的具体表等信息。
@Table注释提供的四个属性包括:
1. name:用于指定表的名称。
2. catalog:用于指定表所属的目录。
3. schema:用于指定表所属的架构。
4. uniqueConstraints:用于执行对列的唯一约束在表中。
四、@Id注释
@Id注释用于指定一个表的主键
五、@Column注释
@Column注释用于指定的列到一个字段或属性将被映射的细节。
@Column注释可以使用以下最常用的属性:
1.name属性允许将显式指定列的名称。
2.length 属性允许用于映射一个value尤其是对一个字符串值的列的大小。
3.nullable 属性允许该列被标记为NOT NULL生成架构时。
4.unique 属性允许被标记为只包含唯一值的列。
六、@ManyToOne注释
@ManyToOne注解表示该属性是多对一关系。
@ManyToOne注解提供的属性:
1.fetch = FetchType.LAZY表示在访问该属性时使用延迟加载策略。
2.optional = false表示该属性是必需的,不允许为空。
七、@JoinColumn注释
@JoinColumn注解用来指定在数据库中用于关联的外键列。
@JoinColumn注解以下最常用的属性:
1.name属性允许将显式指定列的名称。
2.nullable 属性允许该列被标记为NOT NULL生成架构时。