如何使用 Spring JDBC 模板批处理在数据库中进行多次插入?

2024-02-17

我需要一次性在数据库中插入数千条记录。我在我的应用程序中使用 spring JDBC 模板。

下面是我到目前为止编写的代码,它一次执行所有插入。因此,如果我有 10,000 个用户,他们就会一次性插入。但我想要的是批量执行它们,例如一批执行 500 条记录,依此类推。

@Override
public void saveBatch(final List<Employee> employeeList) {
    final int batchSize = 500;

    getJdbcTemplate().batchUpdate(QUERY_SAVE,
            new BatchPreparedStatementSetter() {
                @Override
                public void setValues(PreparedStatement ps, int i)
                        throws SQLException {
                    Employee employee = employeeList.get(i);
                    ps.setString(1, employee.getFirstname());
                    ps.setString(2, employee.getLastname());
                    ps.setString(3, employee.getEmployeeIdOnSourceSystem());
                }

                @Override
                public int getBatchSize() {
                    return employeeList.size();
                }
            });

}

我如何更改上面的代码,以便我们可以将批处理大小设置为 500,然后执行它们,然后执行下一个 500,依此类推,而不是使用 employeeList.size() 作为批处理大小?

请帮忙。


我不确定是否可以单独使用 JDBC 模板来做到这一点。也许你可以调用batchUpdate通过将大列表分割成批量大小的块,逐步实现方法。

看看这里:

@Override
public void saveBatch(final List<Employee> employeeList) {
    final int batchSize = 500;

    for (int j = 0; j < employeeList.size(); j += batchSize) {

        final List<Employee> batchList = employeeList.subList(j, j + batchSize > employeeList.size() ? employeeList.size() : j + batchSize);

        getJdbcTemplate().batchUpdate(QUERY_SAVE,
            new BatchPreparedStatementSetter() {
                @Override
                public void setValues(PreparedStatement ps, int i)
                        throws SQLException {
                    Employee employee = batchList.get(i);
                    ps.setString(1, employee.getFirstname());
                    ps.setString(2, employee.getLastname());
                    ps.setString(3, employee.getEmployeeIdOnSourceSystem());
                }

                @Override
                public int getBatchSize() {
                    return batchList.size();
                }
            });

    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Spring JDBC 模板批处理在数据库中进行多次插入? 的相关文章

随机推荐