如何使用 JdbcTemplate 以可扩展的方式执行以下 SQL在 mySQL 上运行。在这种情况下,可扩展意味着:
- 服务器上只执行一条 SQL 语句
- 它适用于任意数量的行。
声明如下:
INSERT INTO myTable (foo, bar) VALUES ("asdf", "asdf"), ("qwer", "qwer")
假设我有一个带有 foo
和 bar
字段的 POJO 列表。我意识到我可以遍历列表并执行:
jdbcTemplate.update("INSERT INTO myTable(foo, bar) VALUES (?, ?)", paramMap)
但这并没有满足第一个标准。
我相信我也可以执行:
jdbcTemplate.batchUpdate("INSERT INTO myTable(foo, bar) VALUES (?, ?)", paramMapArray)
但据我所知,这只会编译 SQL 一次并执行多次,再次失败第一个标准。
最后一种可能性,似乎同时满足这两个标准,就是自己用 StringBuffer
简单地构建 SQL,但我想避免这种情况。
最佳答案
您可以像下面这样使用 BatchPreparedStatementSetter。
public void insertListOfPojos(final List<MyPojo> myPojoList) {
String sql = "INSERT INTO "
+ "MY_TABLE "
+ "(FIELD_1,FIELD_2,FIELD_3) "
+ "VALUES " + "(?,?,?)";
getJdbcTemplate().batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i)
throws SQLException {
MyPojo myPojo = myPojoList.get(i);
ps.setString(1, myPojo.getField1());
ps.setString(2, myPojo.getField2());
ps.setString(3, myPojo.getField3());
}
@Override
public int getBatchSize() {
return myPojoList.size();
}
});
}
关于java - 使用 JdbcTemplate 插入多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3165730/