亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用JPA傳遞參數(shù)的方法

 更新時(shí)間:2022年06月10日 09:57:15   作者:一顆大大大蘿卜唄  
這篇文章主要介紹了使用JPA傳遞參數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

JPA傳遞參數(shù)的方法

第一種

? ? /**
? ? ?* ?通過(guò)年齡來(lái)查詢數(shù)據(jù)。
? ? ?* ?使用@Query來(lái)配置自己定義的SQL,后面的參數(shù)nativeQuery = true才是表明使用了原生的sql
? ? ?* ?如果不配置,默認(rèn)為false,那么將使用HQL查詢方式。
? ? ?*
? ? ?* @param age
? ? ?* @return
? ? ?*/
? ? @Query(value = "select * from t_user where t_age > :age", nativeQuery = true)
? ? List<UserEntity> listAgeMoreThan(@Param("age") Integer age);
}

第二種

@Query(value = "select * from t_user where t_age > ?1", nativeQuery = true)
List<UserEntity> listAgeMoreThan(Integer age);

淺談JPA優(yōu)缺點(diǎn)

一.JPA的理解

JPA的總體思想和現(xiàn)有hibernate、TopLink,JDO等ORM框架大體一致??偟膩?lái)說(shuō),JPA包括以下3方面的技術(shù):

ORM映射元數(shù)據(jù),JPA支持XML和JDK 5.0注解兩種元數(shù)據(jù)的形式,元數(shù)據(jù)描述對(duì)象和表之間的映射關(guān)系,框架據(jù)此將實(shí)體對(duì)象持久化到數(shù)據(jù)庫(kù)表中;

JPA的API,用來(lái)操作實(shí)體對(duì)象,執(zhí)行CRUD操作,框架在后臺(tái)替我們完成所有的事情,開(kāi)發(fā)者從繁瑣的JDBC和SQL代碼中解脫出來(lái)。

查詢語(yǔ)言,這是持久化操作中很重要的一個(gè)方面,通過(guò)面向?qū)ο蠖敲嫦驍?shù)據(jù)庫(kù)的查詢語(yǔ)言查詢數(shù)據(jù),避免程序的SQL語(yǔ)句緊密耦合。

二.JPA 實(shí)體生命周期理解和總結(jié)

  • New:瞬時(shí)對(duì)象,尚未有id,還未和Persistence Context建立關(guān)聯(lián)的對(duì)象。
  • Managed:持久化受管對(duì)象,有id值,已經(jīng)和Persistence Context建立了關(guān)聯(lián)的對(duì)象。
  • Datached:游離態(tài)離線對(duì)象,有id值,但沒(méi)有和Persistence Context建立關(guān)聯(lián)的對(duì)象。
  • Removed:刪除的對(duì)象,有id值,尚且和Persistence Context有關(guān)聯(lián),但是已經(jīng)準(zhǔn)備好從數(shù)據(jù)庫(kù)中刪除
  • Managed狀態(tài)下的數(shù)據(jù)保存,更新以及刪除數(shù)據(jù)下的Removed狀態(tài),數(shù)據(jù)都不會(huì)立即更新到數(shù)據(jù)庫(kù),只有當(dāng)你事務(wù)提交或者em.flush(),才會(huì)立即更新到數(shù)據(jù)庫(kù)。
  • Datached的狀態(tài),可以調(diào)用em.merge()方法,這個(gè)方法會(huì)根據(jù)實(shí)體類的id來(lái)更新數(shù)據(jù)庫(kù)數(shù)據(jù),這時(shí)實(shí)體類變成了Managed(托管)狀態(tài)。

三.為什么要使用JPA?

在說(shuō)為什么要使用JPA之前,我們有必要了解為什么要使用ORM技術(shù)。

ORM 是Object-Relation-Mapping,即對(duì)象關(guān)系影射技術(shù),是對(duì)象持久化的核心。ORM是對(duì)JDBC的封裝,從而解決了JDBC的各種存在問(wèn)題:

繁瑣的代碼問(wèn)題

