📜  Spring JDBC-ResultSetExtractor接口

📅  最后修改于: 2020-11-11 06:11:15             🧑  作者: Mango


org.springframework.jdbc.core.ResultSetExtractor接口是JdbcTemplate的查询方法使用的回调接口。此接口的实现执行从ResultSet提取结果的实际工作,但无需担心异常处理。

SQLExceptions将由调用JdbcTemplate捕获和处理。该接口主要用于JDBC框架本身。对于ResultSet处理,RowMapper通常是一个更简单的选择,它为每行映射一个结果对象,而不是为整个ResultSet映射一个结果对象。

接口声明

以下是org.springframework.jdbc.core.ResultSetExtractor接口的声明-

public interface ResultSetExtractor

用法

步骤1-使用配置的数据源创建一个JdbcTemplate对象。

步骤2-在使用ResultSetExtractor解析结果集时,使用JdbcTemplate对象方法进行数据库操作。

下面的示例将演示如何使用JdbcTemplate类和ResultSetExtractor接口读取查询。我们将在学生表中读取学生的可用记录。

句法

public List listStudents() {
   String SQL = "select * from Student";
      List  students = jdbcTemplateObject.query(SQL, 
         new ResultSetExtractor>(){
         
         public List extractData(
            ResultSet rs) throws SQLException, DataAccessException {
            
            List list = new ArrayList();  
            while(rs.next()){  
               Student student = new Student();
               student.setId(rs.getInt("id"));
               student.setName(rs.getString("name"));
               student.setAge(rs.getInt("age"));
               student.setDescription(rs.getString("description"));
               student.setImage(rs.getBytes("image"));
               list.add(student);  
            }  
            return list;  
         }          
      });
   return students;
}

哪里,

  • SQL-选择查询以阅读学生。

  • jdbcTemplateObject -StudentJDBCTemplate对象,用于从数据库中读取学生对象。

  • ResultSetExtractor-解析结果集对象的ResultSetExtractor对象。

为了理解与Spring JDBC相关的上述概念,让我们编写一个示例来选择查询。为了编写示例,让我们准备好一个可以运行的Eclipse IDE,并使用以下步骤创建一个Spring应用程序。

Step Description
1 Update the project Student created under chapter Spring JDBC – First Application.
2 Update the bean configuration and run the application as explained below.

以下是数据访问对象接口文件StudentDAO.java的内容

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to list down
      * all the records from the Student table.
   */
   public List listStudents();
}

以下是Student.java文件的内容。

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

以下是已定义的DAO接口StudentDAO的实现类文件StudentJDBCTemplate.java

package com.tutorialspoint;

import java.util.List;
import java.util.ArrayList;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;

public class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   public List listStudents() {
      String SQL = "select * from Student";
      List  students = jdbcTemplateObject.query(SQL, 
         new ResultSetExtractor>(){
         
         public List extractData(
            ResultSet rs) throws SQLException, DataAccessException {
            
            List list = new ArrayList();  
            while(rs.next()){  
               Student student = new Student();
               student.setId(rs.getInt("id"));
               student.setName(rs.getString("name"));
               student.setAge(rs.getInt("age"));
               student.setDescription(rs.getString("description"));
               student.setImage(rs.getBytes("image"));
               list.add(student);  
            }  
            return list;  
         }          
      });
      return students;
   }
}

以下是MainApp.java文件的内容。

package com.tutorialspoint;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = 
         new ClassPathXmlApplicationContext("Beans.xml");
      
      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");

      List students = studentJDBCTemplate.listStudents();

      for(Student student: students){
         System.out.print("ID : " + student.getId() );
         System.out.println(", Age : " + student.getAge()); 
      }
   }
}

以下是配置文件Beans.xml




   
   
      
      
      
      
   

   
   
          
   
      

完成创建源和Bean配置文件后,让我们运行该应用程序。如果您的应用程序一切正常,它将打印以下消息。

ID : 1, Age : 17
ID : 3, Age : 18