Running Queries
一些查询方法返回一个单一的值。要从一行中检索一个计数或一个特定的值,请使用 queryForObject(..)
。后者将返回的 JDBC 类型转换为作为参数传入的 Java 类。如果类型转换无效,会抛出一个 InvalidDataAccessApiUsageException。下面的例子包含两个查询方法,一个是查询 int,另一个是查询 String:
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
public class RunAQuery {
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public int getCount() {
return this.jdbcTemplate.queryForObject("select count(*) from mytable", Integer.class);
}
public String getName() {
return this.jdbcTemplate.queryForObject("select name from mytable", String.class);
}
}
除了单一结果的查询方法外,还有几个方法返回一个列表,其中有查询返回的每一行的一个条目。最通用的方法是 queryForList(..)
,它返回一个 List,其中每个元素是一个 Map,包含每个列的一个条目,使用列名作为键。如果你在前面的例子中添加一个方法来检索所有行的列表,它可能如下:
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public List<Map<String, Object>> getList() {
return this.jdbcTemplate.queryForList("select * from mytable");
}
返回的列表将类似于以下内容:
[{name=Bob, id=1}, {name=Mary, id=2}]