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

Spring JPA之save方法示例詳解

 更新時(shí)間:2023年04月27日 14:50:50   作者:煙雨戲江南  
這篇文章主要為大家介紹了Spring JPA之save方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、save(單條添加)

源碼

@Transactional
@Override
public <S extends T> S save(S entity) {
   Assert.notNull(entity, "Entity must not be null.");
   if (entityInformation.isNew(entity)) {
      em.persist(entity);
      return entity;
   } else {
      return em.merge(entity);
   }
}

由代碼可知,它是先去判斷了entity是否為new:

如果是new,就執(zhí)行save方法;

如果非new,則執(zhí)行update方法。這就是jpa為啥只有save接口沒(méi)有update接口的原因吧!

此時(shí)我們應(yīng)該有個(gè)疑惑:怎么樣才算new呢?繼續(xù)往下看:

/**
 * Must be {@link Transient} in order to ensure that no JPA provider complains because of a missing setter.
 *
 * @see org.springframework.data.domain.Persistable#isNew()
 */
@Transient // DATAJPA-622
@Override
public boolean isNew() {
   return null == getId();
}

恍然大悟,原來(lái)他是去看 entity 的id(實(shí)體類(lèi)的主鍵)是否存在:不存在就是new。(通俗易懂,很好理解)

service 層

添加 save 方法(save 是三方件自帶接口不需要再dao層中添加)

@Transactional
public User save(User user) {
    return userDao.save(user);
}

control層

/**
 * 單條數(shù)據(jù)保存
 * @param id 自增的,可以不填
 * @param name
 * @param age
 * @return
 */
@GetMapping("/save")
public User save(Integer id,String name, Integer age){
	User user = new User();
	user.setId(id);
	user.setName(name);
	user.setAge(age);
	return userService.save(user);
}

瀏覽器測(cè)試OKhttp://localhost:7777/save?id=1&name=lili&age=18

測(cè)試id存在的情況OKhttp://localhost:7777/save?id=1&name=毛毛&age=20

二、saveAll(批量添加)

源碼

/*
 * (non-Javadoc)
 * @see org.springframework.data.jpa.repository.JpaRepository#save(java.lang.Iterable)
 */
@Transactional
@Override
public <S extends T> List<S> saveAll(Iterable<S> entities) {
   Assert.notNull(entities, "Entities must not be null!");
   List<S> result = new ArrayList<>();
   for (S entity : entities) {
      result.add(save(entity));
   }
   return result;
}

一目了然,saveAll其實(shí)就是傳入entity的集合,然后遍歷進(jìn)行save操作

service

添加 saveAll 方法(saveAll 是三方件自帶接口不需要再dao層中添加)

@Transactional
public <S extends User> List<S> saveAll(Iterable<S> entities) {
	return userDao.saveAll(entities);
}

control層

/**
 * 批量保存數(shù)據(jù)
 * @param ids 
 * @param names
 * @param ages
 * @return
 */
@GetMapping("/saveAll")
public List<User> saveAll(int[] ids,String[] names,Integer[] ages){
    List<User> list = new ArrayList<>();
    for(int i=0; i<names.length; i++){
        User user = new User();
        user.setId(ids[i]);
        user.setName(names[i]);
        user.setAge(ages[i]);
        list.add(user);
    }
    return userService.saveAll(list);
}

瀏覽器測(cè)試OKhttp://localhost:7777/saveAll?ids=2,3&names=丁丁,壯壯&ages=13,14

注: 如果在實(shí)體類(lèi)中的id上添加注解@GeneratedValue(strategy = GenerationType.IDENTITY),可以給id增加自增屬性,這樣我們就無(wú)需再傳入id了

