1. 程式人生 > >jpa和spring data jpa的理解

jpa和spring data jpa的理解

(1)、JPA介紹:

      JPA全稱為Java Persistence API ,Java持久化API是Sun公司在java EE 5規範中提出的Java持久化介面。JPA吸取了目前Java持久化技術的優點,旨在規範、簡化Java物件的持久化工作。使用JPA持久化物件,並不是依賴於某一個ORM框架。

     為什麼要使用JAP?
      在說為什麼要使用JPA之前,我們有必要了解為什麼要使用ORM技術。

ORM 是Object-Relation-Mapping,即物件關係影射技術,是物件持久化的核心。ORM是對JDBC的封裝,從而解決了JDBC的各種存在問題:

a) 繁瑣的程式碼問題

用JDBC的API程式設計訪問資料庫,程式碼量較大,特別是訪問欄位較多的表的時候,程式碼顯得繁瑣、累贅,容易出錯。例如:PreparedStatement pstmt=con.prepareStatment("insert into account value(?,?,?,?,?,?,?,?,?)");

ORM則建立了Java物件與資料庫物件之間的影射關係,程式設計師不需要編寫複雜的SQL語句,直接操作Java物件即可,從而大大降低了程式碼量,也使程式設計師更加專注於業務邏輯的實現。

b) 資料庫物件連線問題

關係資料物件之間,存在各種關係,包括1對1、1對多、多對1、多對多、級聯等。在資料庫物件更新的時候,採用JDBC程式設計,必須十分小心處理這些關係,以保證維持這些關係不會出現錯誤,而這個過程是一個很費時費力的過程。

ORM建立Java物件與資料庫物件關係影射的同時,也自動根據資料庫物件之間的關係建立Java物件的關係,並且提供了維持這些關係完整、有效的機制。

c) 系統架構問題

JDBC屬於資料訪問層,但是使用JDBC程式設計時,必須知道後臺是用什麼資料庫、有哪些表、各個表有有哪些欄位、各個欄位的型別是什麼、表與表之間什麼關係、建立了什麼索引等等與後臺資料庫相關的詳細資訊。

使用ORM技術,可以將資料庫層完全隱蔽,呈獻給程式設計師的只有Java的物件,程式設計師只需要根據業務邏輯的需要呼叫Java物件的Getter和 Setter方法,即可實現對後臺資料庫的操作,程式設計師不必知道後臺採用什麼資料庫、有哪些表、有什麼欄位、表與表之間有什麼關係。

d) 效能問題

採用JDBC程式設計,在很多時候存在效率低下的問題。

pstmt =conn.prepareStatement("insert into user_info values(?,?)");
       for (int i=0; i<1000; i++) {
          pstmt.setInt(1,i);
          pstmt.setString(2,"User"+i.toString());
          pstmt.executeUpdate();
       }

以上程式將向後臺數據庫傳送1000次SQL語句執行請求,執行效率較低。

採用ORM技術,ORM框架將根據具體資料庫操作需要,會自動延遲向後臺數據庫傳送SQL請求,ORM也可以根據實際情況,將資料庫訪問操作合成,儘量減少不必要的資料庫操作請求。

JPA是目前比較流行的一種ORM技術之一,所以他擁有ORM技術的各種特點,當然他還有自己的一些優勢:

1 標準化
  JPA 是 JCP 組織釋出的 Java EE 標準之一,因此任何聲稱符合 JPA 標準的框架都遵循同樣的架構,提供相同的訪問 API,這保證了基於JPA開發的企業應用能夠經過少量的修改就能夠在不同的JPA框架下執行。
2 對容器級特性的支援
  JPA 框架中支援大資料集、事務、併發等容器級事務,這使得 JPA 超越了簡單持久化框架的侷限,在企業應用發揮更大的作用。
3 簡單易用,整合方便
  JPA的主要目標之一就是提供更加簡單的程式設計模型:在JPA框架下建立實體和建立Java 類一樣簡單,沒有任何的約束和限制,只需要使用 javax.persistence.Entity進行註釋;JPA的框架和介面也都非常簡單,沒有太多特別的規則和設計模式的要求,開發者可以很容易的掌握。JPA基於非侵入式原則設計,因此可以很容易的和其它框架或者容器整合。
4 可媲美JDBC的查詢能力
  JPA的查詢語言是面向物件而非面向資料庫的,它以面向物件的自然語法構造查詢語句,可以看成是hibernate HQL的等價物。JPA定義了獨特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一種擴充套件,它是針對實體的一種查詢語言,操作物件是實體,而不是關係資料庫的表,而且能夠支援批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能夠提供的高階查詢特性,甚至還能夠支援子查詢。
