Interfaccia PreparedStatementSetter

Il org.springframework.jdbc.core.PreparedStatementSetterinterface funge da interfaccia di callback generale utilizzata dalla classe JdbcTemplate. Questa interfaccia imposta i valori su una PreparedStatement fornita dalla classe JdbcTemplate, per ciascuno di un numero di aggiornamenti in un batch utilizzando lo stesso SQL.

Le implementazioni sono responsabili dell'impostazione dei parametri necessari. SQL con segnaposto sarà già stato fornito. È più facile usare questa interfaccia rispetto a PreparedStatementCreator. JdbcTemplate creerà PreparedStatement, con il callback responsabile solo dell'impostazione dei valori dei parametri.

Dichiarazione di interfaccia

Di seguito è riportata la dichiarazione per l'interfaccia org.springframework.jdbc.core.PreparedStatementSetter -

public interface PreparedStatementSetter

Utilizzo

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

Step 2 - Utilizzare i metodi dell'oggetto JdbcTemplate per eseguire operazioni sul database durante il passaggio dell'oggetto PreparedStatementSetter per sostituire i segnaposto nella query.

Esempio

L'esempio seguente dimostrerà come leggere una query utilizzando la classe JdbcTemplate e l'interfaccia PreparedStatementSetter. Leggeremo il record disponibile di uno studente in Student Table.

Sintassi

final String SQL = "select * from Student where id = ? ";
List <Student> students = jdbcTemplateObject.query(
   SQL, new PreparedStatementSetter() {
   
   public void setValues(PreparedStatement preparedStatement) throws SQLException {
      preparedStatement.setInt(1, id);
   }
},
new StudentMapper());

Dove,

  • SQL - Seleziona query per leggere gli studenti.

  • jdbcTemplateObject - Oggetto StudentJDBCTemplate per leggere l'oggetto studente dal database.

  • PreparedStatementSetter - Oggetto PreparedStatementSetter per impostare i parametri nella query.

  • StudentMapper - StudentMapper è un oggetto RowMapper per mappare ogni record recuperato all'oggetto studente.

Per comprendere i concetti sopra menzionati relativi a Spring JDBC, scriviamo un esempio che selezionerà una query. 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
      * a record from the Student table corresponding
      * to a passed student id.
   */
   public Student getStudent(Integer id);
}

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 Student getStudent(final Integer id) {
      final String SQL = "select * from Student where id = ? ";
      List <Student> students = jdbcTemplateObject.query(
         SQL, new PreparedStatementSetter() {
		   
         public void setValues(PreparedStatement preparedStatement) throws SQLException {
            preparedStatement.setInt(1, id);
         }
      },
      new StudentMapper());
      return students.get(0);
   }
}

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

package com.tutorialspoint;

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");
      
      Student student = studentJDBCTemplate.getStudent(1);
      System.out.print("ID : " + student.getId() );
      System.out.println(", Age : " + student.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.

ID : 1, Age : 17