3

如何在春季 JDBC 批量更新中设置批量大小以提高性能?下面列出的是我的代码片段。

public void insertListOfPojos(final List<Student> myPojoList) {

    String sql = "INSERT INTO " + "Student " + "(age,name) " + "VALUES "
            + "(?,?)";
    try {
        jdbcTemplateObject.batchUpdate(sql,
                new BatchPreparedStatementSetter() {

                    @Override
                    public void setValues(PreparedStatement ps, int i)
                            throws SQLException {

                        Student myPojo = myPojoList.get(i);
                        ps.setString(2, myPojo.getName());
                        ps.setInt(1, myPojo.getAge());

                    }

                    @Override
                    public int getBatchSize() {
                        return myPojoList.size();
                    }
                });
    } catch (Exception e) {
        System.out.println("Exception");
    }
}

我读到使用 Hibernate,您可以在配置 xml 中提供批量大小。例如, <property name="hibernate.jdbc.batch_size" value="100"/>。Spring的jdbc中有类似的东西吗?

4

2 回答 2

1

看起来像 Hibernate 的 jdbc 没有选项;我认为您必须在准备连接字符串时查看指定 RDBMS 供应商驱动程序选项。

关于您必须使用的代码

BatchPreparedStatementSetter.getBatchSize()

或者

JdbcTemplate.batchUpdate(String sql, final Collection<T> batchArgs, final int batchSize, final ParameterizedPreparedStatementSetter<T> pss)

于 2013-07-25T06:19:00.673 回答
0

如果您直接使用 JDBC,则您自己决定在一次提交中使用多少语句,而使用提供的JDBCWriters之一,您可以通过配置的提交率决定批 * 大小

*afaik 实际的 spring 版本在后台使用准备好的语句批处理方法,请参阅https://github.com/SpringSource/spring-framework/blob/master/spring-jdbc/src/main/java/org/springframework/jdbc /core/JdbcTemplate.java#L549

于 2013-07-25T14:27:25.190 回答