001-jpa基本概念以及基礎註解
一、什麽是JPA
JPA是Java Persistence API的簡稱,中文名Java持久層API,是JDK 5.0註解或XML描述對象-關系表的映射關系,並將運行期的實體對象持久化到數據庫中。
Sun引入新的JPA ORM規範出於兩個原因:其一,簡化現有Java EE和Java SE應用開發工作;其二,Sun希望整合ORM技術,實現天下歸一。
1.1、JPA的思想
JPA的總體思想和現有Hibernate、TopLink、JDO等ORM框架大體一致。總的來說,JPA包括以下3方面的技術:
ORM映射元數據
JPA支持XML和JDK5.0註解兩種元數據的形式,元數據描述對象和表之間的映射關系,框架據此將實體對象持久化到數據庫表中;
用來操作實體對象,執行CRUD操作,框架在後臺替代我們完成所有的事情,開發者從繁瑣的JDBC和SQL代碼中解脫出來。
查詢語言
這是持久化操作中很重要的一個方面,通過面向對象而非面向數據庫的查詢語言查詢數據,避免程序的SQL語句緊密耦合。
1.2、優勢
JPA框架中支持大數據集、事務、並發等容器級事務,這使得 JPA 超越了簡單持久化框架的局限,在企業應用發揮更大的作用。
JPA的主要目標之一就是提供更加簡單的編程模型:在JPA框架下創建實體和創建Java 類一樣簡單,沒有任何的約束和限制,只需要使用 javax.persistence.Entity進行註釋,JPA的框架和接口也都非常簡單,沒有太多特別的規則和設計模式的要求,開發者可以很容易地掌握。JPA基於非侵入式原則設計,因此可以很容易地和其它框架或者容器集成。
JPA的查詢語言是面向對象而非面向數據庫的,它以面向對象的自然語法構造查詢語句,可以看成是Hibernate HQL的等價物。JPA定義了獨特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一種擴展,它是針對實體的一種查詢語言,操作對象是實體,而不是關系數據庫的表,而且能夠支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能夠提供的高級查詢特性,甚至還能夠支持子查詢。
JPA 中能夠支持面向對象的高級特性,如類之間的繼承、多態和類之間的復雜關系,這樣的支持能夠讓開發者最大限度的使用面向對象的模型設計企業應用,而不需要自行處理這些特性在關系數據庫的持久化。
二、基本註解
2.1、依賴
需要的hibernate-jpa-2.1-api-1.0.0.Final.jar或pom,直接依賴或間接依賴
<dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.1-api</artifactId> <version>1.0.0.Final</version> </dependency>
2.2、註解
默認都是:javax.persistence.*
2.2.1、類註解
修飾類實體:@Entity,javax.persistence.Entity
name,表名
表註解:@Table
name表名【表映射】,catalog,schema,uniqueConstraints,indexes
2.2.2、字段屬性註解
主鍵ID:@Id;
主鍵策略:@GeneratedValue(strategy=GenerationType.AUTO) auto根據實際變化,默認可以省略;IDENTITY自增;SEQUENCE序列;TABLE表方式
列註解:@Column。name列名【字段映射】,unique唯一約束,nullable可空,insertable,updatable,columnDefinition,table,length長度,precision,scale
日期註解:@Temporal。TemporalType.Date;TemporalType.TIME;TemporalType.TIMESTAMP
枚舉:@Enumerated。EnumType.STRING枚舉字符串,EnumType.ORDINAL枚舉序號
默認值:直接在字段後加“=”值即可
大文本大字段:@Lob,應用在String類型上,對應數據庫為文本類型,應用Byte[]字節類型,對應數據庫Blob類型
非持久化字段:@Transient。默認字段都會被持久化,增加次註解不會被持久化
延遲加載:@Basic,fetch=FetchType.EAGER立即加載;fetch=FetchType.LAZY延遲加載按需加載,使用時候加載
001-jpa基本概念以及基礎註解