🌱 Digital Garden

Search

Search IconIcon to open search

JDBCTemplate

Last updated Apr 29, 2023 Edit Source

Es una simplificacion, como una especie de interfaz, sobre notes/JDBC, simplifica su uso, ejecuta el workflow de JDBC y permite todas las funcionalidades complejas de JDBC sin la necesidad de hacer todo el procesamiento complejo que este require extrayendo los resultados.

# Importar a un proyecto de Spring

Para importar esta libreria a un proyecto de Spring Boot, basta con agregarla al gestor de dependencias para su uso.

1
2
3
4
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>

# Uso

Para utilizarlo en un proyecto de Spring, basta con agregar su dependencia e inyectarlo donde sea que lo necesitemos, para su uso, estan un grupo de metodos que sirven para ejecutar distintas funcionalidades.

# Metodos Utiles

update(sql, ...args). Este metodo sirve para ejecutar una actualizacion (INSERT, UPDATE) dentro de la base de datos.

1
2
3
4
5
var sql = """
		INSERT INTO customer(name)
		VALUES (?)
		""";
jdbcTemplate.update(sql, customer.getName());

query(sql, rowmapper). Este metodo sirve para ejecutar una query (usualmente SELECT) en la cual le podemos enviar un rowmapper para que mapee los resultados de cada row a una entidad en especifico (Una entidad del dominio, regularmente)

Un Row Mapper es una lambda, la cual sirve para mapear cada row a una entidad

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
var sql = """
		SELECT id, name
		FROM customer
		""";

RowMapper<Customer> customerRowMapper = (rs, rowNum) -> {
	return new Customer(
		rs.getInt("id"),
		rs.getString("name")
	);
}

List<Customer> customers = jdbcTemplate.query(sql, customerRowMapper);

Adicionalmente, el RowMapper puede ser implementado en su clase particular como una funcion y ser pasado como si fuese un callback

1
2
3
4
5
6
7
8
9
@Component
class CustomerRowMapper implements RowMapper<Customer> {
	public Customer mapRow(ResultSet rs, int rowNum) throws SQLException {
		return new Customer(
			rs.getInt("id"),
			rs.getName("name")
		);
	}
}

Y ser inyectado y usado normalmente, de modo que la funcion quedaria

1
List<Customer> customers = jdbcTemplate.query(sql, customerRowMapper);