• (反射+内省机制的运用)处理jdbc的结果集



    1、原理:反射+内省

    2、反射:动态创建对象

    3、内省:动态处理对象的属性值




    4、结果集处理:

    (1)把结果集中的一行数据,封装成一个对象,专门针对结果集中只有一行数据的情况。

    (2)处理结果集--多行数据,封装成多个对象(list)


    专门针对结果集中只有一行数据的情况(把结果集中的一行数据,封装成一个对象) 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;
    	}
    
    	
    }
    
  • 相关阅读:
    环境是如何建立的 启动文件有什么
    环境中存储的是什么
    串行 并行 异步 同步
    TPC-H is a Decision Support Benchmark
    进程通信类型 管道是Linux支持的最初Unix IPC形式之一 命名管道 匿名管道
    删除环境变量
    14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚
    14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚
    14.3.2.1 Transaction Isolation Levels 事务隔离级别
    14.3.2.1 Transaction Isolation Levels 事务隔离级别
  • 原文地址:https://www.cnblogs.com/shan333/p/15954065.html
Copyright © 2020-2023  润新知