`

JdbcTemplate - 查询

阅读更多

使用JdbcTemplate进行查询时,可以使用queryForXXX()等方法,例如下面使用queryForInt()方法传回user表格中的资料笔数:

jdbcTemplate.queryForInt("SELECT COUNT(*) FROM user");


也可以使用queryForObject()传回一个查询后的结果物件,例如下例传回一个String物件:

String name = (String) jdbcTemplate.queryForObject(
                "SELECT name FROM USER WHERE id = ?",
                 new Object[] {id},
                 java.lang.String.class);


上面两个例子传回的都是单一笔资料,如果传回多笔资料,则可以使用queryForList()方法,例如:

List rows = jdbcTemplate.queryForList(
          "SELECT * FROM user WHERE id=" + id.intValue());



传回的List中包括的是Map物件,每个Map物件代表查询结果中的一笔资料,每笔资料包括多个栏位内容,要取得栏位中的值,要使用栏位名称作为键(Key),例如:

...
Iterator it = rows.iterator();
while(it.hasNext()) {
    Map userMap = (Map) it.next();
    System.out.println(userMap.get("id"));
    System.out.println(userMap.get("name"));
    System.out.println(userMap.get("age"));
    ...
}
...


您可以实作org.springframework.jdbc.core.RowCallbackHandler介面,在查询到资料之后先作一些处理再传回,例如修改一下 使用 JdbcTemplate 中UserDAO的find()方法如下:

...
public User find(Integer id) {
    final User user = new User();
    jdbcTemplate.query(
       "SELECT * FROM user WHERE id = ?",
       new Object[] {id},
         new RowCallbackHandler() {
            public void processRow(ResultSet rs)
                                    throws SQLException {
                user.setId(new Integer(rs.getInt("id")));
                user.setName(rs.getString("name"));
                user.setAge(new Integer(rs.getInt("age")));
            }
        });
   
    return user;
}
...


如果一次要取回很多查询结果的物件,则您可以先实作org.springframework.jdbc.core.RowMapper介面,例如:

package onlyfun.caterpillar;

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

import org.springframework.jdbc.core.RowMapper;

public class UserRowMapper implements RowMapper {

    public Object mapRow(ResultSet rs,
                         int rowNum) throws SQLException {
        User user = new User();

        user.setId(new Integer(rs.getInt("id")));
        user.setName(rs.getString("name"));
        user.setAge(new Integer(rs.getInt("age")));

        return user;
    }
}


接着在查询时可以使用org.springframework.jdbc.core.RowMapperResultReader这么设定, RowMapperResultReader实作了org.springframework.jdbc.core.ResultReader介面:

...
List users = jdbcTemplate.query(
          "SELECT * FROM user",
        new RowMapperResultReader(new UserRowMapper()));

for(int i = 0; i < users.size(); i++) {
    User user = (User) list.get(i);
    System.out.println("\tId:\t" + user.getId());
    System.out.println("\tName:\t" + next.getName());
    System.out.println("\tAge:\n" + user.getAge());
}
...


传回的List物件中,包括了从资料库中查询出来的结果,并已封装为User类别的实例。
分享到:
评论
1 楼 bushkarl 2011-03-14  
用上,谢这位哥们了!

相关推荐

    jdbcTemplate-spring对jdbc的支持

    2. **结果集处理**:JdbcTemplate提供了多种方法来处理查询结果,如MapListRowCallbackHandler,将每一行数据转换为Map,以及ResultSetExtractor,允许自定义结果集的转换逻辑。 3. **事务管理**:Spring的事务管理...

    打印JdbcTemplate执行sql

    通过使用模板方法设计模式,`JdbcTemplate`提供了一系列静态和非静态的方法来执行各种SQL操作,如查询、更新、插入和删除。 为了打印`JdbcTemplate`执行的SQL语句,我们需要关注以下几点: 1. **日志配置**:首先...

    Spring--JdbcTemplate.pdf

    3. 执行分页查询:通过分页信息调用JdbcTemplate方法来返回结果集合。 JdbcTemplate的使用涉及到许多细节,如事务管理、异常处理和SQL注入防护等。在具体应用时,开发者需要结合实际业务需求和Spring框架的其他特性...

    JdbcTemplate查询

    ### JdbcTemplate查询详解 #### 一、概述 `JdbcTemplate`是Spring框架中提供的一个用于简化JDBC编程的工具类,它提供了丰富的API来帮助开发者更便捷地进行数据库操作。相较于传统的JDBC编程方式,使用`...

    spring自带的jdbcTemplate查询、插入预编译使用

    在使用`jdbcTemplate`进行预编译查询时,我们通常会使用`query()`或`queryForList()`方法。例如: ```java String sql = "SELECT * FROM table WHERE id = ?"; Object[] params = {1}; List&lt;MyObject&gt; result = ...

    使用Spring的JdbcTemplate实现分页功能

    使用Spring的JdbcTemplate实现分页功能

    jdbcTemplate分页彻底解决,使用游标滚动

    在`JdbcTemplate`中,我们可以使用`callProcedure()`或`execute()`方法执行带有游标的SQL查询。例如,可以创建一个存储过程,该过程返回一个可滚动的结果集。然后,`JdbcTemplate`会使用`ResultSetExtractor`接口来...

    spring-jdbcTemplate实例工程

    1. **JdbcTemplate对象**:这是Spring JdbcTemplate的核心,它包含了执行SQL语句的所有方法,如update()用于更新,query()用于查询,insert()用于插入等。 2. **参数绑定**:JdbcTemplate支持多种方式的参数绑定,...

    Spring框架JdbcTemplate类中查询方法介绍

    Spring 框架 JdbcTemplate 类中查询方法介绍 JdbcTemplate 是 Spring 框架中 org.springframework.jdbc.core 包提供的 JDBC 模板类,它是核心类,其他模板类都是基于它封装完成的。JdbcTemplate 类主要提供四类方法...

    simple-jdbctemplate-1.5.3.zip_Java编程_Java_

    - **JdbcTemplate的高级用法**:`SimpleJdbcTemplate`是`JdbcTemplate`的轻量级版本,若需更多定制功能,可以考虑直接使用`JdbcTemplate`。 总结,`SimpleJdbcTemplate`是Spring对JDBC的一层抽象,它降低了数据库...

    spring-springMvc-jdbctemplate.rar

    JdbcTemplate支持SQL语句的动态构造,可以方便地执行查询、更新、插入和删除等操作。 数据库方面,本项目选择了Oracle,这是一个流行的商业关系型数据库管理系统(RDBMS)。Oracle提供了高性能、高可用性和安全性,...

    java基于jdbctemplate数据持久层操作封装

    Java中的JdbcTemplate是Spring框架提供的一种用于简化JDBC(Java Database Connectivity)操作的工具,它在数据持久层操作中扮演着重要角色。JdbcTemplate通过消除大量重复的JDBC样板代码,提高了代码的可读性和可...

    Spring jdbctemplate + mysql 分页封装

    本文将深入探讨如何利用Spring的JdbcTemplate进行MySQL数据库的分页查询,并对其进行封装,提高代码的复用性和可维护性。 首先,了解Spring JdbcTemplate的基本用法。JdbcTemplate是Spring提供的一个模板类,用于...

    Spring JdbcTemplate查询实例

    使用JdbcTemplate查询数据,你需要创建一个`JdbcTemplate`实例,通常通过依赖注入的方式从Spring容器中获取。例如: ```java @Autowired private JdbcTemplate jdbcTemplate; ``` 然后,你可以使用`...

    SSH笔记-Spring JdbcTemplate

    1. **JdbcTemplate的基本使用**:JdbcTemplate的核心在于它的`update()`和`query()`方法,前者用于执行更新语句(INSERT、UPDATE、DELETE),后者用于执行查询语句。这些方法接收SQL语句作为参数,并可以传递绑定...

    Spring-JdbcTemplate

    **Spring-JdbcTemplate 知识详解** `Spring-JdbcTemplate` 是 Spring 框架中的一个核心模块,主要用于简化数据库操作,提供了强大的数据访问功能。它通过模板方法设计模式封装了 SQL 的执行,使得开发者无需直接与 ...

    一个简单的spring-jdbctemplate扩展

    例如,如果项目中有`User`实体,那么它将有如`id`、`name`、`email`等属性,对应的getter和setter方法使得JdbcTemplate可以方便地将数据库查询结果映射到这些对象上。 "util"目录可能包含了一些工具类,例如数据库...

    SpringJdbcTemplate封装工具类

    SpringJdbcTemplate支持分页查询,通过`SimpleJdbcCall`或`NamedParameterJdbcCall`类,可以配合`RowCallbackHandler`或`ResultSetExtractor`处理分页结果。此外,还可以使用`JdbcPagingItemReader`作为Spring ...

    springMVC-jdbcTemplate jar包

    4. **使用`jdbcTemplate`进行数据库操作**:现在你可以通过@Autowired注解注入`jdbcTemplate`到你的业务逻辑类中,然后使用其提供的方法执行SQL查询、更新等操作。例如,执行一个简单的SELECT语句: ```java @...

Global site tag (gtag.js) - Google Analytics