5 支援面向物件的高階特性
  JPA 中能夠支援面向物件的高階特性,如類之間的繼承、多型和類之間的複雜關係,這樣的支援能夠讓開發者最大限度的使用面向物件的模型設計企業應用,而不需要自行處理這些特性在關係資料庫的持久化。

文章出處:http://blog.csdn.net/hmk2011/article/details/6289151

Spring Data JPA是什麼 由Spring提供的一個用於簡化JPA開發的框架。可以極大的簡化JPA的寫法,可以在幾乎不用寫實現的情況下,實現對資料的訪問和操作。 主要來看看Spring Data JPA提供的介面,也是Spring Data JPA的核心概念: 1:Repository:最頂層的介面,是一個空的介面,目的是為了統一所有Repository的型別,且能讓元件掃描的時候自動識別。 2:CrudRepository :是Repository的子介面,提供CRUD的功能 3:PagingAndSortingRepository:是CrudRepository的子介面,新增分頁和排序的功能 4:JpaRepository:是PagingAndSortingRepository的子介面,增加了一些實用的功能,比如:批量操作等。 5:JpaSpecificationExecutor:用來做負責查詢的介面 6:Specification:是Spring Data JPA提供的一個查詢規範,要做複雜的查詢,只需圍繞這個規範來設定查詢條件即可 使用@Query 可以在自定義的查詢方法上使用@Query來指定該方法要執行的查詢語句,比如: @Query("select o from UserModel o where o.uuid=?1") public List<UserModel> findByUuidOrAge(int uuid); 注意: 1:方法的引數個數必須和@Query裡面需要的引數個數一致 2:如果是like,後面的引數需要前面或者後面加“%”,比如下面都對: @Query("select o from UserModel o where o.name like ?1%") public List<UserModel> findByUuidOrAge(String name); @Query("select o from UserModel o where o.name like %?1") public List<UserModel> findByUuidOrAge(String name); @Query("select o from UserModel o where o.name like %?1%") public List<UserModel> findByUuidOrAge(String name); 當然,這樣在傳遞引數值的時候就可以不加‘%’了,當然加了也不會錯 n還可以使用@Query來指定本地查詢,只要設定nativeQuery為true,比如: @Query(value="select * from tbl_user where name like %?1" ,nativeQuery=true) public List<UserModel> findByUuidOrAge(String name); 注意:當前版本的本地查詢不支援翻頁和動態的排序 使用命名化引數,使用@Param即可,比如: @Query(value="select o from UserModel o where o.name like %:nn") public List<UserModel> findByUuidOrAge(@Param("nn") String name); 同樣支援更新類的Query語句,新增@Modifying即可,比如: @Modifying @Query(value="update UserModel o set o.name=:newName where o.name like %:nn") public int findByUuidOrAge(@Param("nn") String name,@Param("newName") String newName); 注意: 1:方法的返回值應該是int,表示更新語句所影響的行數 2:在呼叫的地方必須加事務,沒有事務不能正常執行

具體介紹:http://blog.csdn.net/z69183787/article/details/30265243

相關推薦

jpaspring data jpa理解

(1)、JPA介紹:       JPA全稱為Java Persistence API ,Java持久化API是Sun公司在java EE 5規範中提出的Java持久化介面。JPA吸取了目前Java持久化技術的優點,旨在規範、簡化Java物件的持久化工作。使用JPA持

簡述 JPASpring Data JPA 與 Hibernate

避免 down 應用開發 -m 面向 pda _id 簡寫 append 1.JPA是什麽?以及相關概述 JPA的是 Java Persistence API 的簡寫,是Sun官方提出的一種ORM規範! Sun提出此規範有2個原因: 1.簡化現有Java EE和Java

從簡單的JPASpring Data JPA

本文程式碼是基於 Hibernate EntityManager,讀者幾乎不用修改任何程式碼,便可以非常容易地切換到其他 JPA 框架,因為程式碼中使用到的都是 JPA 規範提供的介面 / 類,並沒有使用到框架本身的私有特性。示例主要涉及七個檔案,但是很清晰:業務層包含一個

[Spring Boot] Adding JPA and Spring Data JPA

strong bean generate repo class repos for findall frame JPA is just like a helper class for providing data for Controller, has metho

Spring Boot入門第二天:一個基於Spring Boot的Web應用,使用了Spring Data JPAFreemarker。

per pan let mysq 應用 posit ble host thead 今天打算從數據庫中取數據,並展示到視圖中。不多說,先上圖: 第一步:添加依賴。打開pom.xml文件,添加必要的依賴,完整代碼如下: <?xml version="1.0" enco

JPASpring Boot Data JPA 介紹

