JdbcTemplate是Spring框架提供的一个强大的用于简化JDBC操作的工具类。以下是一些常用的方法及代码示例:

  1. 执行查询并返回单个结果
String sql = "SELECT * FROM users WHERE id = ?";
User user = jdbcTemplate.queryForObject(sql, new Object[]{id}, new UserRowMapper());

这里,queryForObject方法执行SQL查询,并通过指定的RowMapper将结果集转换为实体对象。

  1. 执行查询并返回List集合
String sql = "SELECT * FROM users";
List<User> users = jdbcTemplate.query(sql, new UserRowMapper());

query方法会执行SQL查询并返回结果集列表,每个结果行都会通过RowMapper转换为实体对象。

  1. 执行更新操作(INSERT/UPDATE/DELETE)并获取影响行数
String insertSql = "INSERT INTO users(name) VALUES (?)";
int rowsAffected = jdbcTemplate.update(insertSql, userName);
System.out.println("Rows affected: " + rowsAffected);

update方法用于执行非查询操作,返回值表示受影响的行数。

  1. 批量更新操作
String updateSql = "UPDATE users SET name = ? WHERE id = ?";
List<Object[]> batchArgs = new ArrayList<>();
for (User user : usersToUpdate) {
    batchArgs.add(new Object[]{user.getName(), user.getId()});
}
jdbcTemplate.batchUpdate(updateSql, batchArgs);

batchUpdate方法可以一次性执行多个相同的SQL语句,提高效率。

  1. 调用存储过程
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
        .withProcedureName("sp_get_users_by_age")
        .declareParameters(new SqlOutParameter("result", OracleTypes.CURSOR));

Map<String, Object> inParams = new HashMap<>();
inParams.put("minAge", 18);
Map<String, Object> outParams = jdbcCall.execute(inParams);

ResultSet rs = (ResultSet) outParams.get("result");
// 处理结果集...

以上只是JdbcTemplate的部分功能展示,实际使用中还可以结合SqlParameterSource、PreparedStatementCreator等接口进行更灵活的操作。

RowMapper

RowMapper是Spring JDBC中的一个接口,用于将数据库结果集的行转换为Java对象。下面是一个具体的User实体类对应的RowMapper实现:

import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;

public class UserRowMapper implements RowMapper<User> {
    @Override
    public User mapRow(ResultSet rs, int rowNum) throws SQLException {
        User user = new User();
        user.setId(rs.getLong("id")); // 假设用户表中有id字段
        user.setName(rs.getString("name")); // 假设用户表中有name字段
        user.setEmail(rs.getString("email")); // 假设用户表中有email字段
        // ... 更多字段映射...
        return user;
    }
}

在上述代码中,mapRow方法会在每次遍历结果集时被调用,它负责从给定的ResultSet(当前行)中提取数据,并将其封装到User对象中。

然后,在JdbcTemplate的操作中,我们可以使用这个RowMapper来将查询结果转化为User对象列表:

String sql = "SELECT * FROM users";
List<User> users = jdbcTemplate.query(sql, new UserRowMapper());

这样,jdbcTemplate.query()方法会自动调用RowMapper的mapRow方法,将每一行结果转换成User对象并添加到返回的列表中。