Spring JPA之save方法示例详解

作者:烟雨戏江南

这篇文章主要为大家介绍了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,就执行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 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层

* 批量保存数据 * @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方法示例详解的详细内容,更多关于Spring JPA save方法详解的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
  • Spring JPA联表查询之OneToOne源码详解
    Spring JPA联表查询之OneToOne源码详解
    2023-04-04
  • Java Hibernate中一对多和多对多关系的映射方式
    Java Hibernate中一对多和多对多关系的映射方式
    2023-04-04
  • java分治思想之ForkJoin详解
    java分治思想之ForkJoin详解
    2023-04-04
  • Java中的布隆过滤器你真的懂了吗
    Java中的布隆过滤器你真的懂了吗
    2023-04-04
  • Java日期时间与正则表达式超详细整理(适合新手入门)
    Java日期时间与正则表达式超详细整理(适合新手入门)
    2023-04-04
  • Java调用ChatGPT(基于SpringBoot和Vue)实现可连续对话和流式输出的ChatGPT API
    Java调用ChatGPT(基于SpringBoot和Vue)实现可连续对话
    2023-04-04
  • Java并发编程之LongAdder执行情况解析
    Java并发编程之LongAdder执行情况解析
    2023-04-04
  • 深入解读MVC模式和三层架构
    深入解读MVC模式和三层架构
    2023-04-04
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2024 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号