日期:2014-05-16  浏览次数:20521 次

(原创)JDBCTemplate 分页 功能改造 (二)

?

??? 继续上一篇的功能改造,小弟我发现每次都要根据自己定义的实体类去直接实现 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;
}
}