English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Como ResultSetExtractor, podemos usar a interface RowMapper através
JdbcTemplate
da classe
query()
O método obtém registros do banco de dados. Durante a execução, precisamos passar uma instância de RowMapper.
public T query(String sql,RowMapper<T> rm)
RowMapper
A interface permite usar instâncias de classes definidas pelo usuário para mapear as linhas da relação. Internamente, ela itera sobre o ResultSet e adiciona ao conjunto. Portanto, não precisamos escrever muito código para obter os registros como ResultSetExtractor.
RowMapper pode economizar muito código, porque
Ele define apenas um método MapRow, que aceita uma instância ResultSet e um inteiro como lista de parâmetros. A sintaxe do método é a seguinte:
public T mapRow(ResultSet rs, int rowNumber)throws SQLException
Nós supomos que você já tenha o Oracle10foi criado o seguinte tabela no banco de dados g.
create table employee( id number(10), name varchar2(100), salary número(10) );
Employee.java
Este classe contém3um com construtor, setter e getter de propriedades e um método toString() adicional.
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
Ele contém as propriedades jdbcTemplate e um método 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 { 1)); 2)); e.setSalary(rs.getInt(3)); return e; } }); } }
applicationContext.xml
DriverManagerDataSource usado para conter informações sobre o banco de dados, como o nome da classe do driver, a URL de conexão, o nome de usuário e a senha.
No JdbcTemplate do tipo DriverManagerDataSource há um método chamado
datasource
A propriedade. Portanto, precisamos fornecer uma referência ao objeto DriverManagerDataSource para a propriedade do provedor de dados no JdbcTemplate.
Aqui, usamos o objeto JdbcTemplate na classe EmployeeDao, portanto, passamos por meio do método setter, mas você também pode usar o construtor.
<?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
Este tipo obtém o Bean do arquivo applicationContext.xml e chama o método getAllEmployeesRowMapper() da 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); } }