用JDBC的API編程訪問(wèn)數(shù)據(jù)庫(kù),代碼量較大,特別是訪問(wèn)字段較多的表的時(shí)候,代碼顯得繁瑣、累贅,容易出錯(cuò)。例如:PreparedStatementpstmt=con.prepareStatment(“insert into accountvalue(?,?,?,?,?,?,?,?,?)”);

ORM則建立了Java對(duì)象與數(shù)據(jù)庫(kù)對(duì)象之間的影射關(guān)系,程序員不需要編寫復(fù)雜的SQL語(yǔ)句,直接操作Java對(duì)象即可,從而大大降低了代碼量,也使程序員更加專注于業(yè)務(wù)邏輯的實(shí)現(xiàn)。

數(shù)據(jù)庫(kù)對(duì)象連接問(wèn)題

關(guān)系數(shù)據(jù)對(duì)象之間,存在各種關(guān)系,包括1對(duì)1、1對(duì)多、多對(duì)1、多對(duì)多、級(jí)聯(lián)等。在數(shù)據(jù)庫(kù)對(duì)象更新的時(shí)候,采用JDBC編程,必須十分小心處理這些關(guān)系,以保證維持這些關(guān)系不會(huì)出現(xiàn)錯(cuò)誤,而這個(gè)過(guò)程是一個(gè)很費(fèi)時(shí)費(fèi)力的過(guò)程。

ORM建立Java對(duì)象與數(shù)據(jù)庫(kù)對(duì)象關(guān)系影射的同時(shí),也自動(dòng)根據(jù)數(shù)據(jù)庫(kù)對(duì)象之間的關(guān)系創(chuàng)建Java對(duì)象的關(guān)系,并且提供了維持這些關(guān)系完整、有效的機(jī)制。

系統(tǒng)架構(gòu)問(wèn)題

JDBC屬于數(shù)據(jù)訪問(wèn)層,但是使用JDBC編程時(shí),必須知道后臺(tái)是用什么數(shù)據(jù)庫(kù)、有哪些表、各個(gè)表有有哪些字段、各個(gè)字段的類型是什么、表與表之間什么關(guān)系、創(chuàng)建了什么索引等等與后臺(tái)數(shù)據(jù)庫(kù)相關(guān)的詳細(xì)信息。

使用ORM技術(shù),可以將數(shù)據(jù)庫(kù)層完全隱蔽,呈獻(xiàn)給程序員的只有Java的對(duì)象,程序員只需要根據(jù)業(yè)務(wù)邏輯的需要調(diào)用Java對(duì)象的Getter和 Setter方法,即可實(shí)現(xiàn)對(duì)后臺(tái)數(shù)據(jù)庫(kù)的操作,程序員不必知道后臺(tái)采用什么數(shù)據(jù)庫(kù)、有哪些表、有什么字段、表與表之間有什么關(guān)系。

性能問(wèn)題

采用JDBC編程,在很多時(shí)候存在效率低下的問(wèn)題。例如程序?qū)⑾蚝笈_(tái)數(shù)據(jù)庫(kù)發(fā)送1000次SQL語(yǔ)句執(zhí)行請(qǐng)求,運(yùn)行效率較低。

采用ORM技術(shù),ORM框架將根據(jù)具體數(shù)據(jù)庫(kù)操作需要,會(huì)自動(dòng)延遲向后臺(tái)數(shù)據(jù)庫(kù)發(fā)送SQL請(qǐng)求,ORM也可以根據(jù)實(shí)際情況,將數(shù)據(jù)庫(kù)訪問(wèn)操作合成,盡量減少不必要的數(shù)據(jù)庫(kù)操作請(qǐng)求。

JPA的作用

JPA的英文全稱是Java PersistenceAPI, 目的是給Java開(kāi)發(fā)者提供對(duì)象關(guān)系映射工具用于在Java應(yīng)用程序開(kāi)發(fā)中來(lái)管理關(guān)系數(shù)據(jù)(RDBMS)。如下特點(diǎn):

標(biāo)準(zhǔn)化

