欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring JPA之save方法示例詳解

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

一、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接口沒有update接口的原因吧!

此時我們應該有個疑惑:怎么樣才算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();
}

恍然大悟,原來他是去看 entity 的id(實體類的主鍵)是否存在:不存在就是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);
}

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

測試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其實就是傳入entity的集合,然后遍歷進行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);
}

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

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

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

相關(guān)文章

  • JAVA返回PDF文件流并進行下載的實現(xiàn)方法

    JAVA返回PDF文件流并進行下載的實現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于JAVA返回PDF文件流并進行下載的實現(xiàn)方法,PDF文件流下載是通過HTTP協(xié)議將服務器上的PDF文件以流的方式發(fā)送給客戶端,供客戶端保存到本地磁盤或直接在瀏覽器中打開,需要的朋友可以參考下
    2024-02-02
  • Windows安裝Maven并配置環(huán)境的詳細步驟

    Windows安裝Maven并配置環(huán)境的詳細步驟

    Maven是一個非常流行的構(gòu)建和項目管理工具,用于Java開發(fā),它提供了一個強大的依賴管理系統(tǒng)和一系列標準化的構(gòu)建生命周期,本文將指導您如何在Windows操作系統(tǒng)上安裝和配置Maven,需要的朋友可以參考下
    2023-05-05
  • SpringBoot2整合Redis緩存三步驟代碼詳解

    SpringBoot2整合Redis緩存三步驟代碼詳解

    這篇文章主要介紹了SpringBoot2整合Redis緩存三步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • SpringMvc入門指南(必看)

    SpringMvc入門指南(必看)

    下面小編就為大家?guī)硪黄猄pringMvc入門指南(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • java使double保留兩位小數(shù)的多方法 java保留兩位小數(shù)

    java使double保留兩位小數(shù)的多方法 java保留兩位小數(shù)

    這篇文章主要介紹了java使double類型保留兩位小數(shù)的方法,大家參考使用吧
    2014-01-01
  • SpringBoot集成SFTP客戶端實現(xiàn)文件上傳下載實例

    SpringBoot集成SFTP客戶端實現(xiàn)文件上傳下載實例

    這篇文章主要為大家介紹了SpringBoot集成SFTP客戶端實現(xiàn)文件上傳下載實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • java 重定義數(shù)組的實現(xiàn)方法(與VB的ReDim相像)

    java 重定義數(shù)組的實現(xiàn)方法(與VB的ReDim相像)

    java 重定義數(shù)組的實現(xiàn)方法(與VB的ReDim相像),需要的朋友可以參考一下
    2013-04-04
  • JVM虛擬機的執(zhí)行流程解析

    JVM虛擬機的執(zhí)行流程解析

    這篇文章主要介紹了JVM虛擬機的執(zhí)行流程圖解,Java虛擬機的啟動是通過引導類加載器創(chuàng)建一個初始類來完成的,這個類是由虛擬機的具體實現(xiàn)指定的,程序開始執(zhí)行時他才運行,程序結(jié)束時他就停止,需要的朋友可以參考下
    2023-08-08
  • Java多線程中常見的鎖策略詳解

    Java多線程中常見的鎖策略詳解

    這篇文章主要介紹了Java多線程中常見的鎖策略詳解,在Java多線程中鎖(synchronized)也會根據(jù)鎖的競爭程度來升級為相關(guān)“高等級”鎖,本文為了更好的理解?synchronized?加鎖機制,對其做出了詳細解釋,需要的朋友可以參考下
    2023-07-07
  • java線程間通信的通俗解釋及代碼示例

    java線程間通信的通俗解釋及代碼示例

    這篇文章主要介紹了java線程間通信的通俗解釋,介紹了線程通信中的幾個相關(guān)概念,然后分享了線程通信的實現(xiàn)方式及代碼示例,具有一定參考價值 ,需要的朋友可以了解下。
    2017-11-11

最新評論