Spring jdbc 对象Mapper的简单封装
    一般查询实体的时候,都需要这么使用:
/** *//**
     * 根据id查询
     * 
     * @return
     */
    public Emp queryEmpById(Integer id)
    {
        String sql = "select * from emp where empno = ?";
        ParameterizedRowMapper<Emp> mapper = new ParameterizedRowMapper<Emp>()
        {
            public Emp mapRow(ResultSet rs, int rowNum) throws SQLException
            {
                Emp emp = new Emp();
                System.out.println("row:" + rowNum);
                emp.setEmpno(rs.getInt("empno"));
                emp.setEname(rs.getString("ename"));
                return emp;
            }
        };
        return this.getSimpleJdbcTemplate().queryForObject(sql, mapper, id);
    }
能不能像Hibernate那样自动set这些值呢,用反射可以实现.
package orm;
import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
/** *//**
 * 通用的Object包装类(类型问题,依然是个瓶颈,如果有好的解决方案请pm我)
 * 
 * 功能:查询对象类型或对象集合时的通用包装类
 * 
 */
@SuppressWarnings("unchecked")
public class ObjectMapper implements ParameterizedRowMapper
{
    private Class clazz;
    public ObjectMapper(Class clazz)
    {
        this.clazz = clazz;
    }
    /** *//**
     * 重写mapRow方法
     */
    @Override
    public Object mapRow(ResultSet rs, int rowNum) throws SQLException
    {
        try
        {
            Object obj = clazz.newInstance();
            Field fields[] = obj.getClass().getDeclaredFields();
            for (int i = 0; i < fields.length; i++)
            {
                Field field = fields[i];
                // 暴力访问
                field.setAccessible(true);
                this.typeMapper(field, obj, rs);
                // 恢复默认
                field.setAccessible(false);
            }