JPA 是 JCP 組織發(fā)布的 Java EE 標(biāo)準(zhǔn)之一,因此任何聲稱符合 JPA 標(biāo)準(zhǔn)的框架都遵循同樣的架構(gòu),提供相同的訪問(wèn) API,這保證了基于JPA開(kāi)發(fā)的企業(yè)應(yīng)用能夠經(jīng)過(guò)少量的修改就能夠在不同的JPA框架下運(yùn)行。

對(duì)容器級(jí)特性的支持

JPA 框架中支持大數(shù)據(jù)集、事務(wù)、并發(fā)等容器級(jí)事務(wù),這使得 JPA 超越了簡(jiǎn)單持久化框架的局限,在企業(yè)應(yīng)用發(fā)揮更大的作用。

簡(jiǎn)單易用,集成方便

JPA的主要目標(biāo)之一就是提供更加簡(jiǎn)單的編程模型:在JPA框架下創(chuàng)建實(shí)體和創(chuàng)建Java 類一樣簡(jiǎn)單,沒(méi)有任何的約束和限制,只需要使用 javax.persistence.Entity進(jìn)行注釋;JPA的框架和接口也都非常簡(jiǎn)單,沒(méi)有太多特別的規(guī)則和設(shè)計(jì)模式的要求,開(kāi)發(fā)者可以很容易的 掌握。JPA基于非侵入式原則設(shè)計(jì),因此可以很容易的和其它框架或者容器集成。

可媲美JDBC的查詢能力

JPA的查詢語(yǔ)言是面向?qū)ο蠖敲嫦驍?shù)據(jù)庫(kù)的,它以面向?qū)ο蟮淖匀徽Z(yǔ)法構(gòu)造查詢語(yǔ)句,可以看成 是Hibernate HQL的等價(jià)物。JPA定義了獨(dú)特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一種擴(kuò)展,它是針對(duì)實(shí)體的一種查詢語(yǔ)言,操作對(duì)象是實(shí)體,而不是關(guān)系數(shù)據(jù)庫(kù)的表,而且能夠支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能夠提供的高級(jí)查詢特性,甚至還能夠支持子查詢。

支持面向?qū)ο蟮母呒?jí)特性

JPA 中能夠支持面向?qū)ο蟮母呒?jí)特性,如類之間的繼承、多態(tài)和類之間的復(fù)雜關(guān)系,這樣的支持能夠讓開(kāi)發(fā)者最大限度的使用面向?qū)ο蟮哪P驮O(shè)計(jì)企業(yè)應(yīng)用,而不需要自行處理這些特性在關(guān)系數(shù)據(jù)庫(kù)的持久化。

JPA優(yōu)勢(shì)

可持久化Java對(duì)象。JPA能夠直接持久化復(fù)雜的Java對(duì)象,并能夠使用JPQL語(yǔ)言進(jìn)行復(fù)雜的查詢。JPQL是JPA專用的查詢語(yǔ)言,是類似于SQL的面向?qū)ο蟮牟樵冋Z(yǔ)言。

使用簡(jiǎn)單。JPA使用注釋(Annotation)定義Java對(duì)象與關(guān)系數(shù)據(jù)庫(kù)之間的映射,而傳統(tǒng)的ORM多使用xml配置文件。JPA使用起來(lái)比ORM要方便。使用JPA不用關(guān)注底層使用什么數(shù)據(jù)庫(kù)。

規(guī)范標(biāo)準(zhǔn)化。JPA是JCP組織發(fā)布的,是Java官方規(guī)定的統(tǒng)一的API。目前已經(jīng)有多種框架實(shí)現(xiàn)JPA標(biāo)準(zhǔn)。使用了JPA的系統(tǒng)可以自由選擇遵循JPA標(biāo)準(zhǔn)的框架,并能夠自由更換。

事務(wù)性、大數(shù)據(jù)量。JPA底層使用關(guān)系數(shù)據(jù)庫(kù)進(jìn)行存儲(chǔ),因此具備關(guān)系數(shù)據(jù)庫(kù)的特點(diǎn),例如事務(wù)性、數(shù)據(jù)完整性、并發(fā)訪問(wèn)、大數(shù)據(jù)量等。

