目录
一、save(单条添加)源码service 层control层二、saveAll(批量添加)源码servicecontrol层一、save(单条添加)
源码
@Transactional @Override publicS 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,就执行save方法;
(相关资料图)
如果非new,则执行update方法。这就是jpa为啥只有save接口没有update接口的原因吧!
此时我们应该有个疑惑:怎么样才算new呢?继续往下看:
/**
* 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层
/**
* 单条数据保存
* @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 publicListsaveAll(Iterableentities) { Assert.notNull(entities, "Entities must not be null!"); Listresult = new ArrayList<>(); for (S entity : entities) { result.add(save(entity)); } return result; }
一目了然,saveAll其实就是传入entity的集合,然后遍历进行save操作
service
添加 saveAll方法(saveAll是三方件自带接口不需要再dao层中添加)
@Transactional publicListsaveAll(Iterableentities) { return userDao.saveAll(entities); }
control层
/**
* 批量保存数据
* @param ids
* @param names
* @param ages
* @return
*/
@GetMapping("/saveAll")
public List saveAll(int[] ids,String[] names,Integer[] ages){
List list = new ArrayList<>();
for(int i=0; i浏览器测试OKhttp://localhost:7777/saveAll?ids=2,3&names=丁丁,壮壮&ages=13,14
注: 如果在实体类中的id上添加注解@GeneratedValue(strategy = GenerationType.IDENTITY),可以给id增加自增属性,这样我们就无需再传入id了
以上就是Spring JPA之save方法示例详解的详细内容,更多关于Spring JPA save方法详解的资料请关注脚本之家其它相关文章!
标签:
