使用 Spring Boot JPA 在数据库中插入多行

Posted

技术标签:

【中文标题】使用 Spring Boot JPA 在数据库中插入多行【英文标题】:Insert multiple rows in database using spring boot JPA 【发布时间】:2019-12-14 00:45:28 【问题描述】:

我是春天的新手。我正在使用带有 JPA 的 Spring Boot 创建 Rest API。我想在数据库 mysql 中添加多行。

我已经创建了控制器,我在其中使用存储库中的 save() 方法将数据插入数据库。我想向数据库添加多行,但是当我运行代码时,只有最后一个值被添加到数据库中。如果我每次都尝试为方法创建 Userskill 对象,它可以正常工作,但每次都创建新对象是不可行的。这是控制器代码的一部分。在这里,Userskill 是我要插入数据的模型和表。

    for(int i=0;i<listofskill.size();i++)
                                
         userskill.setUser_id(userid);           
         userskill.setSkill_id(skillRepo.findByName(listofskill.get(i)).getSkill_id());
         userskillRepo.save(userskill);          
                       

此代码仅添加最后一个值的 1 行。我想将每个值添加到数据库中。

【问题讨论】:

您需要创建一个新对象。该对象代表数据库中的行,一旦保存,它就由 JPA 管理,所有set 方法都会更新托管实体。每行都需要自己的UsersSkill 实例。 但是如果我需要添加 50 行呢?创建 50 个 Userskill 对象是不可行的。 还有什么办法吗? 如上所述,只需创建对象。为什么不可行,世界各地的人们都在这样做。您正在使用 JPA,这意味着您必须以 JPA 方式工作……如果您不希望这样做,请不要使用 JPA。 【参考方案1】:

试试这个

for(int i=0;i<listofskill.size();i++)
          
         UserSkillObject userskill  = new UserSkillObject ();
         userskill.setUserSkillId(newId);           
         userskill.setUser_id(userid);           
         userskill.setSkill_id(skillRepo.findByName(listofskill.get(i)).getSkill_id());
         userskillRepo.save(userskill);          
     

【讨论】:

这解决了问题,但您正在对数据库进行多次打开。应该有一个牛肚来添加所有数据。 @eyoeldefare 您可以使用 saveAll API 一次将所有内容添加到列表中,但为此您需要先创建对象列表。【参考方案2】:

您可以创建用户技能列表,然后一次添加所有元素,检查以下代码:

List<UserSkillObject> userskillList = new ArrayList<>();

for(int i=0;i<listofskill.size();i++)
   UserSkillObject userskill = new UserSkillObject();
   userskill.setUser_id(userid);           
   userskill.setSkill_id(skillRepo.findByName(listofskill.get(i)).getSkill_id());
   userskillList.add(userskill);

userskillRepo.saveAll(userskillList);

【讨论】:

以上是关于使用 Spring Boot JPA 在数据库中插入多行的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot / JPA / Hibernate,如何根据 Spring 配置文件切换数据库供应商?

使用spring boot中的JPA操作数据库

spring boot jpa 访问 mysql

在 IntelliJ 中使用 JPA 的 Spring Boot

Spring Boot + JPA + mysql ...错误的方法?

spring boot 应用程序:jpa 查询返回旧数据