JdbcTemplate主要提供以下五类方法:
-
execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
-
update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
-
query方法及queryForXXX方法:用于执行查询相关语句;
-
call方法:用于执行存储过程、函数相关语句。
NamedParameterJdbcTemplate
支持具名参数(可以批量传入ids,方便一次查询)
PS:具名参数: SQL 按名称(以冒号开头)而不是按位置进行指定. 具名参数更易于维护, 也提升了可读性. 具名参数由框架类在运行时用占位符取代
代码例子:
public NamedParameterJdbcTemplate(JdbcOperations classicJdbcTemplate) {
Assert.notNull(classicJdbcTemplate, "JdbcTemplate must not be null");
this.classicJdbcTemplate = classicJdbcTemplate;
}
public List<Process> getByIdList(List<String> paramList) {
String sql = "SELECT ID FROM PROCESS WHERE ID in (:ids)";
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("ids", paramList);
NamedParameterJdbcTemplate jdbc = new NamedParameterJdbcTemplate(jdbcTemplate);
return jdbc.query(sql, paramMap , (rs, i)->{
return Process.create(rs);
});
}
调用此接口:
@Override
public <T> List<T> query(String sql, Map<String, ?> paramMap, RowMapper<T> rowMapper)
throws DataAccessException {
return query(sql, new MapSqlParameterSource(paramMap), rowMapper);
}
传入一个值的
public Process getById(String id) {
return jdbcTemplate.queryForObject(
"SELECT ID PROCESS WHERE ID=?",
new Object[] {id}, (rs, rowNum) -> {
return Process.create(rs);
});
}
调用的事此接口
@Override
@Nullable
public <T> T queryForObject(String sql, @Nullable Object[] args, RowMapper<T> rowMapper) throws DataAccessException {
List<T> results = query(sql, args, new RowMapperResultSetExtractor<>(rowMapper, 1));
return DataAccessUtils.nullableSingleResult(results);
}