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

JPA findById方法和getOne方法的區(qū)別說明

 更新時間:2021年08月14日 14:14:21   作者:Breeze丶4379  
這篇文章主要介紹了JPA findById方法和getOne方法的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。

findById方法和getOne方法區(qū)別

Jpa基礎(chǔ)的CRUD方法繼承自接口CrudRepository<T, ID>,包含以下方法:

<S extends T> S save(S entity);
<S extends T> Iterable<S> saveAll(Iterable<S> entities);
Optional<T> findById(ID id);
boolean existsById(ID id);
Iterable<T> findAll();
Iterable<T> findAllById(Iterable<ID> ids);
long count();
void deleteById(ID id);
void delete(T entity);
void deleteAll(Iterable<? extends T> entities);
void deleteAll();

getOne()方法是JpaRepository接口中定義的

源碼如下:

/**
 * Returns a reference to the entity with the given identifier. Depending on how the JPA persistence provider is
 * implemented this is very likely to always return an instance and throw an
 * {@link javax.persistence.EntityNotFoundException} on first access. Some of them will reject invalid identifiers
 * immediately.
 *
 * @param id must not be {@literal null}.
 * @return a reference to the entity with the given identifier.
 * @see EntityManager#getReference(Class, Object) for details on when an exception is thrown.
 */
T getOne(ID id);

網(wǎng)上找的源碼:

public T getOne(ID id) {
    Assert.notNull(id, "The given id must not be null!");
    return this.em.getReference(this.getDomainClass(), id);
}

由getOne方法的源碼可見,getOne方法會返回一個和給定id匹配的實體的引用,方法實際是調(diào)用getReference方法,也就是說加載策略是延遲加載,直到調(diào)用這個對象的時候才真正從數(shù)據(jù)庫中進行查詢(x_x)。

再看findById()方法

public Optional<T> findById(ID id) {
    Assert.notNull(id, "The given id must not be null!");
    Class<T> domainType = this.getDomainClass();
    if (this.metadata == null) {
        return Optional.ofNullable(this.em.find(domainType, id));
    } else {
        LockModeType type = this.metadata.getLockModeType();
        Map<String, Object> hints = this.getQueryHints().withFetchGraphs(this.em).asMap();
        return Optional.ofNullable(type == null ? this.em.find(domainType, id, hints) : this.em.find(domainType, id, type, hints));
    }
}

findById實際上調(diào)用的是find方法,采用立即加載方式,執(zhí)行這條查詢語句的時候就會立刻從數(shù)據(jù)庫中進行查詢,不過findById方法返回的是一個Optional,需要對這個Optional調(diào)用.get()方法才能得到需要的實體。

總結(jié)就是getOne方法是懶加載,直到調(diào)用它返回的實體時才會對數(shù)據(jù)庫進行查詢,findById是立即加載,主要調(diào)用方法就會去數(shù)據(jù)庫查詢。getOne方法直接返回一個實體,findById方法返回一個Optional,需要調(diào)用.get()方法獲取實體。

spring-data-jpa中findById()的使用

springboot 2.x 版本后,較之前的版本在此方法的使用上有差:

如果找到匹配的id數(shù)據(jù),則賦值給foo;否則則將括號中的對象賦值給foo。

Foo foo = repository.findById(id)
                    .orElse(null);
Foo foo = repository.findById(id)
                    .orElse(new Object());

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

相關(guān)文章

  • Jenkins安裝多個jdk版本并在項目中選擇對應(yīng)jdk版本

    Jenkins安裝多個jdk版本并在項目中選擇對應(yīng)jdk版本

    在使用jenkins構(gòu)建項目時會遇到不同的job需要配置不同版本的jdk,下面這篇文章主要給大家介紹了關(guān)于Jenkins安裝多個jdk版本并在項目中選擇對應(yīng)jdk版本的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • SpringBoot前后端傳輸加密設(shè)計實現(xiàn)方案

    SpringBoot前后端傳輸加密設(shè)計實現(xiàn)方案

    這篇文章主要給大家介紹了關(guān)于SpringBoot前后端傳輸加密設(shè)計實現(xiàn)方案的相關(guān)資料,包括數(shù)據(jù)加密方案、解密傳輸數(shù)據(jù)實現(xiàn)方案和響應(yīng)數(shù)據(jù)加密實現(xiàn)方案,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-11-11
  • SpringBoot實現(xiàn)接口等冪次校驗的示例代碼

    SpringBoot實現(xiàn)接口等冪次校驗的示例代碼

    本文主要介紹了SpringBoot實現(xiàn)接口等冪次校驗的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 深入解析Spring Cloud內(nèi)置的Zuul過濾器

    深入解析Spring Cloud內(nèi)置的Zuul過濾器

    這篇文章主要給大家深入的介紹了Spring Cloud內(nèi)置的Zuul過濾器的相關(guān)資料,文中給大家介紹的很詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-02-02
  • SpringMvc @RequestParam 使用推薦使用包裝類型代替包裝類型

    SpringMvc @RequestParam 使用推薦使用包裝類型代替包裝類型

    這篇文章主要介紹了SpringMvc @RequestParam 使用推薦使用包裝類型代替包裝類型,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • java.lang.Void類源碼解析

    java.lang.Void類源碼解析

    這篇文章主要介紹了java.lang.Void類源碼解析的相關(guān)內(nèi)容,對源碼中的部分內(nèi)容進行解釋,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • java如何讀取某個文件夾中的全部文件(包括子文件夾)

    java如何讀取某個文件夾中的全部文件(包括子文件夾)

    這篇文章主要介紹了java如何讀取某個文件夾中的全部文件(包括子文件夾),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • SpringBoot整合Redis實現(xiàn)刷票過濾功能

    SpringBoot整合Redis實現(xiàn)刷票過濾功能

    隨著互聯(lián)網(wǎng)的不斷發(fā)展,網(wǎng)站或APP的用戶流量增加,也衍生出了一些惡意刷量等問題,給數(shù)據(jù)分析及運營帶來極大的困難,所以本文使用SpringBoot和Redis實現(xiàn)一個刷票過濾功能,需要的可以參考一下
    2023-06-06
  • IDEA中配置多個版本的JDK的實現(xiàn)示例

    IDEA中配置多個版本的JDK的實現(xiàn)示例

    IDEA可以配置多個JDK,根據(jù)需要使用不同版本的,本文就來介紹一下IDEA中配置多個版本的JDK的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Java注解之Retention、Documented、Inherited介紹

    Java注解之Retention、Documented、Inherited介紹

    這篇文章主要介紹了Java注解之Retention、Documented、Inherited注解介紹,本文內(nèi)容和相關(guān)文章是系列文章,需要的朋友可以參考下
    2014-09-09

最新評論

彩票| 土默特左旗| 高密市| 四平市| 沅江市| 三穗县| 南召县| 绥滨县| 日照市| 平邑县| 修武县| 陈巴尔虎旗| 洪洞县| 鹤庆县| 西昌市| 张家口市| 鹿泉市| 正蓝旗| 乌兰县| 体育| 类乌齐县| 桐城市| 达孜县| 卢氏县| 泉州市| 阿克苏市| 淅川县| 渭源县| 石屏县| 广州市| 翁牛特旗| 梅州市| 讷河市| 中阳县| 封开县| 巫山县| 湖南省| 额济纳旗| 芮城县| 威宁| 抚宁县|