JPA學習筆記---JPA實體Bean的建立---連結上一個博文:對實體Bean中屬性進行操作:儲存日期型別,設定欄位的長度,名字,是否為空,可以宣告列舉欄位;可以存放二進位制資料,可以存放
在Person.java檔案中,加上
@Column(length=10,nullable=false,name="productname")
//設定欄位的長度
public String getName() {
return name;
}
------------------------------------------------------------------
修改後的Person.java
package com.credream.bean;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Person {
private Integer id;
private String name;
//預設建構函式
public Person() {
// TODO Auto-generated constructor stub
}
//構造方法:用來建立該物件時候給那麼賦值
public Person(String name) {
this.name=name;
}
@Id @GeneratedValue(strategy=GenerationType.AUTO)//auto是設定的預設值,可
以不設定:
//@GeneratedValue(strategy=GenerationType.AUTO),5.auto:根據方言智慧判斷;
//@Id @GeneratedValue
/*採用資料庫的id自增長的時候用的這個註解;提供了多種策略:
1.GenerationType.IDENTITY使用資料庫id自增長方式,生成主鍵
2.TABLE:一張表:一個欄位:附一個值,另一個記錄id,每次增加都自增一下;
3.SEQUENCE:序列的方式
4.table效率不高,mysql,不可以用序列自增長,oracle不可以用自增長
5.auto:根據方言智慧判斷;
6.auto是設定的預設值,可以不設定:@GeneratedValue(strategy=GenerationType.AUTO)
*/
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=10,nullable=false,name="productname")
//設定欄位的長度
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
---------------------------------------------------------------------
4.如果需要修改表的名字不需要預設值的話,只需要修改Person.java
@Table(name="persondb")
public class Person {
------------------------------------------
修改後的Person.java,可以修改生成表的名字,和欄位的長度,名字,是否為空;
package com.credream.bean;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="persondb")
public class Person {
private Integer id;
private String name;
//預設建構函式
public Person() {
// TODO Auto-generated constructor stub
}
//構造方法:用來建立該物件時候給那麼賦值
public Person(String name) {
this.name=name;
}
@Id @GeneratedValue(strategy=GenerationType.AUTO)//auto是設定的預設值,可
以不設定:
//@GeneratedValue(strategy=GenerationType.AUTO),5.auto:根據方言智慧判斷;
//@Id @GeneratedValue
/*採用資料庫的id自增長的時候用的這個註解;提供了多種策略:
1.GenerationType.IDENTITY使用資料庫id自增長方式,生成主鍵
2.TABLE:一張表:一個欄位:附一個值,另一個記錄id,每次增加都自增一下;
3.SEQUENCE:序列的方式
4.table效率不高,mysql,不可以用序列自增長,oracle不可以用自增長
5.auto:根據方言智慧判斷;
6.auto是設定的預設值,可以不設定:@GeneratedValue(strategy=GenerationType.AUTO)
*/
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=10,nullable=false,name="productname")
//設定欄位的長度
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
-----------------------------------------------------------
5.用實體Bean:Person來存放date型別的資料:
a.在hibernate中用xml檔案是這樣做的
<property name="" length=10 type="date"/>//只儲存到日期
<property name="" length=10 type="datestam"/>//利用時間戳可以儲存日期和時間
datestamp:指的是時間戳
<property name="" length=10 type="time"/>//只儲存時間
時間戳是指檔案屬性裡的建立、修改、訪問時間
b.JPA中儲存date型別:
1.在實體Bean:Person中宣告date屬性,注意用util包下的date
2.利用註解:
@Temporal(TemporalType.DATE)
public Date getBirthday() {
return birthday;
}
這樣可以像資料表中儲存日期型別資料
----------------------------------------------
修改後的Person.java,可以定義表的名字,欄位的長度,是否為空,名字,插入日期型別
package com.credream.bean;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@Table(name="person")
public class Person {
private Integer id;
private String name;
private Date birthday;
//預設建構函式
public Person() {
}
//構造方法:用來建立該物件時候給那麼賦值
public Person(String name) {
this.name=name;
}
@Id @GeneratedValue(strategy=GenerationType.AUTO)//auto是設定的預設值,可
以不設定:
//@GeneratedValue(strategy=GenerationType.AUTO),5.auto:根據方言智慧判斷;
//@Id @GeneratedValue
/*採用資料庫的id自增長的時候用的這個註解;提供了多種策略:
1.GenerationType.IDENTITY使用資料庫id自增長方式,生成主鍵
2.TABLE:一張表:一個欄位:附一個值,另一個記錄id,每次增加都自增一下;
3.SEQUENCE:序列的方式
4.table效率不高,mysql,不可以用序列自增長,oracle不可以用自增長
5.auto:根據方言智慧判斷;
6.auto是設定的預設值,可以不設定:@GeneratedValue(strategy=GenerationType.AUTO)
*/
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=10,nullable=false,name="name")
//設定欄位的長度
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Temporal(TemporalType.DATE)
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
---------------------------------------------------------
6.像資料庫中利用列舉型別儲存性別:
a.在com.credream.bean下新建;
Gender.java
package com.credream.bean;
public enum Gender {
MAN,WOMAN
}
b.在Person.java中新增這個屬性:
private Gender gender=Gender.MAN;//設定資料庫中的預設值
在get方法前寫註解:
@Enumerated(EnumType.STRING) @Column(length=5,nullable=false)//儲存的是字串
public Gender getGender() {
return gender;
}
以上配置的話是以varchar的型別儲存的,所以要設定這個欄位的長度,注意儲存列舉值的時
候,要設定成不允許為空
@Enumerated(EnumType.ORDINAL):指的是通過儲存,列舉的索引來輸入資料庫:就是,比如男
為0,女為1,哪個是0,1跟在enum列舉中的,書寫順序有關;
--------------------------------------------------------------------
修改後的Person.java
可以儲存日期型別,設定欄位的長度,名字,是否為空,可以宣告列舉欄位;
package com.credream.bean;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@Table(name="person")
public class Person {
private Integer id;
private String name;
private Date birthday;
private Gender gender=Gender.MAN;//設定資料庫中的預設值
//預設建構函式
public Person() {
}
//構造方法:用來建立該物件時候給那麼賦值
public Person(String name) {
this.name=name;
}
@Id @GeneratedValue(strategy=GenerationType.AUTO)//auto是設定的預設值,可
以不設定:
//@GeneratedValue(strategy=GenerationType.AUTO),5.auto:根據方言智慧判斷;
//@Id @GeneratedValue
/*採用資料庫的id自增長的時候用的這個註解;提供了多種策略:
1.GenerationType.IDENTITY使用資料庫id自增長方式,生成主鍵
2.TABLE:一張表:一個欄位:附一個值,另一個記錄id,每次增加都自增一下;
3.SEQUENCE:序列的方式
4.table效率不高,mysql,不可以用序列自增長,oracle不可以用自增長
5.auto:根據方言智慧判斷;
6.auto是設定的預設值,可以不設定:@GeneratedValue(strategy=GenerationType.AUTO)
*/
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=10,nullable=false,name="name")
//設定欄位的長度
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Temporal(TemporalType.DATE)
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Enumerated(EnumType.STRING) @Column(length=5,nullable=false)//儲存的是字
符串
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
}
---------------------------------------------------------
7.存放大文字資料:LONGTEXT型別,存放檔案進資料庫,使用懶載入機制
比如存放人員的簡歷;
a.在Person.java中新增屬性:
private String info;
public String getInfo() {
return info;
}
c.在Person.java中新增屬性:
這個屬性是用來存放二進位制資料的:
1.private Byte[] file;//用於存放2進位制資料的
[email protected] @Basic(fetch=FetchType.LAZY)
//用於存放2進位制資料的 , @Basic(fetch=FetchType.LAZY)懶載入,如果沒有用到
//的話就不會載入,比如不使用file的時候,平常的話,如果查詢姓名的時候
//會把所有的那一行的欄位取出來,很佔用記憶體,用這個註解後,只是在需要的時候
//才會取出來,這樣的話可以節省記憶體,提高效能
public Byte[] getFile() {
return file;
}
----------------------------------------------
修改後的Person.java
可以儲存日期型別,設定欄位的長度,名字,是否為空,可以宣告列舉欄位;可以存放二進位制數
據,可以存放大文字資料,可以存放檔案,可以使用懶載入機制
package com.credream.bean;
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;
@Entity
@Table(name="person")
public class Person {
private Integer id;
private String name;
private Date birthday;
private Gender gender=Gender.MAN;//設定資料庫中的預設值
private String info;
private Byte[] file;//用於存放2進位制資料的
//預設建構函式
public Person() {
}
//構造方法:用來建立該物件時候給那麼賦值
public Person(String name) {
this.name=name;
}
@Id @GeneratedValue(strategy=GenerationType.AUTO)//auto是設定的預設值,可
以不設定:
//@GeneratedValue(strategy=GenerationType.AUTO),5.auto:根據方言智慧判斷;
//@Id @GeneratedValue
/*採用資料庫的id自增長的時候用的這個註解;提供了多種策略:
1.GenerationType.IDENTITY使用資料庫id自增長方式,生成主鍵
2.TABLE:一張表:一個欄位:附一個值,另一個記錄id,每次增加都自增一下;
3.SEQUENCE:序列的方式
4.table效率不高,mysql,不可以用序列自增長,oracle不可以用自增長
5.auto:根據方言智慧判斷;
6.auto是設定的預設值,可以不設定:@GeneratedValue(strategy=GenerationType.AUTO)
*/
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=10,nullable=false,name="name")
//設定欄位的長度
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Temporal(TemporalType.DATE)
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Enumerated(EnumType.STRING) @Column(length=5,nullable=false)//儲存的是字
符串
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
@Lob//說明欄位是大文字資料
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
@Lob @Basic(fetch=FetchType.LAZY)
//用於存放2進位制資料的 , @Basic(fetch=FetchType.LAZY)懶載入,如果沒有用到
//的話就不會載入,比如不使用file的時候,平常的話,如果查詢姓名的時候
//會把所有的那一行的欄位取出來,很佔用記憶體,用這個註解後,只是在需要的時候
//才會取出來,這樣的話可以節省記憶體,提高效能
public Byte[] getFile() {
return file;
}
public void setFile(Byte[] file) {
this.file = file;
}
}
注意:一般如果資料超過了1m:就應該使用懶載入;
-------------------------------------------------------
8.不和資料庫中的表中的欄位相對映的屬性建立:
a.在Person.java中新增欄位:這個欄位將不會出現在資料庫的表中
private String imagepath;
b.使用註解:
@Transient //該屬性不會對映到資料庫中的欄位
public String getImagepath() {
return imagepath;
}
-------------------------------------------------------