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

Exemple de RowMapper|Obtenir des enregistrements via Spring JdbcTemplate

Comme ResultSetExtractor, nous pouvons utiliser l'interface RowMapper via JdbcTemplate de la classe query()La méthode récupère les enregistrements de la base de données. Pendant l'exécution, nous devons maintenant passer une instance de RowMapper.

Syntaxe de la méthode de requête utilisant RowMapper

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

Interface RowMapper

RowMapper L'interface permet d'utiliser des instances de classes utilisateur définies pour mapper les lignes de la relation. Il itère internement ResultSet et les ajoute à un ensemble. Par conséquent, nous n'avons pas besoin d'écrire un grand nombre de code pour obtenir les enregistrements en tant que ResultSetExtractor.

RowMapper est supérieur à ResultSetExtractor

RowMapper peut économiser beaucoup de code, car

Méthode de l'interface RowMapper

Il ne définit qu'une méthode MapRow, qui accepte une instance de ResultSet et un int en tant que liste de paramètres. La syntaxe de cette méthode est la suivante:

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

Exemple d'interface RowMapper pour afficher tous les enregistrements de la table

Nous supposons que vous avez déjà installé Oracle10g a créé les tables suivantes dans la base de données.

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

Employee.java

Cette classe contient3une classe avec un constructeur, des propriétés avec des setters et getters ainsi qu'une méthode toString() supplémentaire.

package com.w3codebox;
public class Employee {
private int id;
private String name;
private float salary;
//no-arg and parameterized constructors
//getters and setters
public String toString(){
    return id+" "+name+" "+salary;
}
}

EmployeeDao.java

Il contient les attributs jdbcTemplate et une méthode 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 utilisé pour contenir des informations sur la base de données, telles que le nom de la classe du pilote, l'URL de connexion, le nom d'utilisateur et le mot de passe.

Dans la classe JdbcTemplate de type DriverManagerDataSource, il y a un nom datasource Les propriétés. Par conséquent, nous devons fournir une référence à l'objet DriverManagerDataSource pour les propriétés du datasorce dans la classe JdbcTemplate.

Ici, nous utilisons l'objet JdbcTemplate dans la classe EmployeeDao, donc nous le transmettons par le biais de la méthode setter, mais vous pouvez également utiliser le constructeur.

<?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

Cette classe récupère les Beans à partir du fichier applicationContext.xml et appelle la méthode getAllEmployeesRowMapper() de la 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);
}
}