Spring Framework Tutorial
Software Setup and Configuration (STS/Eclipse/IntelliJ)
Core Spring
Spring Annotations
Spring Data
Spring JDBC
Spring Security
Spring JDBC Template (JdbcTemplate
) is the key class provided by Spring's JDBC module to simplify database access and error handling in JDBC. It is designed to handle the repetitive boilerplate code, such as resource creation, connection management, exception handling, and result set iteration, which developers typically write when working with raw JDBC.
Here's a detailed overview:
DataAccessException
exceptions, which are checked exceptions.RowMapper
and RowCallbackHandler
interfaces to help map result set data to domain objects or custom data structures.Ensure you have the spring-jdbc
dependency in your Maven or Gradle project.
Then, set up the DataSource
and JdbcTemplate
beans:
@Configuration public class DatabaseConfig { @Bean public DataSource dataSource() { BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/mydb"); dataSource.setUsername("username"); dataSource.setPassword("password"); return dataSource; } @Bean public JdbcTemplate jdbcTemplate(DataSource dataSource) { return new JdbcTemplate(dataSource); } }
Create (Insert):
jdbcTemplate.update("INSERT INTO person(name, age) VALUES(?, ?)", "John", 25);
Read (Select):
Using RowMapper
:
String query = "SELECT id, name, age FROM person WHERE id = ?"; Person person = jdbcTemplate.queryForObject(query, new Object[]{1}, new RowMapper<Person>() { @Override public Person mapRow(ResultSet rs, int rowNum) throws SQLException { Person p = new Person(); p.setId(rs.getInt("id")); p.setName(rs.getString("name")); p.setAge(rs.getInt("age")); return p; } });
Update:
jdbcTemplate.update("UPDATE person SET age = ? WHERE name = ?", 26, "John");
Delete:
jdbcTemplate.update("DELETE FROM person WHERE name = ?", "John");
If you have multiple records to insert/update:
String sql = "INSERT INTO person (name, age) VALUES (?, ?)"; List<Object[]> batchArgs = new ArrayList<>(); batchArgs.add(new Object[]{"John", 25}); batchArgs.add(new Object[]{"Doe", 30}); jdbcTemplate.batchUpdate(sql, batchArgs);
JdbcTemplate
abstracts away a lot of boilerplate code and simplifies error handling, making database operations cleaner and more efficient. If you are working on a Spring-based project and need to interact with a relational database, using JdbcTemplate
is an effective and recommended way to do so.
Using Spring JDBC Template for database operations:
Description:
The JdbcTemplate
in Spring simplifies database operations by handling common tasks such as opening and closing connections, exception handling, and resource cleanup.
Code Example:
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); // Example of executing a simple SQL query String sql = "SELECT * FROM employees"; List<Employee> employees = jdbcTemplate.query(sql, new EmployeeRowMapper());
Querying databases with Spring JDBC Template:
Description:
Spring JDBC Template provides methods to execute queries and retrieve results. The query
method is commonly used for SELECT queries.
Code Example:
// Querying the database with Spring JDBC Template String sql = "SELECT * FROM products WHERE category = ?"; List<Product> products = jdbcTemplate.query(sql, new Object[]{"Electronics"}, new ProductRowMapper());
CRUD operations with Spring JDBC Template:
Description:
Spring JDBC Template supports CRUD operations (Create, Read, Update, Delete). It provides methods like update
for executing INSERT, UPDATE, and DELETE statements.
Code Example:
// Insert operation String insertSql = "INSERT INTO customers (name, email) VALUES (?, ?)"; jdbcTemplate.update(insertSql, "John Doe", "john@example.com"); // Update operation String updateSql = "UPDATE customers SET email = ? WHERE id = ?"; jdbcTemplate.update(updateSql, "john.doe@example.com", 1); // Delete operation String deleteSql = "DELETE FROM customers WHERE id = ?"; jdbcTemplate.update(deleteSql, 1);
Batch processing with Spring JDBC Template:
Description: Spring JDBC Template supports batch processing for executing multiple SQL statements in a batch. This can improve performance by reducing the number of database round-trips.
Code Example:
// Batch update example String updateSql = "UPDATE products SET price = ? WHERE id = ?"; List<Object[]> batchArgs = Arrays.asList(new Object[]{50.0, 101}, new Object[]{45.0, 102}); jdbcTemplate.batchUpdate(updateSql, batchArgs);
Named parameters in Spring JDBC Template queries:
Description: Named parameters in Spring JDBC Template queries provide a more readable and maintainable way to specify parameters, especially in queries with multiple parameters.
Code Example:
// Named parameter example String sql = "SELECT * FROM products WHERE category = :category"; MapSqlParameterSource params = new MapSqlParameterSource(); params.addValue("category", "Electronics"); List<Product> products = namedParameterJdbcTemplate.query(sql, params, new ProductRowMapper());
Handling transactions with Spring JDBC Template:
Description:
Spring JDBC Template provides transaction management capabilities. By annotating methods with @Transactional
, you can ensure that a sequence of database operations is executed as a single transaction.
Code Example:
@Transactional public void performTransaction() { // Database operations within this method will be part of a transaction // ... }
Updating and deleting records with Spring JDBC Template:
Description:
Updating and deleting records with Spring JDBC Template involves using the update
method. It allows you to execute SQL statements that modify the database.
Code Example:
// Update operation String updateSql = "UPDATE products SET price = ? WHERE id = ?"; jdbcTemplate.update(updateSql, 50.0, 101); // Delete operation String deleteSql = "DELETE FROM products WHERE id = ?"; jdbcTemplate.update(deleteSql, 101);