从 POST 方法中使用 JDBCTemplate 存储对象数组 - Spring Boot

Posted

技术标签:

【中文标题】从 POST 方法中使用 JDBCTemplate 存储对象数组 - Spring Boot【英文标题】:Storing object array with JDBCTemplate from POST method - Spring Boot 【发布时间】:2019-07-12 19:04:30 【问题描述】:

如何使用JDBCTemplate 将对象数组插入数据库?我的控制器中的POST 方法传入了一个可变长度的对象数组。


我看过这些,

http://www.java2s.com/Tutorial/Java/0417__Spring/PassParameterAsObjectArray.htm

How to insert Integer array into postgresql table using jdbcTemplate in Java Springboot?

和其他人一样,他们似乎不适合我的需要。


控制器

// Service
@Autowired
private DBService tool;

@PostMapping(value = "/foo")
private void storeData(@RequestBody CustomObject[] customObjects) 
    // Calls service then DAO
    tool.storeData(customObjects);

POJO 对象

public class CustomObject 

    private Integer id;
    private String name;

    // Getters & Setters for class attributes
    ...

DAO 对吗?因为我想单独存储每个数组元素,每个元素都有自己的行。

@Autowired
private JdbcTemplate temp;

public void storeData(CustomObject[] customObjects) 

    String sql = "INSERT INTO FooBar(name) VALUES(\'" + customObjects.toString() + "\');";

    temp.update(sql);


预期

我想将我的自定义对象数组从POST 存储到我的数据库中,每个元素都有自己的行。

【问题讨论】:

【参考方案1】:

理想情况下,您希望遍历数组并保存每个 "CustomObject" 。

private JdbcTemplate temp;

public void storeData(CustomObject customObject) 

    String sql = "INSERT INTO FooBar VALUES(" + customObject.id + ",\'"+  customObject.name +"\');";

    temp.update(sql);



@PostMapping(value = "/foo")
private void storeData(@RequestBody CustomObject[] customObjects) 
     // Save each record individually
      customObjects.forEach  customObject -> 
      tool.storeData(customObjects);
    

【讨论】:

既不是控制器,也不是 DAO。理想情况下,您应该在控制器和 dao 之间有一个服务层来容纳该代码。 JB 尼泽特,我同意。我的监督 像您的代码一样将值连接到查询字符串中是非常不安全的,因为它会使您的代码容易受到 SQL 注入的攻击。正确的做法是使用参数化查询。 我同意,服务层是我放置逻辑的地方。

以上是关于从 POST 方法中使用 JDBCTemplate 存储对象数组 - Spring Boot的主要内容,如果未能解决你的问题,请参考以下文章

spring 如何获取 jdbctemplate

jdbcTemplate - 从JSON列转换数据

Spring JdbcTemplate查询实例

Spring Boot:整合JdbcTemplate

springboot编写持久化接口之集成jdbctemplate

阶段3 2.Spring_09.JdbcTemplate的基本使用_4 JdbcTemplate的CRUD操作