Spring Data Rest怎么实现一次插入多条数据?

postman使用的时候发现无法插入多条数据?如何新增一个功能,能一次插入多条?下面是我的实体类和接口,我现在启动之后只能更新一条json,不能多条。这是为什么呢?要restful


public interface JsonMapper extends JpaRepository<Json, Integer>, JpaSpecificationExecutor {
}//接口


@Entity
@Table(name = "json")
public class Json implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String duration;

    private Integer price;

    private String name;

    private String description;//实体类

调用一次插入多条数据?

【相关推荐】



  • 这篇博客: Spring Data Rest!五分钟帮我们实现Rest服务中的 四、使用方法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    Springboot启动项目以后,我们就可以直接使用rest服务了。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

后端循环插入呗!

使用json格式接收多条数据,然后在后端进行处理

定义与数据库表对应的实体类。

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String email;
    // ...其他属性和方法
}


创建一个继承自JpaRepository的Repository接口。

public interface UserRepository extends JpaRepository<User, Long> {
}


在需要一次性插入多条数据的地方,你可以使用saveAll方法。

@Service
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public void saveMultipleUsers(List<User> users) {
        userRepository.saveAll(users);
    }
}


https://blog.csdn.net/zwang60/article/details/106080270/
看看这篇博客,应该能解决


http://t.csdn.cn/r3oA9

有专门的batch函数吧

最笨的方法就是前端传入List,后端直接循环插入,但是效率低。JPA应该有批量的方法,你可以找下。

你的后端接口应该传递一个json数组,然后后台批量插入

参考gpt:
结合自己分析给你如下建议:
你可以使用postman的数据驱动功能,通过导入一个json格式的文件,来批量发送请求。json文件的格式应该是一个数组,每个元素是一个对象,包含你要插入的数据。例如:

[
  {
    "duration": "10",
    "price": 100,
    "name": "A",
    "description": "This is A"
  },
  {
    "duration": "20",
    "price": 200,
    "name": "B",
    "description": "This is B"
  },
  {
    "duration": "30",
    "price": 300,
    "name": "C",
    "description": "This is C"
  }
]

然后,你可以在postman中创建一个collection,用来存放你的请求。在collection中,你可以配置请求的url,method,headers等参数。在请求的body中,你可以使用{{variable}}的形式来引用json文件中的数据。例如:

{
  "duration": "{{duration}}",
  "price": {{price}},
  "name": "{{name}}",
  "description": "{{description}}"
}

接着,你可以使用postman的collection runner来批量运行你的请求。在collection runner中,你可以选择你要运行的collection,以及要导入的json文件。你还可以设置迭代次数,延迟时间等选项。点击run后,postman就会自动遍历json文件中的每个对象,并发送对应的请求。

最后,你可以查看postman的测试报告,来检查你的请求是否成功。你还可以在collection中添加一些断言脚本,来验证响应结果是否符合预期。

结合GPT给出回答如下请题主参考
Spring Data Rest默认情况下只支持单条数据的插入。如果需要实现一次插入多条数据,可以使用Spring Data JPA提供的接口来实现,例如使用saveAll()方法来保存多个实体对象。下面是一个简单的示例代码:

@RestController
@RequestMapping("/api")
public class MyController {

    @Autowired
    private MyRepository repository;

    @PostMapping("/entities")
    public List<MyEntity> createEntities(@RequestBody List<MyEntity> entities) {
        return repository.saveAll(entities);
    }

}

在上面的示例中,我们定义了一个POST请求,请求路径为/api/entities,请求体为一个包含多个MyEntity对象的JSON数组。在控制器方法中,我们通过repository.saveAll()方法来保存所有的实体对象,并返回保存之后的实体对象列表。

通过上述方法,我们就可以实现一次插入多条数据的功能。同时,Spring Data Rest也会为我们自动处理资源的访问、查询等操作,实现完整的RESTful接口。

好像没有对应的api,可以试试结合mybatis的foreach批量插入。
不行的话就只能后端循环批量插入了

Spring Data Jpa 实现批量插入
可以参考下


java springboot之批量插入大量数据_springboot一次插入多个数据_张彡543的博客-CSDN博客 【代码】java springboot之批量插入大量数据。_springboot一次插入多个数据 https://blog.csdn.net/weixin_60170500/article/details/131580859

前端传递JSON字符串后,后端用String接,,然后转成list,循环构建成List数组,然后在调用JPA的批量保存,或者在Mapper.xml写批量插入语句,
Mysql可以这样写:

<insert id="batchReOrganizationPackEntry">
        insert into <include refid="tableName"/>
        (id,org_id,pack_id)
        values
        <foreach collection="list" item="item" separator=",">
            (#{item.id}, #{item.organization.id},#{item.packId})
        </foreach>
    </insert>

Oracle:

<insert id="batchSave" parameterType="java.util.List">
        insert all
        <foreach collection="list" item="item" separator=" ">
            INTO cj_msg(
            id,type,type_id,title,detail,user_id,login_name,
            status,create_by,create_date,update_by,update_date,remark,del_flag)
            values
            (#{item.id},#{item.type},#{item.typeId},#{item.title},#{item.detail},#{item.user.id},#{item.loginName},
            #{item.status},#{item.createBy.id},#{item.createDate},#{item.updateBy.id},#{item.updateDate},#{item.remark},#{item.delFlag})
        </foreach>
        select ${list.size} from dual
    </insert>

题主,这个问题我来替你解决(参考结合AI智能、文心一言),若有帮助,还望采纳,点击回答右侧采纳即可。


Spring Data Rest提供了多种方式来实现一次插入多条数据:

  1. 使用Spring Data JPA的saveAll()方法

可以使用Spring Data JPA提供的saveAll()方法来保存多个实体对象,然后将这些对象打包成一个集合,一次性保存到数据库中。

@Autowired
private MyRepository myRepository;

@PostMapping("/myentities")
@ResponseBody
public List<MyEntity> saveMyEntities(@RequestBody List<MyEntity> myEntities) {
    return myRepository.saveAll(myEntities);
}
  1. 自定义Repository方法

通过定义自己的Repository接口,可以实现一次性插入多个实体对象。

@RepositoryRestResource(collectionResourceRel = "myentities", path = "myentities")
public interface MyEntityRepository extends JpaRepository<MyEntity, Long> {

    @PostMapping("/myentities/batch")
    List<MyEntity> saveAll(@RequestBody List<MyEntity> myEntities);
}

然后,可以将这个自定义的Repository方法映射到一个RESTful API中,以便通过HTTP POST请求进行调用。

@RepositoryRestController
public class MyEntityController {

    private final MyEntityRepository myEntityRepository;

    @Autowired
    public MyEntityController(MyEntityRepository myEntityRepository) {
        this.myEntityRepository = myEntityRepository;
    }

    @PostMapping("/myentities/batch")
    public ResponseEntity<?> saveAll(@RequestBody List<MyEntity> myEntities) {

        List<MyEntity> savedEntities = myEntityRepository.saveAll(myEntities);

        return ResponseEntity.ok(savedEntities);
    }
}

第二种方法使代码更加清晰和模块化,同时也提供了更灵活的选择来处理多个实体对象的插入。

要实现一次性插入多条数据的功能您需要自定义一个继承自 JpaRepository 的新接口,并重写 save() 方法。可以使用循环来批量插入多个实体。


public interface JsonMapper extends JpaRepository<Json, Integer> {  
    @Transactional  
    @Override  
    @Modifying  
    @Query("INSERT INTO Json(duration, price, name, description) VALUES(:duration, :price, :name, :description)")  
    void saveAll(@Param("duration") String duration, @Param("price") Integer price, @Param("name") String name, @Param("description") String description);  
}

参考gpt
在Spring Data Rest中,如果您想一次插入多条数据,可以使用批量插入的方式。以下是一个示例,演示如何在Spring Data Rest中实现一次插入多条数据的功能。

首先,您需要在您的实体类上使用@RepositoryRestResource注解,以启用Spring Data Rest的自动化REST功能。然后,您可以创建一个自定义的控制器,用于处理多条数据的插入请求。

实体类示例(假设实体类名为User):

@Entity
@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    private String email;
    
    // 省略getter和setter
}

自定义控制器示例:

@RepositoryRestController
@RequestMapping("/users")
public class UserController {
    private final UserRepository userRepository;

    public UserController(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @PostMapping("/batch")
    public ResponseEntity<?> createUsers(@RequestBody List<User> users) {
        List<User> savedUsers = userRepository.saveAll(users);
        return ResponseEntity.ok(savedUsers);
    }
}

在上述示例中,我们创建了一个UserController,并在其中定义了一个createUsers方法,用于处理多条数据的插入请求。该方法接受一个List<User>作为参数,在方法体内使用userRepository.saveAll(users)来批量保存用户数据。最后,返回保存成功的用户列表。

使用Postman进行测试时,您可以发送一个POST请求到/users/batch,并在请求的Body中以JSON数组的形式提供多条数据。例如:

[
    {
        "name": "User1",
        "email": "user1@example.com"
    },
    {
        "name": "User2",
        "email": "user2@example.com"
    }
]

添加一个新的方法,用于接收和处理多个DTO对象

public interface JsonMapper extends JpaRepository<Json, Integer>, JpaSpecificationExecutor {
    @PostMapping("/json/batch")
    public List<Json> saveAll(@RequestBody List<JsonDTO> jsonDTOList);
}

传递数组进行

循环插入