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

Spring Data JPA中findOne()和getOne()用法

 更新時間:2023年11月30日 15:08:41   作者:閆二白  
這篇文章主要介紹了Spring Data JPA中findOne()和getOne()的用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

引言

最近在使用SpringDataJPA做CRUD功能,在做到需要查詢單個的功能的時候,

我們發(fā)現(xiàn)SpringDataJPA為我們提供了兩種辦法findOne() 和 getOne(),

那我們該如何選擇呢,他們之間的區(qū)別又是什么呢,下面我們來總結(jié)一下。

findOne() 和 getOne()的區(qū)別

首先我們看一下Spring官方對他們的解釋

/**   
 *    Retrieves an entity by its id.
 *    @param id must not be {@literal null}.
 *    @return the entity with the given id or {@literal null} if none found
 *    @throws IllegalArgumentException if {@code id} is {@literal null}
  * /

      T findOne(ID id);
/**
 *  Returns a reference to the entity with the given identifier.
 * 
 *  @param id must not be {@literal null}.
 *  @return a reference to the entity with the given identifier.
 *  @see EntityManager#getReference(Class, Object)
 */
  
    T getOne(ID id);

findOne:當(dāng)我查詢一個不存在的id數(shù)據(jù)時,返回的值是null.


在這里插入圖片描述
 

getOne: return 對具有給定標(biāo)識符的實體的引用。

當(dāng)我查詢一個不存在的id數(shù)據(jù)時,直接拋出異常,因為它返回的是一個引用,簡單點說就是一個代理對象。


在這里插入圖片描述

我們知道SpringDataJPA底層默認(rèn)使用Hibernate,hibernate對于load方法認(rèn)為該數(shù)據(jù)在數(shù)據(jù)庫中一定存在,可以放心的使用代理來延遲加載,如果在使用過程中發(fā)現(xiàn)了問題,只能拋異常;

而對于get方法,hibernate一定要獲取到真實的數(shù)據(jù),否則返回null。

所以我們可以吧findOne() 當(dāng)成hibernate中g(shù)et方法,getOne()當(dāng)成hibernate中l(wèi)oad方法來記憶。。。。。

補充

以前我們使用Spring Data Jpa 的查詢單個的時候,可以使用findOne()方法根據(jù)id查詢。

但是在2.0.5以后,不能用來當(dāng)作根據(jù)id查詢了。2.0.5以后變成了findById(id).get()來查詢了。

2.0.5版本以前的CrudRepository類是這樣的:

@NoRepositoryBean
public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> {
    <S extends T> S save(S var1);

    <S extends T> Iterable<S> save(Iterable<S> var1);

    T findOne(ID var1);

    boolean exists(ID var1);

    Iterable<T> findAll();

    Iterable<T> findAll(Iterable<ID> var1);

    long count();

    void delete(ID var1);

    void delete(T var1);

    void delete(Iterable<? extends T> var1);

    void deleteAll();
}

2.0.5版本以后的CrudRepository類是這樣的:

@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
    <S extends T> S save(S var1);

    <S extends T> Iterable<S> saveAll(Iterable<S> var1);

    Optional<T> findById(ID var1);

    boolean existsById(ID var1);

    Iterable<T> findAll();

    Iterable<T> findAllById(Iterable<ID> var1);

    long count();

    void deleteById(ID var1);

    void delete(T var1);

    void deleteAll(Iterable<? extends T> var1);

    void deleteAll();
}

總結(jié)

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

相關(guān)文章

  • Java classloader類加載器的實現(xiàn)

    Java classloader類加載器的實現(xiàn)

    本文介紹了Java類加載器的繼承性和隔離性,類加載器分為四個層級:Bootstrap、Extension、System和Plugin,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-12-12
  • Java 單元測試之Mockito 模擬靜態(tài)方法與私有方法最佳實踐

    Java 單元測試之Mockito 模擬靜態(tài)方法與私有方法最佳實踐

    本文將深入探討如何使用 Mockito 來模擬靜態(tài)方法和私有方法,結(jié)合大量實戰(zhàn)代碼示例,帶你突破傳統(tǒng)單元測試的邊界,寫出更徹底、更獨立、更具可讀性的測試用例,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • Restful API中的錯誤處理方法

    Restful API中的錯誤處理方法

    這篇文章主要給大家介紹了關(guān)于Restful API中錯誤處理方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • spring boot補習(xí)系列之幾種scope詳解

    spring boot補習(xí)系列之幾種scope詳解

    這篇文章主要給大家介紹了關(guān)于spring boot補習(xí)系列之幾種scope的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 解決maven父子工程install的時候排除某些子模塊,讓子模塊不install問題

    解決maven父子工程install的時候排除某些子模塊,讓子模塊不install問題

    在Maven父子工程中,如果希望某個子模塊不被安裝到本地倉庫,可以在該子模塊的`pom.xml`文件中添加以下配置: ```xml ... org.apache.maven.plugins maven-install-plugin 2.5.2 true
    2024-12-12
  • SpringBoot yaml語法與JRS303校驗超詳細(xì)講解

    SpringBoot yaml語法與JRS303校驗超詳細(xì)講解

    YAML 是 “YAML Ain’t Markup Language”(YAML 不是一種標(biāo)記語言)的遞歸縮寫。在開發(fā)的這種語言時,YAML 的意思其實是:“Yet Another Markup Language”(仍是一種標(biāo)記語言),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • MyBatis通用Mapper實現(xiàn)原理及相關(guān)內(nèi)容

    MyBatis通用Mapper實現(xiàn)原理及相關(guān)內(nèi)容

    今天小編就為大家分享一篇關(guān)于MyBatis通用Mapper實現(xiàn)原理及相關(guān)內(nèi)容,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Spring中的BeanFactory與FactoryBean區(qū)別詳解

    Spring中的BeanFactory與FactoryBean區(qū)別詳解

    這篇文章主要介紹了Spring中的BeanFactory與FactoryBean區(qū)別詳解,BeanFactory是一個接口,它是spring中的一個工廠,FactoryBean也是一個接口,實現(xiàn)了3個方法,通過重寫其中方法自定義生成bean,需要的朋友可以參考下
    2024-01-01
  • SpringBoot+Maven 多模塊項目的構(gòu)建、運行、打包實戰(zhàn)

    SpringBoot+Maven 多模塊項目的構(gòu)建、運行、打包實戰(zhàn)

    這篇文章主要介紹了SpringBoot+Maven 多模塊項目的構(gòu)建、運行、打包實戰(zhàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Spark集群框架的搭建與入門

    Spark集群框架的搭建與入門

    Spark是專為大規(guī)模數(shù)據(jù)處理而設(shè)計的,基于內(nèi)存快速通用,可擴展的集群計算引擎,實現(xiàn)了高效的DAG執(zhí)行引擎,可以通過基于內(nèi)存來高效處理數(shù)據(jù)流,運算速度相比于MapReduce得到了顯著的提高。
    2021-06-06

最新評論

渭南市| 通江县| 旌德县| 广德县| 衡阳县| 额济纳旗| 永年县| 本溪市| 通渭县| 佛冈县| 黄骅市| 南城县| 上林县| 临城县| 台东市| 武陟县| 浪卡子县| 屏南县| 康马县| 威信县| 恩平市| 双柏县| 鹿泉市| 宜川县| 家居| 水城县| 武陟县| 山西省| 锦州市| 平果县| 武邑县| 咸宁市| 闽侯县| 乡城县| 佳木斯市| 南开区| 宜宾市| 调兵山市| 海丰县| 霍邱县| 新龙县|