English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Esempio di RowMapper|Recupero delle registrazioni tramite Spring JdbcTemplate

Come per ResultSetExtractor, possiamo utilizzare l'interfaccia RowMapper tramite JdbcTemplate la classe query()Il metodo recupera le registrazioni dal database. Durante l'esecuzione, ora dobbiamo passare un'istanza di RowMapper.

Sintassi del metodo di query utilizzando RowMapper

public T query(String sql,RowMapper<T> rm)

Interfaccia RowMapper

RowMapper L'interfaccia permette di mappare le righe utilizzando un'istanza della classe definita dall'utente. Internamente itera sul ResultSet e lo aggiunge a una collezione. Pertanto, non è necessario scrivere molto codice per ottenere le record come ResultSetExtractor.

RowMapper è superiore a ResultSetExtractor

RowMapper può risparmiare molto codice perché

Metodo dell'interfaccia RowMapper

Definisce un metodo MapRow, che accetta un'istanza di ResultSet e un int come lista di parametri. La sintassi del metodo è la seguente:

public T mapRow(ResultSet rs, int rowNumber)throws SQLException

Esempio di interfaccia RowMapper per visualizzare tutti i record della tabella

Supponiamo che tu abbia già creato le seguenti tabelle nel database Oracle10g.

create table employee(
id number(10),
name varchar2(100),
salary number(10)
);

Employee.java

Questa classe contiene 3 attributi con costruttore, setter e getter e un metodo toString() aggiuntivo.

package com.w3codebox;
public class Employee {
private int id;
private String name;
private float salary;
//costruttori senza argomenti e parametrizzati
//getter e setter
public String toString(){
    return id+" "+name+" "+salary;
}
}

EmployeeDao.java

Esso contiene le proprietà jdbcTemplate e un metodo getAllEmployeesRowMapper.

package com.w3codebox;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.jdbc.core.RowMapper;
public class EmployeeDao {
private JdbcTemplate template;
public void setTemplate(JdbcTemplate template) {
    this.template = template;
}
public List<Employee> getAllEmployeesRowMapper(){
 return template.query("select * from employee",new RowMapper<Employee>(){
    @Override
    public Employee mapRow(ResultSet rs, int rownumber) throws SQLException {
        Employee e=new Employee();
        e.setId(rs.getInt(1));
        e.setName(rs.getString(2));
        e.setSalary(rs.getInt(3));
        return e;
    }
    });
}
}

applicationContext.xml

DriverManagerDataSource utilizzato per contenere informazioni sul database, come il nome della classe del driver, l'URL di connessione, il nome utente e la password.

Nella classe JdbcTemplate di tipo DriverManagerDataSource c'è un metodo chiamato datasource proprietà. Pertanto, dobbiamo fornire una riferimento all'oggetto DriverManagerDataSource per l'attributo di sorgente dati nella classe JdbcTemplate.

In questo contesto, abbiamo utilizzato l'oggetto JdbcTemplate nella classe EmployeeDao, quindi lo abbiamo passato tramite il metodo setter, ma puoi anche utilizzare il costruttore.

<?xml version="1.0" encoding="UTF-8"?>
<beans}}
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="username" value="system" />
<property name="password" value="oracle" />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="ds"></property>
</bean>
<bean id="edao" class="com.w3codebox.EmployeeDao">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
</beans>

Test.java

Questa classe recupera Bean dal file applicationContext.xml e chiama il metodo getAllEmployeesRowMapper() della classe EmployeeDao.

package com.w3codebox;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    EmployeeDao dao = (EmployeeDao)ctx.getBean("edao");
    List<Employee> list = dao.getAllEmployeesRowMapper();
    for(Employee e:list)
        System.out.println(e);
}
}