一、簡介 JPA,即Java Persistence API,是一種標準的技術,但不是一種框架,他可以讓你將物件對映到關係型資料庫中。 Spring Data JPA是Spring Data系列的一部分,可以輕鬆實現基於JPA的儲存庫。該模組處理對基於JPA的資料訪

SpringBoot | 第三十章:Spring-data-jpa的整合使用

前言 在前面的第九章:Mybatis-plus的整合和使用章節中,介紹了使用ORM框架mybatis-plus進行資料庫的訪問。今天,我們來簡單學習下如何使用spring-data-jpa進行資料庫的訪問。由於本人未使用過jpa,也是趁著寫博文的機會查閱了相關資料下,有錯誤的地方還望指出! 一點知識 何

SpringBoot第二講利用Spring Data JPA實現資料庫的訪問(二)_分頁JpaSpecificationExecutor介面介紹

我們繼續研究spring jpa data,首先看看分頁和排序的實現,在原來的程式碼中,我們如果希望實現分頁,首先得建立一個Pager的物件,在這個物件中記錄total(總數),totalPager(總頁數),pageSize(每頁多少條記錄),pageInde

SpringBoot第四講擴充套件封裝Spring Data JPA(一)_自定義Repository建立自己的BaseRepository

這一講主要介紹Spring Data JPA的封裝。和設計相關的東西都是仁者見仁,智者見智的事情,如果你有更好的封裝方案可以和我交流,互相學習。這一講會講如下一些內容 - 擴充套件Spring Data JPA實現自己的一些特殊方法 - 建立一個自己的Bas

Spring Data JPA Specification查詢、排序分頁

JPA提供了關鍵字查詢(如findByName),為資料操作提供了便利。同時提供了Specification的準則查詢方式,使我們可以更方便的進行復雜的條件查詢,包括排序和分頁等。新手做點記錄備忘。 1.我們自定義的介面類必須實現JpaSpecificationExecutor介面 publ

spring data jpa】帶有條件的查詢後分頁不帶條件查詢後分頁實現

一.不帶有動態條件的查詢 分頁的實現  例項程式碼: controller:返回的是Page<>物件 @Controller@RequestMapping(value = "/egg")  publicclass EggController {   @

Spring Data JPA註解@DynamicInsert@DynamicUpdate

Hibernate,JPA註解@DynamicInsert和@DynamicUpdate @DynamicInsert屬性:設定為true,設定為true,表示insert物件的時候,生成動態的insert語句,如果這個欄位的值是null就不會加入到inse

Spring Data Jpa 進行原生Sql 分頁條件查詢

因為業務的原因今天寫了一個原生的Spring Data jpa的分頁查詢 : 1 .進行封裝自己PageQuery: public class PageQuery { pub

spring data jpa執行updatedelete語句時報錯處理

之前專案中使用spring data jpa時,遇到刪除記錄的需求時,主要利用spring data中自帶的delete()方法處理,最近在dao層使用delete sql語句時報錯,程式碼如下: @Query(value = "delete parcel,parcel_

Spring Data JPA(1)--RepositoryCrudRepository介面

最近在學習Spring Data JPA的相關知識,感覺還是很不錯的,提供了很多方法,包括CRUD和分頁排序,基本能夠滿足現實的功能需求. 它一共提供了四個介面: Repository: 僅僅是一個標識,表明任何繼承它的均為倉庫介面類,方便Spring自動掃描識別 Cru

Spring data jpa的高階查詢的應用底層原理分析

spring data jpa的查詢 目前比較簡單的查詢: 三種查詢方案的寫法 固定引數查詢 interface XxxRepo implements JpaRepository<T,Long>{ EntityXxx findByNameAnd

Spring Data JPA 介紹使用

本文參考了Spring Data JPA官方文件,引用了部分文件的程式碼。 Spring Data JPA是Spring基於Hibernate開發的一個JPA框架。如果用過Hibernate或者MyBatis的話,就會知道物件關係對映(ORM)框架有多麼方便。

Spring data jpa儲存時間比當前時間少8小時,問題原因解決辦法

環境:java8、spring boot 、spring data jpa 解決方案 在連線url增加時區設定引數就OK了 jdbc:mysql://localhost/databas

spring-data-jpa原理探祕(2)-RepositoryQuery的用途分類

本系列的第二篇文章,主要講解在spring-data-jpa中佔有重要地位的RepositoryQuery介面的用途和分類。 首先我們看看RepositoryQuery介面極其子類的類圖 上圖很清晰的說明,RepositoryQuery介面包含SimpleJpaQuery,

Spring Data JPA關聯查詢@Query

示例:關聯查詢和@Query 建立持久化類 程式清單:/jpa/src/main/java/com/dwx/bean/Student.java package com.dwx.bean; import javax.persistence.Entity; import j