一、ORM概述
ORM(Object-Relational Mapping) 表示對象關系映射。在面向對象的軟件開發中,通過ORM,就可以把對象映射到關系型數據庫中。只要有一套程序能夠做到建立對象與數據庫的關聯,操作對象就可以直接操作數據庫數據,就可以說這套程序實現了ORM對象關系映射
簡單的說:ORM就是建立實體類和數據庫表之間的關系,從而達到操作實體類就相當于操作數據庫表的目的。
1.1 為什么使用ORM
當實現一個應用程序時(不使用O/R Mapping),我們可能會寫特別多數據訪問層的代碼,從數據庫保存數據、修改數據、刪除數據,而這些代碼都是重復的。而使用ORM則會大大減少重復性代碼。對象關系映射(Object Relational Mapping,簡稱ORM),主要實現程序對象到關系數據庫數據的映射。
1.2 常見ORM框架
常見的orm框架:Mybatis(ibatis)、Hibernate、Jpa
二、hibernate與JPA的概述
2.1 hibernate概述
Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,它將POJO與數據庫表建立映射關系,是一個全自動的orm框架,hibernate可以自動生成SQL語句,自動執行,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。
2.2 JPA概述
JPA的全稱是Java Persistence API, 即Java 持久化API,是SUN公司推出的一套基于ORM的規范,內部是由一系列的接口和抽象類構成。
JPA通過JDK 5.0注解描述對象-關系表的映射關系,并將運行期的實體對象持久化到數據庫中。
2.3 JPA的優勢
1. 標準化
JPA 是 JCP 組織發布的 Java EE 標準之一,因此任何聲稱符合 JPA 標準的框架都遵循同樣的架構,提供相同的訪問API,這保證了基于JPA開發的企業應用能夠經過少量的修改就能夠在不同的JPA框架下運行。
2. 容器級特性的支持
JPA框架中支持大數據集、事務、并發等容器級事務,這使得 JPA 超越了簡單持久化框架的局限,在企業應用發揮更大的作用。
3. 簡單方便
JPA的主要目標之一就是提供更加簡單的編程模型:在JPA框架下創建實體和創建Java 類一樣簡單,沒有任何的約束和限制,只需要使用 javax.persistence.Entity進行注釋,JPA的框架和接口也都非常簡單,沒有太多特別的規則和設計模式的要求,開發者可以很容易的掌握。JPA基于非侵入式原則設計,因此可以很容易的和其它框架或者容器集成
4. 查詢能力
JPA的查詢語言是面向對象而非面向數據庫的,它以面向對象的自然語法構造查詢語句,可以看成是Hibernate HQL的等價物。JPA定義了獨特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一種擴展,它是針對實體的一種查詢語言,操作對象是實體,而不是關系數據庫的表,而且能夠支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能夠提供的高級查詢特性,甚至還能夠支持子查詢。
5. 高級特性
JPA 中能夠支持面向對象的高級特性,如類之間的繼承、多態和類之間的復雜關系,這樣的支持能夠讓開發者最大限度的使用面向對象的模型設計企業應用,而不需要自行處理這些特性在關系數據庫的持久化。
2.4 JPA與hibernate的關系
JPA規范本質上就是一種ORM規范,注意不是ORM框架——因為JPA并未提供ORM實現,它只是制訂了一些規范,提供了一些編程的API接口,但具體實現則由服務廠商來提供實現。
JPA和Hibernate的關系就像JDBC和JDBC驅動的關系,JPA是規范,Hibernate除了作為ORM框架之外,它也是一種JPA實現。JPA怎么取代Hibernate呢?JDBC規范可以驅動底層數據庫嗎?答案是否定的,也就是說,如果使用JPA規范進行數據庫操作,底層需要hibernate作為其實現類完成數據持久化工作。
三、JPA的入門案例
3.1 需求介紹
實現的功能是保存一個客戶到數據庫的客戶表中。
3.2 開發包介紹
由于JPA是sun公司制定的API規范,所以我們不需要導入額外的JPA相關的jar包,只需要導入JPA的提供商的jar包。我們選擇Hibernate作為JPA的提供商,所以需要導入Hibernate的相關jar包。
Hibernate的下載網址:
http://sourceforge.net/projects/hibernate/files/hibernate-orm/5.0.7.Final/
3.3 搭建開發環境
3.3.1 創建maven工程導入坐標
3.3.2 創建客戶的數據庫表和客戶的實體類
3.3.2.1 創建客戶的數據庫表
3.3.2.2 創建客戶的實體類
3.3.2.3 編寫實體類和數據庫表的映射配置
在實體類上使用JPA注解的形式配置映射關系
3.3.2.4 常用注解的說明
@Entity
作用:指定當前類是實體類。
@Table
作用:指定實體類和表之間的對應關系。
屬性:
name:指定數據庫表的名稱
@Id
作用:指定當前字段是主鍵。
@GeneratedValue
作用:指定主鍵的生成方式。。
屬性:
strategy :指定主鍵生成策略。
@Column
作用:指定實體類屬性和數據庫表之間的對應關系
屬性:
name:指定數據庫表的列名稱。
unique:是否唯一
nullable:是否可以為空
inrttable:是否可以插入
updateable:是否可以更新
columnDefinition: 定義建表時創建此列的DDL
condaryTable: 從表名。如果此列不建在主表上(默認建在主表),該屬性定義該列所在從表的名字
3.3.3 配置JPA的核心配置文件
在java工程的src路徑下創建一個名為META-INF的文件夾,在此文件夾下創建一個名為persistence.xml的配置文件
3.4 實現保存操作
本文發布于:2023-02-28 21:00:00,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/167771469195952.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:persistence.xml.doc
本文 PDF 下載地址:persistence.xml.pdf
| 留言與評論(共有 0 條評論) |