以上就是Spring JPA之save方法示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Spring JPA save方法詳解的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot詳細(xì)講解斷言機(jī)制原理

    SpringBoot詳細(xì)講解斷言機(jī)制原理

    斷言Assertion是測(cè)試方法中的核心部分,用來(lái)對(duì)測(cè)試需要滿(mǎn)足的條件進(jìn)行驗(yàn)證。這些斷言方法都是org.junit.jupiter.api.Assertions的靜態(tài)方法。檢查業(yè)務(wù)邏輯返回的數(shù)據(jù)是否合理。所有的測(cè)試運(yùn)行結(jié)束以后,會(huì)有一個(gè)詳細(xì)的測(cè)試報(bào)告
    2022-06-06
  • Java Swing編寫(xiě)一個(gè)簡(jiǎn)單的計(jì)算器軟件

    Java Swing編寫(xiě)一個(gè)簡(jiǎn)單的計(jì)算器軟件

    大家好,本篇文章主要講的是Java Swing編寫(xiě)一個(gè)簡(jiǎn)單的計(jì)算器軟件,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下,方便下次瀏覽
    2021-12-12
  • JVM加載一個(gè)類(lèi)的過(guò)程

    JVM加載一個(gè)類(lèi)的過(guò)程

    本文主要介紹了JVM加載一個(gè)類(lèi)的過(guò)程。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • IDEA創(chuàng)建SpringBoot的maven項(xiàng)目的方法步驟

    IDEA創(chuàng)建SpringBoot的maven項(xiàng)目的方法步驟

    這篇文章主要介紹了IDEA創(chuàng)建SpringBoot的maven項(xiàng)目的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • IDEA啟動(dòng)報(bào)錯(cuò)Internal?error.?Please?refer?to?https://jb.gg/ide/critical-startup-errors解決辦法

    IDEA啟動(dòng)報(bào)錯(cuò)Internal?error.?Please?refer?to?https://jb.gg/i

    這篇文章主要介紹了IDEA啟動(dòng)報(bào)錯(cuò)Internal?error.?Please?refer?to?https://jb.gg/ide/critical-startup-errors解決辦法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • SpringBoot整合jasypt實(shí)現(xiàn)重要數(shù)據(jù)加密

    SpringBoot整合jasypt實(shí)現(xiàn)重要數(shù)據(jù)加密

    Jasypt是一個(gè)專(zhuān)注于簡(jiǎn)化Java加密操作的開(kāi)源工具,這篇文章主要為大家介紹了詳細(xì)介紹了如何使用jasypt實(shí)現(xiàn)重要數(shù)據(jù)加密,感興趣的小伙伴可以了解下
    2025-03-03
  • 微信跳一跳輔助Java代碼實(shí)現(xiàn)

    微信跳一跳輔助Java代碼實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了微信跳一跳輔助的Java代碼實(shí)現(xiàn)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • java實(shí)現(xiàn)單詞小游戲

    java實(shí)現(xiàn)單詞小游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)單詞小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • logback?EvaluatorFilter日志過(guò)濾器源碼解讀

    logback?EvaluatorFilter日志過(guò)濾器源碼解讀

    這篇文章主要為大家介紹了logback?EvaluatorFilter日志過(guò)濾器源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • idea向System.getenv()添加系統(tǒng)環(huán)境變量的操作

    idea向System.getenv()添加系統(tǒng)環(huán)境變量的操作

    這篇文章主要介紹了idea向System.getenv()添加系統(tǒng)環(huán)境變量的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評(píng)論

阜城县| 南投市| 龙岩市| 龙里县| 四会市| 蒙阴县| 兴和县| 修武县| 沐川县| 伊川县| 湛江市| 乌拉特前旗| 西吉县| 巨野县| 临朐县| 无为县| 宁海县| 肇源县| 康保县| 黎平县| 天峨县| 阳山县| 龙口市| 高碑店市| 酒泉市| 益阳市| 东至县| 霸州市| 浪卡子县| 会东县| 色达县| 宜君县| 专栏| 钟山县| 宜兰市| 长泰县| 甘德县| 平阴县| 大姚县| 山阴县| 思南县|