01: package org.springframework.jdbc.core.simple;
02:
03: import org.springframework.jdbc.core.AbstractBeanPropertyRowMapper;
04:
05: import java.sql.ResultSet;
06: import java.sql.SQLException;
07:
08: /**
09: * Generic ParameterizedRowMapper implementation that converts a row into a new instance
10: * of the specified mapped target class. The mapped target class must be a top-level class
11: * and it must have a default or no-arg constructor.
12: *
13: * Uses Java 5 covariant return types to override the return type of the {@link #mapRow} method
14: * to be the type parameter <code>T</code>.
15: *
16: * Column values are mapped based on matching the column name as obtained from result set
17: * metadata to public setters for the corresponding properties. The names are matched either
18: * directly or by transforming a name separating the parts with underscores to the same name
19: * using "camel" case.
20: *
21: * Mapping is provided for fields in the target class that are defined as any of the
22: * following types: String, byte, Byte, short, Short, int, Integer, long, Long, float, Float,
23: * double, Double, BigDecimal, boolean, Boolean and java.util.Date.
24: *
25: * To facilitate mapping between columns and fields that don't have matching names, try using column
26: * aliases in the SQL statement like "select fname as first_name from customer".
27: *
28: * Please note that this class is designed to provide convenience rather than high performance.
29: * For best performance consider using a custom RowMapper.
30: *
31: * @author trisberg
32: * @since 2.5
33: * @see ParameterizedRowMapper
34: */
35: public class ParameterizedBeanPropertyRowMapper<T> extends
36: AbstractBeanPropertyRowMapper implements
37: ParameterizedRowMapper<T> {
38:
39: /**
40: * Create a new ParameterizedBeanPropertyRowMapper.
41: * @see #setMappedClass
42: */
43: public ParameterizedBeanPropertyRowMapper() {
44: }
45:
46: /**
47: * Static factory method to create a new ParameterizedBeanPropertyRowMapper.
48: * @param mappedClass the class that each row should be mapped to.
49: */
50: public static <T> ParameterizedBeanPropertyRowMapper<T> newInstance(
51: Class<T> mappedClass) {
52: ParameterizedBeanPropertyRowMapper<T> newInstance = new ParameterizedBeanPropertyRowMapper<T>();
53: newInstance.setMappedClass(mappedClass);
54: return newInstance;
55: }
56:
57: /**
58: * Set the class that each row should be mapped to.
59: * @param mappedClass the mapped class
60: */
61: public void setMappedClass(Class<T> mappedClass) {
62: doSetMappedClass(mappedClass);
63: }
64:
65: /**
66: * Extract the values for all columns in the current row.
67: * <p>Utilizes public setters and result set metadata.
68: * @see java.sql.ResultSetMetaData
69: */
70: @SuppressWarnings("unchecked")
71: public T mapRow(ResultSet rs, int rowNumber) throws SQLException {
72: return (T) doMapRow(rs, rowNumber);
73: }
74:
75: }
|