與其他持久化技術(shù)相比,JPA有很大的技術(shù)優(yōu)勢(shì)。表列出了JPA與其他持久化技術(shù)的比較。

JPA的劣勢(shì)

由于非常新,JPA 規(guī)范可能還需要進(jìn)過(guò)重要發(fā)展才會(huì)變得很穩(wěn)定。

JPA 是一個(gè)規(guī)范而不是一個(gè)產(chǎn)品。需要提供商提供一個(gè)實(shí)施,才能獲得這些基于標(biāo)準(zhǔn)的 API 的優(yōu)勢(shì)。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實(shí)現(xiàn)線程的暫停和恢復(fù)的示例詳解

    Java實(shí)現(xiàn)線程的暫停和恢復(fù)的示例詳解

    這幾天的項(xiàng)目中,客戶給了個(gè)需求,希望我可以開(kāi)啟一個(gè)任務(wù),想什么時(shí)候暫停就什么時(shí)候暫停,想什么時(shí)候開(kāi)始就什么時(shí)候開(kāi)始,所以本文小編給大家介紹了Java實(shí)現(xiàn)線程的暫停和恢復(fù)的示例,需要的朋友可以參考下
    2023-11-11
  • JavaCV實(shí)現(xiàn)人臉檢測(cè)功能

    JavaCV實(shí)現(xiàn)人臉檢測(cè)功能

    這篇文章主要為大家詳細(xì)介紹了JavaCV實(shí)現(xiàn)人臉檢測(cè)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Intellij idea熱部署插件JRebel的使用

    Intellij idea熱部署插件JRebel的使用

    這篇文章主要介紹了Intellij idea熱部署插件JRebel的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 設(shè)置JavaScript自動(dòng)提示-Eclipse/MyEclipse

    設(shè)置JavaScript自動(dòng)提示-Eclipse/MyEclipse

    自動(dòng)提示需要2個(gè)組件,分別是:ext-4.0.2a.jsb2||spket-1.6.16.jar,需要的朋友可以參考下
    2016-05-05
  • 解決mybatis使用char類型字段查詢oracle數(shù)據(jù)庫(kù)時(shí)結(jié)果返回null問(wèn)題

    解決mybatis使用char類型字段查詢oracle數(shù)據(jù)庫(kù)時(shí)結(jié)果返回null問(wèn)題

    這篇文章主要介紹了mybatis使用char類型字段查詢oracle數(shù)據(jù)庫(kù)時(shí)結(jié)果返回null問(wèn)題的解決方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • Java實(shí)現(xiàn)將文件或者文件夾壓縮成zip的詳細(xì)代碼

    Java實(shí)現(xiàn)將文件或者文件夾壓縮成zip的詳細(xì)代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)將文件或者文件夾壓縮成zip的詳細(xì)代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • Java內(nèi)存模型之重排序的相關(guān)知識(shí)總結(jié)

    Java內(nèi)存模型之重排序的相關(guān)知識(shí)總結(jié)

    重排序是指編譯器和處理器為了優(yōu)化性能而對(duì)指令序列進(jìn)行重新排序的一種手段,文中詳細(xì)介紹了Java重排序的相關(guān)知識(shí),需要的朋友可以參考下
    2021-06-06
  • Spring Boot集成 Spring Boot Admin 監(jiān)控

    Spring Boot集成 Spring Boot Admin 監(jiān)控

    這篇文章主要介紹了Spring Boot集成 Spring Boot Admin 監(jiān)控,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • java獲取手機(jī)已安裝APK的簽名摘要

    java獲取手機(jī)已安裝APK的簽名摘要

    這篇文章主要介紹了java獲取手機(jī)已安裝APK的簽名摘要的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • Java十分鐘精通類?封裝?繼承

    Java十分鐘精通類?封裝?繼承

    基礎(chǔ)不牢地動(dòng)山搖,類、封裝、繼承是我們?cè)趯W(xué)習(xí)基礎(chǔ)時(shí)必然要碰到的知識(shí)點(diǎn),讓我們一起來(lái)學(xué)習(xí)或回顧一下,感興趣的伙伴來(lái)看看吧
    2022-03-03

最新評(píng)論