? 专门针对结果集中只有一行数据的情况(把结果集中的一行数据,封装成一个对象) BeanHandler
public class BeanHandler<T> implements IResultHandler2<T> { private Class<T> classType; //因为需要把结果集的一行封装成一个对象【? 则需要有对象的存在】,通过反射技术,动态编译是才传入具体类型的对象 public BeanHandler(Class<T> classType) { //通过构造器,传入具体的类型的,以便后边通过反射获取到对应类型的具体对象 this.classType = classType; } @Override public T handle(ResultSet rs) throws Exception { //1、创建对应的类的一个对象 T obj = classType.newInstance(); //2、取出结果集中当前光标所在行的某一列的数据 BeanInfo beanInfo = Introspector.getBeanInfo(classType, Object.class); PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors(); if(rs.next()) { for(PropertyDescriptor pd : pds) { //获取对象的属性名【属性名和列名相同】 String columnName = pd.getName(); Object val = rs.getObject(columnName); //3、调用该对象的setter方法,把某一列的数据设置进去 pd.getWriteMethod().invoke(obj, val); } } return obj; }}? 针对结果集中多行数据的情况(把结果集中的每一行数据,封装成一个对象) BeanHandler
public class BeanListHandler<T> implements IResultHandler2<List<T>> { //利用反射技术,先拥有类 private Class<T> classType; public BeanListHandler(Class<T> classType) { this.classType = classType; } @Override public List<T> handle(ResultSet rs) throws Exception { List<T> list = new ArrayList<>(); while(rs.next()) { T obj = classType.newInstance(); BeanInfo benInfo = Introspector.getBeanInfo(classType, Object.class); PropertyDescriptor[] pds = benInfo.getPropertyDescriptors(); for(PropertyDescriptor pd : pds) { String columnName = pd.getName(); Object value = rs.getObject(columnName); //设置对象属性值 pd.getWriteMethod().invoke(obj, value); } list.add(obj); } return list; } }本文来自博客园,作者:一乐乐,转载请注明原文链接:https://www.cnblogs.com/shan333/p/15954065.html