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接口的原因吧!
此時(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(); }
恍然大悟,原來他是去看 entity 的id(實(shí)體類的主鍵)是否存在:不存在就是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其實(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); }
瀏覽器測試OKhttp://localhost:7777/saveAll?ids=2,3&names=丁丁,壯壯&ages=13,14
注: 如果在實(shí)體類中的id上添加注解@GeneratedValue(strategy = GenerationType.IDENTITY)
,可以給id增加自增屬性,這樣我們就無需再傳入id了
以上就是Spring JPA之save方法示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Spring JPA save方法詳解的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JAVA返回PDF文件流并進(jìn)行下載的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于JAVA返回PDF文件流并進(jìn)行下載的實(shí)現(xiàn)方法,PDF文件流下載是通過HTTP協(xié)議將服務(wù)器上的PDF文件以流的方式發(fā)送給客戶端,供客戶端保存到本地磁盤或直接在瀏覽器中打開,需要的朋友可以參考下2024-02-02Windows安裝Maven并配置環(huán)境的詳細(xì)步驟
Maven是一個(gè)非常流行的構(gòu)建和項(xiàng)目管理工具,用于Java開發(fā),它提供了一個(gè)強(qiáng)大的依賴管理系統(tǒng)和一系列標(biāo)準(zhǔn)化的構(gòu)建生命周期,本文將指導(dǎo)您如何在Windows操作系統(tǒng)上安裝和配置Maven,需要的朋友可以參考下2023-05-05java使double保留兩位小數(shù)的多方法 java保留兩位小數(shù)
這篇文章主要介紹了java使double類型保留兩位小數(shù)的方法,大家參考使用吧2014-01-01SpringBoot集成SFTP客戶端實(shí)現(xiàn)文件上傳下載實(shí)例
這篇文章主要為大家介紹了SpringBoot集成SFTP客戶端實(shí)現(xiàn)文件上傳下載實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08java 重定義數(shù)組的實(shí)現(xiàn)方法(與VB的ReDim相像)
java 重定義數(shù)組的實(shí)現(xiàn)方法(與VB的ReDim相像),需要的朋友可以參考一下2013-04-04