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

RowMapper-Beispiel|Datensätze mit Spring JdbcTemplate abrufen

Wie ResultSetExtractor können wir die RowMapper-Schnittstelle verwenden, um JdbcTemplate der Klasse query()Die Methode liest Datensätze aus der Datenbank. Während der Ausführung müssen wir jetzt das RowMapper-Objekt übergeben.

Syntax der Abfrage-Methode, die RowMapper verwendet

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

RowMapper-Schnittstelle

RowMapper Die Schnittstelle ermöglicht die Verwendung von Instanzen benutzerdefinierter Klassen, um Zeilen zu mappen. Sie iteriert intern über das ResultSet und fügt es zur Sammlung hinzu. Daher müssen wir nicht viel Code schreiben, um die Einträge als ResultSetExtractor zu erhalten.

RowMapper ist besser als ResultSetExtractor

RowMapper kann viel Code sparen, weil

Methoden der RowMapper-Schnittstelle

Es definiert nur eine Methode MapRow, die ein ResultSet-Objekt und einen int als Parameterliste akzeptiert. Die Syntax der Methode ist wie folgt:

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

Ein Beispiel für die RowMapper-Schnittstelle, um alle Einträge der Tabelle anzuzeigen

Wir gehen davon aus, dass Sie bereits in Oracle10wurde in der Datenbank folgendes Table erstellt.

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

Employee.java

Diese Klasse enthält3eine mit Konstruktor, Setter und Getter bestückte Eigenschaft sowie eine zusätzliche toString()-Methode.

package com.w3codebox;
public class Employee {
private int id;
private String name;
private float salary;
//nein-Argument und parameterisierte Konstruktoren
//Getter und Setter
public String toString(){
    return id+" "+name+" "+salary;
}
}

EmployeeDao.java

Es enthält die Eigenschaft jdbcTemplate und eine Methode 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 used to include information about the database, such as the driver class name, connection URL, username, and password.

In the JdbcTemplate class of type DriverManagerDataSource, there is a named datasource Therefore, we need to provide a reference to the DriverManagerDataSource object for the data source properties in the JdbcTemplate class.

Hier verwenden wir das JdbcTemplate-Objekt in der Klasse EmployeeDao, daher übergeben wir es über die Setter-Methode, aber Sie können auch den Konstruktor verwenden.

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

Diese Klasse erhält Bean aus der Datei applicationContext.xml und ruft die Methode getAllEmployeesRowMapper() der Klasse EmployeeDao auf.

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