Interface PreparedStatementSetter
o org.springframework.jdbc.core.PreparedStatementSetterinterface atua como uma interface de retorno de chamada geral usada pela classe JdbcTemplate. Essa interface define valores em um PreparedStatement fornecido pela classe JdbcTemplate, para cada uma das várias atualizações em um lote usando o mesmo SQL.
As implementações são responsáveis por definir todos os parâmetros necessários. SQL com marcadores de posição já terá sido fornecido. É mais fácil usar essa interface do que PreparedStatementCreator. O JdbcTemplate criará o PreparedStatement, com o callback sendo responsável apenas por definir os valores dos parâmetros.
Declaração de Interface
A seguir está a declaração para a interface org.springframework.jdbc.core.PreparedStatementSetter -
public interface PreparedStatementSetter
Uso
Step 1 - Crie um objeto JdbcTemplate usando uma fonte de dados configurada.
Step 2 - Use métodos de objeto JdbcTemplate para fazer operações de banco de dados enquanto passa o objeto PreparedStatementSetter para substituir os marcadores de posição na consulta.
Exemplo
O exemplo a seguir demonstrará como ler uma consulta usando a classe JdbcTemplate e a interface PreparedStatementSetter. Leremos o registro disponível de um aluno na Tabela do Aluno.
Sintaxe
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());
Onde,
SQL - Selecione consulta para ler os alunos.
jdbcTemplateObject - Objeto StudentJDBCTemplate para ler o objeto do aluno do banco de dados.
PreparedStatementSetter - Objeto PreparedStatementSetter para definir parâmetros na consulta.
StudentMapper - StudentMapper é um objeto RowMapper para mapear cada registro obtido para o objeto do aluno.
Para entender os conceitos mencionados acima relacionados ao Spring JDBC, vamos escrever um exemplo que selecionará uma consulta. Para escrever nosso exemplo, vamos ter um Eclipse IDE funcionando e usar as seguintes etapas para criar um aplicativo Spring.
Degrau | Descrição |
---|---|
1 | Atualize o projeto que o Aluno criou no capítulo Spring JDBC - Primeiro Aplicativo . |
2 | Atualize a configuração do bean e execute o aplicativo conforme explicado abaixo. |
A seguir está o conteúdo do arquivo de interface do Data Access Object 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);
}
A seguir está o conteúdo do Student.java Arquivo.
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;
}
}
A seguir está o conteúdo do StudentMapper.java Arquivo.
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;
}
}
A seguir está o arquivo de classe de implementação StudentJDBCTemplate.java para a interface DAO definida 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);
}
}
A seguir está o conteúdo do MainApp.java Arquivo.
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());
}
}
A seguir está o arquivo de configuração 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>
Assim que terminar de criar os arquivos de configuração de código-fonte e bean, vamos executar o aplicativo. Se tudo estiver bem com seu aplicativo, ele imprimirá a seguinte mensagem.
ID : 1, Age : 17