Spring JDBC - ResultSetExtractor Arayüzü
org.springframework.jdbc.core.ResultSetExtractorarabirim, JdbcTemplate'in sorgu yöntemleri tarafından kullanılan bir geri arama arabirimidir. Bu arayüzün uygulamaları, bir ResultSet'ten sonuçları ayıklama işini gerçekleştirir, ancak istisna işleme konusunda endişelenmenize gerek yoktur.
SQLExceptions, çağıran JdbcTemplate tarafından yakalanacak ve işlenecektir. Bu arayüz esas olarak JDBC çerçevesi içinde kullanılır. Bir RowMapper, ResultSet işlemesi için genellikle daha basit bir seçimdir ve tüm ResultSet için bir sonuç nesnesi yerine satır başına bir sonuç nesnesini eşler.
Arayüz Beyanı
Org.springframework.jdbc.core.ResultSetExtractor arabiriminin bildirimi aşağıdadır -
public interface ResultSetExtractor
Kullanım
Step 1 - Yapılandırılmış bir veri kaynağı kullanarak bir JdbcTemplate nesnesi oluşturun.
Step 2 - ResultSetExtractor kullanarak sonuç kümesini ayrıştırırken veritabanı işlemleri yapmak için JdbcTemplate nesne yöntemlerini kullanın.
Misal
Aşağıdaki örnek, JdbcTemplate sınıfı ve ResultSetExtractor arabirimi kullanılarak bir sorgunun nasıl okunacağını gösterecektir. Öğrenci Masasında bir öğrencinin mevcut kaydını okuyacağız.
Sözdizimi
public List<Student> listStudents() {
String SQL = "select * from Student";
List <Student> students = jdbcTemplateObject.query(SQL,
new ResultSetExtractor<List<Student>>(){
public List<Student> extractData(
ResultSet rs) throws SQLException, DataAccessException {
List<Student> list = new ArrayList<Student>();
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;
}
Nerede,
SQL - Öğrencileri okumak için sorguyu seçin.
jdbcTemplateObject - Öğrenci nesnesini veritabanından okumak için StudentJDBCTemplate nesnesi.
ResultSetExtractor - Sonuç kümesi nesnesini ayrıştırmak için ResultSetExtractor nesnesi.
Spring JDBC ile ilgili yukarıda bahsedilen kavramları anlamak için bir sorgu seçecek bir örnek yazalım. Örneğimizi yazmak için, yerinde çalışan bir Eclipse IDE'ye sahip olalım ve bir Spring uygulaması oluşturmak için aşağıdaki adımları kullanalım.
Adım | Açıklama |
---|---|
1 | Spring JDBC - First Application bölümünde oluşturulan öğrenci projesini güncelleyin . |
2 | Fasulye yapılandırmasını güncelleyin ve uygulamayı aşağıda açıklandığı gibi çalıştırın. |
Veri Erişim Nesnesi arayüz dosyasının içeriği aşağıdadır 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<Student> listStudents();
}
Aşağıdakilerin içeriği Student.java dosya.
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;
}
}
Uygulama sınıfı dosyası aşağıdadır StudentJDBCTemplate.java tanımlı DAO arayüzü StudentDAO için.
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<Student> listStudents() {
String SQL = "select * from Student";
List <Student> students = jdbcTemplateObject.query(SQL,
new ResultSetExtractor<List<Student>>(){
public List<Student> extractData(
ResultSet rs) throws SQLException, DataAccessException {
List<Student> list = new ArrayList<Student>();
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;
}
}
Aşağıdakilerin içeriği MainApp.java dosya.
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<Student> students = studentJDBCTemplate.listStudents();
for(Student student: students){
System.out.print("ID : " + student.getId() );
System.out.println(", Age : " + student.getAge());
}
}
}
Yapılandırma dosyası aşağıdadır Beans.xml.
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd ">
<!-- Initialization for data source -->
<bean id = "dataSource"
class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name = "driverClassName" value = "com.mysql.jdbc.Driver"/>
<property name = "url" value = "jdbc:mysql://localhost:3306/TEST"/>
<property name = "username" value = "root"/>
<property name = "password" value = "admin"/>
</bean>
<!-- Definition for studentJDBCTemplate bean -->
<bean id = "studentJDBCTemplate"
class = "com.tutorialspoint.StudentJDBCTemplate">
<property name = "dataSource" ref = "dataSource" />
</bean>
</beans>
Kaynak ve bean yapılandırma dosyalarını oluşturmayı tamamladığınızda uygulamayı çalıştırmamıza izin verin. Uygulamanızda her şey yolundaysa, aşağıdaki mesajı yazdıracaktır.
ID : 1, Age : 17
ID : 3, Age : 18