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

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


我看过这些,

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


控制器

// 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 存储到我的数据库中,每个元素都有自己的行。

【问题讨论】:

    标签: java arrays spring-boot spring-jdbc


    【解决方案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 注入的攻击。正确的做法是使用参数化查询。
    • 我同意,服务层是我放置逻辑的地方。
    猜你喜欢
    • 2022-01-01
    • 2023-03-25
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多