java - 使用 JdbcTemplate 插入多行

标签 java sql spring jdbc jdbctemplate

如何使用 JdbcTemplate 以可扩展的方式执行以下 SQL在 mySQL 上运行。在这种情况下,可扩展意味着:

  1. 服务器上只执行一条 SQL 语句
  2. 它适用于任意数量的行。

声明如下:

INSERT INTO myTable (foo, bar) VALUES ("asdf", "asdf"), ("qwer", "qwer")

假设我有一个带有 foobar 字段的 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/

相关文章:

Java:String.Format 是否像 C# 一样存在于 Java 中?

java - 如何在java中更新已经有数据的容器

java - Spring Thymeleaf 将用户路由到/users/{thisUser}/thisUsersCollectionOfThings

java - 使用 Java Spring 启动的 Redis session

Java程序设计-洗牌器

java - 在注册表中找不到客户端 ID - OLE 打开 XSLX 文档错误

php - 从当月开始统计 ID

php - 上传临时文件并重命名后很难用 php 移动临时文件

sql - 使用其他列从 JSONB 列获取数据

java - 如何在hibernate中连接多个表