日期:2014-05-16 浏览次数:20521 次
?
??? 继续上一篇的功能改造,小弟我发现每次都要根据自己定义的实体类去直接实现 PageTemplate类中private List ResultSetForList(ResultSet rs, RowMapper rm)方法中的RowMapper方法,实在是很麻烦,不但要定义实体类,每次对应不同的实体类,总是需要实现RowMapper,麻烦死了。自己根据反射机制的一部分写了一个从记录集映射实体类的小东西。下面就和大家分享一下。
?
1.DefaultMapper类
实现RowMapper 接口的基类
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import com.free.source.plusin.ResultSet4Bean;
public class DefaultMapper implements RowMapper {
private ResultSet4Bean rsb;
public
DefaultMapper(String className)
{
?? rsb=new
ResultSet4Bean(className);
}
public Object mapRow(ResultSet arg0, int
arg1) throws SQLException {
?? Object obj=new Object();
?? try {
???
obj=rsb.getBeanObject(arg0);
?? } catch (Exception e) {
??? // TODO
Auto-generated catch block
??? e.printStackTrace();
?? }
?? return
obj;
}
}
红色的部分就是关键了。自己写的封装注入对象的类。
?
2.ResultSet4Bean类
用于封装记录集映射实体类。
import java.beans.IntrospectionException;
import
java.lang.reflect.InvocationTargetException;
import
java.sql.ResultSet;
import java.sql.SQLException;
import
java.util.Map;
import com.free.source.plusin.resultset.IResultSetWrapper;
import
com.free.source.plusin.resultset.ResultSetWrapperImpl;
/**
* @author TonyDev
*
*/
public class ResultSet4Bean {
private IResultSetWrapper rsp;
private BeanWrapper bw;
private String className;
public ResultSet4Bean(String className) {
?? this.className =
className;
?? init();
}
private void init() {
?? rsp = new ResultSetWrapperImpl();
}
public Object getBeanObject(ResultSet rs) throws
InstantiationException,
??? IllegalAccessException,
ClassNotFoundException,
??? IntrospectionException, SQLException,
IllegalArgumentException,
??? InvocationTargetException {
?? bw = new
BeanWrapper(this.className);
?? Map<String, Object> hm = rsp.setWrapper(rs);
?? if (hm.size() > 0) {
??? bw.setProperty(hm);
?? }
?? return bw.getObj();
}
}
红色的部分是自己封装的类,请继续往下看。
?
3.IResultSetWrapper接口
用于获取记录集中实体字段属性的接口
import java.sql.ResultSet;
import java.sql.SQLException;
import
java.util.Map;
/**
* @author TonyDev
*
*/
public interface IResultSetWrapper
{
public Map setWrapper(ResultSet rs) throws SQLException;
}
?
4.ResultSetWrapperImpl 类
用于实现IResultSetWrapper 接口
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import
java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
/**
* @author TonyDev
*
*/
public class ResultSetWrapperImpl
implements IResultSetWrapper {
/*
* (non-Javadoc)
*
*/
public Map setWrapper(ResultSet rs) throws SQLException {
?? Map
<String,Object> setMap = new HashMap
<String,Object>();
??
??
??? if ( rs.getRow()!=0) {
???? ResultSetMetaData rsMetaData;
???? try {
????? rsMetaData =
rs.getMetaData();
????? int columnCount =
rsMetaData.getColumnCount();
????? for (int i = 0; i < columnCount; i++)
{
?????
?????? String columnName = rsMetaData.getColumnName(i +
1);
?????
?????? setMap.put(columnName, rs.getObject(i + 1));
????? }
???? } catch (SQLException e) {
????? // TODO Auto-generated
catch block
????? e.printStackTrace();
???? }
??? }
?? return setMap;
}
}