С традиционным JDBC мы получили избыточный (шаблонный) и подверженный ошибкам код:
public Account findByNumber(String number ) {
String sql = "select * from accounts " +
"where number = ?";
Account account = null;
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = dataSource.getConnection();
ps = conn.prepareStatement(sql);
ps.setString(1, number);
rs = ps.executeQuery();
account = mapAccount(rs);
} catch (SQLException e) {
throw new RuntimeException("SQL exception occurred", e);
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException ex) { // OMG
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException ex) { // OMG
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) { // OMG
}
}
}
return account;
}
Попробовав с ресурсами, мы могли бы сделать это проще, но не слишком сильно. Вместо этого в Spring JdbcTemplate мы используем шаблон метода шаблона, очищаем код, устраняем повторяющийся шаблонный код, избегаем распространенных ошибок и правильно обрабатываем исключения:
public Account findByNumber(String number) {
String sql = "select * from accounts where number = ?";
return jdbcTemplate.query(sql, accountExtractor, number);
}
private class AccountExtractor implements ResultSetExtractor {
public Account extractData(ResultSet rs) throws SQLException, DataAccessException {
return mapAccount(rs);
}
}
Spring получает соединение, выполняет инструкцию, обрабатывает набор результатов, обрабатывает исключения и освобождает соединение. Вы можете запросить одну или несколько строк. JdbcTemplate возвращает каждую строку результирующего набора в виде карты. При ожидании одной строки используйте queryForMap, при ожидании нескольких строк используйте queryForList, при вставке, обновлении или удалении используйте метод обновления:
public MapgetUser(int id) { String sql = "select * from users where id = ?"; return jdbcTemplate.queryForMap(sql, id); } public List
См. Документацию Spring Framework – Доступ к данным с помощью JDBC
Оригинал: “https://dev.to/eidher/spring-jdbc-4d3i”