這兩天在看黎活明老師的JPA的講解視頻,如今只瞭解這麼多,記錄備用。java
import java.util.Date; import javax.persistence.Basic; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Lob; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.transaction.Transactional; @Entity(name = "Student") // @Entity:代表本類是一個JPA實體,name的默認值就是類名。 @Table(name = "tbl_student") // @Table:指定和數據庫中映射表的名稱(默認配置好了數據源)。 public class Student { private Integer id; // 主鍵,自增 private String name; // 普通string private Date birthday; // 日期類型數據(只保存年月日) private Gender gender; // 枚舉類型數據 private String info; // 大文本 private byte[] file; // 二進制文件流 private String imagePath; // 設置這個字段和數據表字段沒有映射關係 /* * 此處穿插一個問題,什麼是屬性,什麼是字段? * 字段:往上看,上面定義的這些都叫字段。 * 屬性:往下看,get方法get後面跟的字符串叫作屬性。 * * 字段和屬性有啥區別? * 自動生成get/set方法時:屬性和字段均可以和數據庫表字段映射,此時的屬性和字段名是一致的。 * 當屬性和字段名不一致時:只有屬性纔會和數據庫表字段產生映射。 * * 因此: * 使用註解映射屬性和數據庫表字段的關係時,最好將註解寫在get方法上。 * 如果自動生成的get/set方法,即屬性和字段名一致時,註解寫在字段上面也是ok的。 */ @Id // @Id:標識主鍵 @GeneratedValue(strategy = GenerationType.AUTO) // @GeneratedValue:指定自增策略,此處寫的是默認策略,會根據不一樣數據庫使用相應的自增方式。 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } // @Column:用來指定和數據庫表字段的映射,同時可指定數據庫中的字段長度,是否惟一,是否可爲空等一系列的配置。 @Column(name = "name", length = 30, unique = true, nullable = false) public String getName() { return name; } public void setName(String name) { this.name = name; } // @Temporal:指定是日期類型,而且保存格式爲年月日(也能夠指定爲時間或時間戳)。 @Temporal(TemporalType.DATE) public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } // @Enumerated:指定是枚舉類型,保存時保存字符串。若不指定EnumType.STRING,只會保存在枚舉中的下標(index)。 @Enumerated(EnumType.STRING) @Column(length = 5) public Gender getGender() { return gender; } public void setGender(Gender gender) { this.gender = gender; } // @Lob:大文本。如不指定@Lob,最多隻能保存255個字符。指定@Lob以後能夠保存很是大的文本。 @Lob public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } // @Lob:此處@Lob保存的是字符流。 @Lob @Basic(fetch = FetchType.LAZY) // 此處設置查取對象時延遲加載字符流,避免佔用太多的內存。只有用到該屬性時,纔會去加載。 public byte[] getFile() { return file; } public void setFile(byte[] file) { this.file = file; } // @Transactional:用於指定該屬性和數據庫表沒有映射關係。 @Transactional public String getImagePath() { return imagePath; } public void setImagePath(String imagePath) { this.imagePath = imagePath; } } /* * 測試枚舉類型的枚舉類 */ enum Gender { MAN, WOMAN }