Spring JDBC - Interfaccia RowMapper

Il org.springframework.jdbc.core.RowMapper<T>viene utilizzata da JdbcTemplate per mappare le righe di un ResultSet su una base per riga. Le implementazioni di questa interfaccia eseguono il lavoro effettivo di mappatura di ogni riga su un oggetto risultato. SQLExceptions, se presenti, verranno rilevate e gestite dal JdbcTemplate chiamante.

Dichiarazione di interfaccia

Di seguito è riportata la dichiarazione per org.springframework.jdbc.core.RowMapper<T> interfaccia -

public interface RowMapper<T>

Utilizzo

Step 1 - Crea un oggetto JdbcTemplate utilizzando un'origine dati configurata.

Step 2 - Crea un oggetto StudentMapper che implementa l'interfaccia RowMapper.

Step 3 - Utilizzare i metodi dell'oggetto JdbcTemplate per eseguire operazioni sul database durante l'utilizzo dell'oggetto StudentMapper.

L'esempio seguente dimostrerà come leggere una query utilizzando spring jdbc. Mapperemo i record letti dalla tabella dello studente all'oggetto Student utilizzando l'oggetto StudentMapper.

Sintassi

String SQL = "select * from Student";
List <Student> students = jdbcTemplateObject.query(SQL, new StudentMapper());

Dove

  • SQL - Leggi query per leggere tutti i record degli studenti.

  • jdbcTemplateObject - Oggetto StudentJDBCTemplate per leggere i record degli studenti dal database.

  • StudentMapper - Oggetto StudentMapper per mappare i record degli studenti agli oggetti degli studenti.

Per comprendere i concetti sopra menzionati relativi a Spring JDBC, scriviamo un esempio che leggerà una query e mapperà il risultato utilizzando l'oggetto StudentMapper. Per scrivere il nostro esempio, disponiamo di un IDE Eclipse funzionante e utilizziamo i seguenti passaggi per creare un'applicazione Spring.

Passo Descrizione
1 Aggiorna il progetto Studente creato nel capitolo Spring JDBC - Prima applicazione .
2 Aggiorna la configurazione del bean ed esegui l'applicazione come spiegato di seguito.

Di seguito è riportato il contenuto del file di interfaccia dell'oggetto di accesso ai dati 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();   
}

Di seguito è riportato il contenuto del file Student.java file.

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;
   }
}

Di seguito è riportato il contenuto del file StudentMapper.java file.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

public class StudentMapper implements RowMapper<Student> {
   public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
      Student student = new Student();
      student.setId(rs.getInt("id"));
      student.setName(rs.getString("name"));
      student.setAge(rs.getInt("age"));
      return student;
   }
}

Di seguito è riportato il file della classe di implementazione StudentJDBCTemplate.java per l'interfaccia DAO definita StudentDAO.

package com.tutorialspoint;

import java.util.List;
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 StudentMapper());
      return students;
   }
}

Di seguito è riportato il contenuto del file MainApp.java file

package com.tutorialspoint;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.StudentJDBCTemplate;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
      
      System.out.println("------Listing Multiple Records--------" );
      List<Student> students = studentJDBCTemplate.listStudents();
      
      for (Student record : students) {
         System.out.print("ID : " + record.getId() );
         System.out.print(", Name : " + record.getName() );
         System.out.println(", Age : " + record.getAge());
      }  
   }
}

Di seguito è riportato il file di configurazione 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>

Una volta terminata la creazione dei file di configurazione dei bean e dei sorgenti, eseguiamo l'applicazione. Se tutto va bene con la tua applicazione, verrà stampato il seguente messaggio.

------Listing Multiple Records--------
ID : 1, Name : Zara, Age : 17
ID : 3, Name : Ayan, Age : 18