Running Queries

    一些查询方法返回一个单一的值。要从一行中检索一个计数或一个特定的值,请使用 queryForObject(..)。后者将返回的 JDBC 类型转换为作为参数传入的 Java 类。如果类型转换无效,会抛出一个 InvalidDataAccessApiUsageException。下面的例子包含两个查询方法,一个是查询 int,另一个是查询 String:

    1. import javax.sql.DataSource;
    2. import org.springframework.jdbc.core.JdbcTemplate;
    3. public class RunAQuery {
    4. private JdbcTemplate jdbcTemplate;
    5. public void setDataSource(DataSource dataSource) {
    6. this.jdbcTemplate = new JdbcTemplate(dataSource);
    7. }
    8. public int getCount() {
    9. return this.jdbcTemplate.queryForObject("select count(*) from mytable", Integer.class);
    10. }
    11. public String getName() {
    12. return this.jdbcTemplate.queryForObject("select name from mytable", String.class);
    13. }
    14. }

    除了单一结果的查询方法外,还有几个方法返回一个列表,其中有查询返回的每一行的一个条目。最通用的方法是 queryForList(..),它返回一个 List,其中每个元素是一个 Map,包含每个列的一个条目,使用列名作为键。如果你在前面的例子中添加一个方法来检索所有行的列表,它可能如下:

    1. private JdbcTemplate jdbcTemplate;
    2. public void setDataSource(DataSource dataSource) {
    3. this.jdbcTemplate = new JdbcTemplate(dataSource);
    4. }
    5. public List<Map<String, Object>> getList() {
    6. return this.jdbcTemplate.queryForList("select * from mytable");
    7. }

    返回的列表将类似于以下内容:

    1. [{name=Bob, id=1}, {name=Mary, id=2}]