从 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的主要内容,如果未能解决你的问题,请参考以下文章