leandromoraesrj / sincad-backend

PROJETO BASE DE EXEMPLO USANDO AS MELHORES PRATICAS DE DESENVOLVIMENTO
0 stars 0 forks source link

Mapeamento Hibernate JPA - JDBCTemplate/NamedJdbcTemplate #12

Open leandromoraesrj opened 2 years ago

leandromoraesrj commented 2 years ago

Executando procedure via execute statement ou executebatch

leandromoraesrj commented 2 years ago

JDBCTemplate trabalha com sql nativos somente. O equivalente ao executebatch no JDBCTemplate (Spring JDBC) é o batchUpdate;

private static final String SQL_PERSISTE_LINHA = "INSERT INTO ARQUIVO_MEI (NU_LINHA, NU_RAIZ_CNPJ) VALUES (:NU_LINHA,:NU_RAIZ_CNPJ)";

public void persistirLinhas(Map<Long, String> linhas) {
List<MapSqlParameterSource> params = new ArrayList<MapSqlParameterSource>();

linhas.forEach((k, v) -> {
    MapSqlParameterSource source = new MapSqlParameterSource();     
    source.addValue("NU_LINHA", k);
    source.addValue("NU_RAIZ_CNPJ", linhas.get(k));
    params.add(source);
});

namedJdbcTemplate.batchUpdate(SQL_PERSISTE_LINHA, params.toArray(MapSqlParameterSource[]::new));
}
private static final String SQL_PREPARED_PERSISTE_LINHA = "INSERT INTO ARQUIVO_MEI (NU_LINHA, NU_RAIZ_CNPJ) VALUES (?,?)";

public void persistirLinhas1(List<ArquivoMei> linhas) {
try (PreparedStatement statement = jdbcTemplate.getDataSource().getConnection()
        .prepareStatement(SQL_PREPARED_PERSISTE_LINHA);) {

    linhas.forEach(n -> {
        try {
            statement.setLong(1, n.getLinha());
            statement.setString(2, n.getRaizCnpj());
            statement.addBatch();
        } catch (SQLException e) {
        }
    });

    statement.executeBatch();
} catch (SQLException e) {
}
}

OBS: O JdbcTemplate e o MapSqlParameterSource são mais lento do que o JDBC puro

Mais detalhes em: https://www.codejava.net/java-se/jdbc/jdbc-batch-update-examples

Ocorreu um erro , então foi necessário aumentar a memória da VM no "VM arguments" do "run configuration" -Xmx3g