📅  最后修改于: 2023-12-03 15:12:50.671000             🧑  作者: Mango
org.springframework.jdbc.core.JdbcTemplate
类型的 beanJdbcTemplate 是 Spring 框架提供的数据访问模板,用于简化 JDBC 编程。JdbcTemplate 需要 DataSource 来获取数据库连接。它提供了一系列的方法来执行 SQL 语句和存储过程,并处理结果集。
org.springframework.jdbc.core.JdbcTemplate
bean在 Spring 配置文件中,可以通过以下方式定义 JdbcTemplate bean:
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
其中,dataSource
为实现了 javax.sql.DataSource
接口的 bean,用于获取数据库连接。
另外,可以通过构造器注入的方式来定义 JdbcTemplate bean:
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
JdbcTemplate 提供了 update()
方法来执行 SQL 语句,如 INSERT、UPDATE 和 DELETE 等,该方法会返回受影响的行数:
public int executeUpdate(String sql)
public int executeUpdate(String sql, Object... args)
示例:
jdbcTemplate.update("INSERT INTO users (name, age) VALUES (?, ?)", "Alice", 30);
JdbcTemplate 还提供了批量执行 SQL 语句的方法 batchUpdate()
:
public int[] batchUpdate(String sql, List<Object[]> batchArgs)
示例:
List<Object[]> batchArgs = new ArrayList<>();
batchArgs.add(new Object[]{"Alice", 30});
batchArgs.add(new Object[]{"Bob", 25});
batchArgs.add(new Object[]{"Charlie", 40});
int[] updateCounts = jdbcTemplate.batchUpdate("INSERT INTO users (name, age) VALUES (?, ?)", batchArgs);
如果只需要查询单个结果,可以使用 queryForObject()
方法,该方法会返回查询结果的第一行第一列的值:
public <T> T queryForObject(String sql, Class<T> requiredType)
public <T> T queryForObject(String sql, Object[] args, Class<T> requiredType)
示例:
String name = jdbcTemplate.queryForObject("SELECT name FROM users WHERE id = ?", new Object[]{1}, String.class);
如果需要查询多个结果,可以使用 query()
方法,该方法会返回查询结果的一个列表:
public <T> List<T> query(String sql, RowMapper<T> rowMapper)
public <T> List<T> query(String sql, Object[] args, RowMapper<T> rowMapper)
示例:
查询 users 表中所有用户的信息:
List<User> users = jdbcTemplate.query("SELECT * FROM users", new RowMapper<User>() {
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
return user;
}
});
JdbcTemplate 还提供了 call()
方法来执行存储过程:
public Map<String, Object> call(CallableStatementCreator csc, List<SqlParameter> declaredParameters) throws DataAccessException
public <T> T execute(CallableStatementCreator csc, CallableStatementCallback<T> action) throws DataAccessException
示例:
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
.withProcedureName("sp_update_user_age");
Map<String, Object> inParams = new HashMap<>();
inParams.put("id", 1);
inParams.put("age", 40);
SqlParameterSource in = new MapSqlParameterSource(inParams);
jdbcCall.execute(in);
JdbcTemplate 可以帮助开发者简化 JDBC 编程,提供了一系列的方法来执行 SQL 语句和存储过程,并处理结果集。在定义 JdbcTemplate bean 时需要注意为其设置数据源,使用时可以直接调用其提供的方法来访问数据库。