Java Tutorial/Spring/RowMapper
Implements RowMapper To Map First Column
File: context.xml
<source lang="java">
<?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:util="http://www.springframework.org/schema/util" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:lang="http://www.springframework.org/schema/lang" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">
<bean id="dataSource" class="org.apache.rumons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> <property name="url" value="jdbc:hsqldb:mem:."/> <property name="username" value="sa"/> <property name="password" value=""/> </bean>
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler"> <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/> </bean> <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.rumonsDbcpNativeJdbcExtractor"/> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean>
</beans></source>
Use RowMapper To Map Row To Entity
File: EmployeeDaoImpl.java
<source lang="java">
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.sql.DataSource; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.BatchPreparedStatementSetter; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.SqlOutParameter; import org.springframework.jdbc.core.SqlParameter; import org.springframework.jdbc.core.simple.ParameterizedRowMapper; import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; import org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback; import org.springframework.jdbc.core.support.AbstractLobStreamingResultSetExtractor; import org.springframework.jdbc.core.support.JdbcDaoSupport; import org.springframework.jdbc.object.MappingSqlQuery; import org.springframework.jdbc.object.SqlUpdate; import org.springframework.jdbc.object.StoredProcedure; import org.springframework.jdbc.support.lob.DefaultLobHandler; import org.springframework.jdbc.support.lob.LobCreator; import org.springframework.jdbc.support.lob.LobHandler; import org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor; import org.springframework.util.FileCopyUtils; //import org.apache.rumons.dbcp.BasicDataSource;
public class EmployeeDaoImpl extends JdbcDaoSupport{
protected void initDao() throws Exception { super.initDao(); getJdbcTemplate().setNativeJdbcExtractor(new SimpleNativeJdbcExtractor()); } public List<Employee> loadAll() { return (List<Employee>) getJdbcTemplate().query("SELECT * FROM employee", new EmployeeRowMapper()); }
} class EmployeeRowMapper implements RowMapper {
public Object mapRow(ResultSet resultSet, int row) throws SQLException { Employee employee = new Employee(); employee.setId(resultSet.getInt("id")); employee.getName().setFirst(resultSet.getString("name_first")); employee.getName().setLast(resultSet.getString("name_last")); employee.setAge(resultSet.getInt("age")); return employee; }
} class Employee {
private Integer id; private Name name = new Name(); private Integer age; private Sex sex; private Address address = new Address(); private List<PhoneNumber> phoneNumbers = new ArrayList<PhoneNumber>(); public Employee() { } public Employee(String firstName, String lastName) { this.getName().setFirst(firstName); this.getName().setLast(lastName); } void setId(Integer id) { this.id = id; } public Integer getId() { return id; } public Address getAddress() { return address; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Name getName() { return name; } public List<PhoneNumber> getPhoneNumbers() { return Collections.unmodifiableList(phoneNumbers); } public void addPhoneNumber(PhoneNumber phoneNumber) { this.phoneNumbers.add(phoneNumber); } public void removePhoneNumber(PhoneNumber phoneNumber) { this.phoneNumbers.remove(phoneNumber); } public void removePhoneNumber(int index) { this.phoneNumbers.remove(index); } public Sex getSex() { return sex; } public void setSex(Sex sex) { this.sex = sex; }
} abstract class Sex {
public static final Sex MALE = new Male(); public static final Sex FEMALE = new Female(); public boolean equals(Object o) { if (o == null) { return false; } return getClass().equals(o.getClass()); }
} class PhoneNumber { } class Address {
private String line1; private String line2; private String city; private String state; private String zip; public void setLine1(String line1) { this.line1 = line1; } public String getLine1() { return this.line1; } public void setLine2(String line2) { this.line2 = line2; } public String getLine2() { return this.line2; } public void setCity(String city) { this.city = city; } public String getCity() { return this.city; } public void setState(String state) { this.state = state; } public String getState() { return this.state; } public void setZip(String zip) { this.zip = zip; } public String getZip() { return this.zip; }
} final class Male extends Sex {
protected Male() { }
} final class Female extends Sex {
protected Female() { }
}
class Name {
private String first; private String middle; private String last; public void setFirst(String first) { this.first = first; } public String getFirst() { return this.first; } public void setMiddle(String middle) { this.middle = middle; } public String getMiddle() { return this.middle; } public void setLast(String last) { this.last = last; } public String getLast() { return this.last; }
}</source>
Use RowMapper To Return List Of String
File: context.xml
<source lang="java">
<?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:util="http://www.springframework.org/schema/util" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:lang="http://www.springframework.org/schema/lang" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">
<bean id="dataSource" class="org.apache.rumons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> <property name="url" value="jdbc:hsqldb:mem:."/> <property name="username" value="sa"/> <property name="password" value=""/> </bean>
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler"> <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/> </bean> <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.rumonsDbcpNativeJdbcExtractor"/> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean>
</beans></source>