1. 程式人生 > >JPA學習筆記---JPA實體Bean的建立---連結上一個博文:對實體Bean中屬性進行操作:儲存日期型別,設定欄位的長度,名字,是否為空,可以宣告列舉欄位;可以存放二進位制資料,可以存放

JPA學習筆記---JPA實體Bean的建立---連結上一個博文:對實體Bean中屬性進行操作:儲存日期型別,設定欄位的長度,名字,是否為空,可以宣告列舉欄位;可以存放二進位制資料,可以存放

3.給上述生成的那個name欄位:更改資料庫中的欄位名,是否為空,欄位長度的設定,只需要
  在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;
 
[email protected]
//說明欄位是大文字資料
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;
}
-------------------------------------------------------

相關推薦

JPA學習筆記---JPA實體Bean建立---連結一個:實體Bean屬性進行操作:儲存日期型別,設定長度,名字,是否,可以宣告列舉;可以存放二進位制資料,可以存放

3.給上述生成的那個name欄位:更改資料庫中的欄位名,是否為空,欄位長度的設定,只需要   在Person.java檔案中,加上@Column(length=10,nullable=false,name="productname")//設定欄位的長度public Stri

JPA學習筆記---JPA資料操作:增加,刪除,修改,獲取,使用JPQL進行查詢

JPA學習筆記---JPA資料的操作:增加,刪除,修改,獲取,使用JPOL進行查詢 創夢技術交流平臺:資源下載,技術交流,網路賺錢: 交流qq群:1群:248318056 2群:251572072 技術交流平臺:cre.iqee.cn 博文相關程式碼資源下載地址:cre.i

JPA學習筆記-EJB-05JPA實體物件狀態和實體物件的高階操作--2(實體監聽器)

1.      實體監聽器的使用 在增、刪、改操作之前、和之後都可以新增監聽器,來監視物件CURD的操作狀態或日誌寫入。類似於AOP的思想,監聽器方法在準備執行增、刪、改或者執行完增、刪、改之後想做一些自己的操作,那麼監聽器是一個不錯的選擇,當然使用Spring的AOP或者僅僅使用AspectJ在業務DAO

資料結構學習筆記——C++實現雙向迴圈連結串列模板類(超詳解)

定義了兩個標頭檔案分別放置結點類模板(Node.h)和雙鏈表模板(DoubleLinkList.h), 然後在原始檔的main函式中測試。 Node.h #pragma once # include <iostream> template <class

JPA學習筆記(5)——EntityManager相關

                     Persistence在之前的JPA學習筆記(2)——建立JPA專案,有使用到Persistence來建立EntityManagerFactory例項String persistenceUnitName = "jpa"; EntityManagerFactory fa

JPA學習筆記(10)——對映雙向多多關聯關係

                     多對多關聯比如現在有兩個實體類:1. Product(商品)2. Category(類別)一個商品可以有多個類別,一個類別也可以有多個商品,這就形成了多對多的關係Productpackage com.jpa.helloworld2;import java.util.L

jpa學習筆記

[email protected] //工具方法. 不需要對映為資料表的一列. @Transientpublic String getInfo(){return "lastName: " + lastName + ", email: " + email;} [em

Spring-Data-JPA 學習筆記(一)

作者:zeng1994 一、spring-data-jpa的簡單介紹 SpringData : Spring 的一個子專案。用於簡化資料庫訪問,支援NoSQL 和 關係資料儲存。其主要目標是使資料庫的訪問變得方便快捷。 SpringData

SpringData JPA學習筆記(二)什繼承Repository接口

倉庫 相關 pri 方式 標記 訪問控制 text 完成 控制 Repository接口 1.Repository是一個空接口,即是一個標記接口。 2.若我們定義的接口繼承了Repository,則該接口會被IOC容器識別為一個Repository Bean,納入到IO

SpringData JPA學習筆記(二)什繼承Repository介面

Repository介面  1.Repository是一個空介面,即是一個標記介面。  2.若我們定義的介面繼承了Repository,則該介面會被IOC容器識別為一個Repository Bean,納入到IOC容器中,進而可以在該介面中定義滿足一定規範的方法。IOC容

JPA學習筆記(1)——什麼是JPA

JDBC jdbc是一組規範,是介面,由不同的資料庫廠商各自提供相應的實現類,打包成jar包,也就是所謂的資料庫驅動。而我們的java應用程式,只需要呼叫jdbc的介面就可以了。 而JPA是和jdbc類似的東西 什麼是JPA Java

JPA學習筆記(12)——JPQL

                        Query介面

JPA學習筆記(4)——使用Table策略來生成主鍵

                        在上一篇部落格中

JPA學習筆記(8)——對映雙向一對多關聯關係

                        雙向一對多關聯關

JPA學習筆記(11)——使用二級快取

一級快取 查詢兩次id為1的user User user1 = entityManager.find(User.class, 1); User user2 = entityManager.find(User.class, 1); 結果發現只調用了一次s

JPA學習筆記(13)——查詢快取

使用hibernate的查詢快取 執行以下程式碼: String jpql = "FROM User u WHERE u.id = ?"; Query query = entityManager

莫煩大大TensorFlow學習筆記(3)----建立神經網絡

nbsp 定義數據 學習筆記 variables ati 選擇 mea 有變 plus 1、def add_layer() 添加神經網絡層: import tensorflow as tf def add_layer( inputs, in_size, out_si

react學習筆記-git項目的建立及配置

wid 內容 好處 失敗 inf -- react gitconfig conf 1.下載安裝git (略) 2.配置gitconfig 配置內容:(主要是你的git的賬戶信息,提交命令的別名) 3.配置git公鑰(輸入$ ssh-keygen -t rsa -C ‘x

【深度學習筆記1】如何建立和確定模型正確性?如何優化模型?

近期看了吳恩達的一本書,關於如何建立和確定優化模型?裡面有個人認為需要學習的地方,故做筆記: 1.模型訓練一共有三個資料集:訓練集、開發集(驗證集)、測試集。開發集不能太小,通常在1000-10000,並且測試集屬於同一分佈;2.過擬合:訓練過程中開發集的準確率和測試集測試的準確率差別不大,若開發集比測試集

精通MVC 5 學習筆記 =========依賴項注入====建立鬆耦合元件

前46頁感覺都沒什麼用, 實體類效驗沒有卵用,日常用不到 Razor 輔助器 ,用的比較少 建立鬆耦合元件 我在這裡就用自己的話來寫一下我學到的東西: 首先有三個個體 : 介面 using System; using System.Collections.Generic;