• Resultset转Bean工具类


    package org.pandas.webIdp.webOP.help;
     
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.util.ArrayList;
    import java.util.List;
     
    public class ResBeanUntil<T> {
    	/**
    	 * 
    	 * @param clazz 所要封装的javaBean
    	 * @param rs 记录集
    	 * @return ArrayList 数组里边装有 多个javaBean
    	 * @throws Exception
    	 * @说明:利用反射机制从ResultSet自动绑定到JavaBean;根据记录集自动调用javaBean里边的对应方法。如果javaBean与数据库字段类型不匹配,按String类型封装
    	 */
    	public List<T> getList(Class<T> clazz, ResultSet rs)  {
     
    		Field field = null;
    		List<T> lists = new ArrayList<T>();
     
    		// 取得类里边的所有方法
    		try {
     
    			// 取得ResultSet列名
    			ResultSetMetaData rsmd = rs.getMetaData();
    			// 获取记录集中的列数
    			int counts = rsmd.getColumnCount();
    			// 定义counts个String 变量
    			String[] columnNames = new String[counts];
    			// 给每个变量赋值
    			for (int i = 0; i < counts; i++) {
    				columnNames[i] = rsmd.getColumnLabel(i + 1);
    			}
     
    			// 变量ResultSet
    			while (rs.next()) {
    				T t = clazz.newInstance();
    				// 反射, 从ResultSet绑定到JavaBean
    				e:for (int i = 0; i < counts; i++) {
    					// 根据 rs 列名 ,组装javaBean里边的其中一个set方法,object 就是数据库第一行第一列的数据了
    					Object value =null;	Class<?> dbType =null;
    					
    					//try的意义是在于 获取对象为空时
    					try {
    					value=rs.getObject(columnNames[i]);
    					//这里是获取数据库字段的类型   判断 value是否为空 null的话跳过
    					 dbType =value.getClass();
    					} catch (Exception e) {
    						continue e;
    						
    					}
    					//设置参数类型,此类型应该跟javaBean 里边的类型一样,而不是取数据库里边的类型
    					
    					field = clazz.getDeclaredField(columnNames[i]);
    					Class<?> beanType = field.getType();
    					
    					
    					//如果发生从数据库获取到得类型跟javaBean类型不同,按String类型取吧
    					
    					if(beanType!=dbType){
    						value = rs.getString(columnNames[i]);
    					}
    					String setMethodName = "set" + firstUpperCase(columnNames[i]);
    					// 第一个参数是传进去的方法名称,第二个参数是 传进去的类型;
    					Method m = t.getClass().getMethod(setMethodName,beanType);
    					// 第二个参数是传给set方法数据;如果是get方法可以不写
    					m.invoke(t, value);
    				}
    				lists.add(t);
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    			return null;
    		}
    		return lists;
    	}
    	
    	//首写字母变大写
    	  public static String firstUpperCase(String old){
    		  
    		  return old.substring(0, 1).toUpperCase()+old.substring(1);
    	  } }
    

      

  • 相关阅读:
    【前端优化之拆分CSS】前端三剑客的分分合合
    ipad&mobile通用webapp框架前哨战
    如何判断一个DOM元素正在动画,一个CSS“阻塞”JS的例子
    关于前端框架升级与全站样式替换的简单建议
    【HTML5&CSS3进阶04】CSS3动画应该如何在webapp中运用
    【HTML5&CSS3进阶03】Jser与Csser如何一起愉快的翻新老组件
    【HTML5&CSS3进阶学习02】Header的实现·CSS中的布局
    【HTML5&CSS3进阶学习01】气泡组件的实现
    【模块化编程】理解requireJS-实现一个简单的模块加载器
    【小贴士】探一探javascript中的replace
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/9409000.html
Copyright © 2020-2023  润新知