jdbctemplate 批量插入 返回自增id

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.*;
import org.springframework.jdbc.support.JdbcUtils;
import org.springframework.jdbc.support.KeyHolder;
import java.sql.*;
import java.util.List;
public class CustomerJdbcTemplate extends JdbcTemplate {
    public int[] batchUpdate(final String sql,final BatchPreparedStatementSetter pss,
                             final KeyHolder generatedKeyHolder) throws DataAccessException {
        return (int[]) execute(
                new PreparedStatementCreator() {
                    public PreparedStatement createPreparedStatement(Connection conn)
                            throws SQLException {
                        return conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
                    }
                },
                new PreparedStatementCallback() {
                    public Object doInPreparedStatement(PreparedStatement ps) throws SQLException {
                        if (logger.isDebugEnabled())
                            logger.debug("Executing batch SQL update and returning " +
                                    "generated keys [" + sql + "]");
                        try {
                            int batchSize = pss.getBatchSize();
                            int totalRowsAffected = 0;
                            int[] rowsAffected = new int[batchSize];
                            List generatedKeys = generatedKeyHolder.getKeyList();
                            generatedKeys.clear();
                            ResultSet keys = null;
                            for (int i = 0; i < batchSize; i++) {
                                pss.setValues(ps, i);
                                rowsAffected[i] = ps.executeUpdate();
                                totalRowsAffected += rowsAffected[i];
                                try {
                                    keys = ps.getGeneratedKeys();
                                    if (keys != null) {
                                        RowMapper rowMapper = new ColumnMapRowMapper();
                                        RowMapperResultSetExtractor rse =
                                                new RowMapperResultSetExtractor(rowMapper, 1);
                                        generatedKeys.addAll((List) rse.extractData(keys));
                                    }
                                } finally {
                                    JdbcUtils.closeResultSet(keys);
                                }
                            }
                            if (logger.isDebugEnabled())
                                logger.debug("SQL batch update affected "
                                        + totalRowsAffected + " rows and returned "
                                        + generatedKeys.size() + " keys");
                            return rowsAffected;
                        } finally {
                            if (pss instanceof ParameterDisposer)
                                ((ParameterDisposer) pss).cleanupParameters();
                        }
                    }
                });
    }
}
final List<User> users = new ArrayList();
        for (int i = 0; i < 10; i++) {
        User user = new User();
        user.setName("name"+1L);
        user.setAge(i)
        users.add(user);
        }
        String sql = "insert into user(name,age) values(?,?)";
        GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();
        customerJdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
        User user = users.get(i);
        ps.setString(1, user.getName());
        ps.setInt(2, user.getAge());
        }
@Override
public int getBatchSize() {
        return users.size();
        }
        }, generatedKeyHolder);
        List<Map<String, Object>> objectMap = generatedKeyHolder.getKeyList();
        for(Map<String, Object> map : objectMap){
        System.out.println(map.get("GENERATED_KEY"));
        }

 

posted @ 2022-04-25 13:29  1156740846  阅读(1074)  评论(0编辑  收藏  举报