最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

第一種

? ? /**
? ? ?* ?通過(guò)年齡來(lái)查詢(xún)數(shù)據(jù)。
? ? ?* ?使用@Query來(lái)配置自己定義的SQL,后面的參數(shù)nativeQuery = true才是表明使用了原生的sql
? ? ?* ?如果不配置,默認(rèn)為false,那么將使用HQL查詢(xún)方式。
? ? ?*
? ? ?* @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)。

查詢(xún)語(yǔ)言,這是持久化操作中很重要的一個(gè)方面,通過(guò)面向?qū)ο蠖敲嫦驍?shù)據(jù)庫(kù)的查詢(xún)語(yǔ)言查詢(xún)數(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í)體類(lèi)的id來(lái)更新數(shù)據(jù)庫(kù)數(shù)據(jù),這時(shí)實(shí)體類(lèi)變成了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)系,程序員不需要編寫(xiě)復(fù)雜的SQL語(yǔ)句,直接操作Java對(duì)象即可,從而大大降低了代碼量,也使程序員更加專(zhuān)注于業(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è)字段的類(lèi)型是什么、表與表之間什么關(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的英文全稱(chēng)是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)之一,因此任何聲稱(chēng)符合 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 類(lèi)一樣簡(jiǎn)單,沒(méi)有任何的約束和限制,只需要使用 javax.persistence.Entity進(jìn)行注釋?zhuān)籎PA的框架和接口也都非常簡(jiǎn)單,沒(méi)有太多特別的規(guī)則和設(shè)計(jì)模式的要求,開(kāi)發(fā)者可以很容易的 掌握。JPA基于非侵入式原則設(shè)計(jì),因此可以很容易的和其它框架或者容器集成。

可媲美JDBC的查詢(xún)能力

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

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

JPA 中能夠支持面向?qū)ο蟮母呒?jí)特性,如類(lèi)之間的繼承、多態(tài)和類(lè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ù)雜的查詢(xún)。JPQL是JPA專(zhuān)用的查詢(xún)語(yǔ)言,是類(lèi)似于SQL的面向?qū)ο蟮牟樵?xún)語(yǔ)言。

使用簡(jiǎn)單。JPA使用注釋?zhuān)ˋnnotation)定義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)文章

  • Springmvc實(shí)現(xiàn)文件上傳

    Springmvc實(shí)現(xiàn)文件上傳

    這篇文章主要為大家詳細(xì)介紹了Springmvc實(shí)現(xiàn)文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • flatten-maven-plugin使用教程

    flatten-maven-plugin使用教程

    這篇文章主要介紹了flatten-maven-plugin使用,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • java 判斷一個(gè)數(shù)組中的數(shù)值是否連續(xù)相鄰的方法

    java 判斷一個(gè)數(shù)組中的數(shù)值是否連續(xù)相鄰的方法

    下面小編就為大家分享一篇java 判斷一個(gè)數(shù)組中的數(shù)值是否連續(xù)相鄰的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • SpringBoot常見(jiàn)錯(cuò)誤圖文總結(jié)

    SpringBoot常見(jiàn)錯(cuò)誤圖文總結(jié)

    最近在使用idea+Springboot開(kāi)發(fā)項(xiàng)目中遇到一些問(wèn)題,這篇文章主要給大家介紹了關(guān)于SpringBoot常見(jiàn)錯(cuò)誤總結(jié)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • QQ好友列表樹(shù)形列表java代碼實(shí)現(xiàn)代碼

    QQ好友列表樹(shù)形列表java代碼實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了QQ好友列表樹(shù)形列表簡(jiǎn)單實(shí)現(xiàn)方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Struts2+Hibernate實(shí)現(xiàn)數(shù)據(jù)分頁(yè)的方法

    Struts2+Hibernate實(shí)現(xiàn)數(shù)據(jù)分頁(yè)的方法

    這篇文章主要介紹了Struts2+Hibernate實(shí)現(xiàn)數(shù)據(jù)分頁(yè)的方法,結(jié)合實(shí)例形式分析了Struts2結(jié)合Hibernate實(shí)現(xiàn)數(shù)據(jù)分頁(yè)的原理,步驟與相關(guān)實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2016-03-03
  • Maven打包上云的實(shí)現(xiàn)步驟

    Maven打包上云的實(shí)現(xiàn)步驟

    本文主要介紹了Maven打包上云的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 基于Java實(shí)現(xiàn)計(jì)數(shù)排序,桶排序和基數(shù)排序

    基于Java實(shí)現(xiàn)計(jì)數(shù)排序,桶排序和基數(shù)排序

    這篇文章主要為大家詳細(xì)介紹了計(jì)數(shù)排序,桶排序和基數(shù)排序的多種語(yǔ)言的實(shí)現(xiàn)(JavaScript、Python、Go語(yǔ)言、Java),感興趣的小伙伴可以了解一下
    2022-12-12
  • SpringBoot依賴(lài)及其作用分析

    SpringBoot依賴(lài)及其作用分析

    這篇文章主要介紹了SpringBoot依賴(lài)及其作用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • IDEA配置MAVEN本地倉(cāng)庫(kù)的實(shí)現(xiàn)步驟

    IDEA配置MAVEN本地倉(cāng)庫(kù)的實(shí)現(xiàn)步驟

    本文主要介紹了IDEA配置MAVEN本地倉(cāng)庫(kù)的實(shí)現(xiàn)步驟,將詳細(xì)介紹如何配置Maven環(huán)境變量,Maven配置文件,可以輕松地設(shè)置和配置MAVEN本地倉(cāng)庫(kù),以便在IDEA中享受更高效的開(kāi)發(fā)體驗(yàn)
    2023-08-08

最新評(píng)論

随州市| 潼南县| 海口市| 邢台市| 永济市| 恩平市| 江阴市| 印江| 林州市| 临泽县| 南充市| 房产| 买车| 邹平县| 东丽区| 中宁县| 宝坻区| 佛山市| 双柏县| 梨树县| 邯郸县| 额尔古纳市| 嵊州市| 万安县| 广昌县| 登封市| 黑水县| 崇仁县| 宝鸡市| 浑源县| 西昌市| 东宁县| 修文县| 民丰县| 虞城县| 靖州| 夹江县| 庄河市| 通城县| 康定县| 巴马|