English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
public T query(String sql,RowMapper<T> rm)
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 kann viel Code sparen, weil
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
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); } }