泛型类反射封装结果集,泛型反射封装,简化JDBC结果集封装。
分享于 点击 24598 次 点评:127
泛型类反射封装结果集,泛型反射封装,简化JDBC结果集封装。
简化JDBC结果集封装。
通过反射方法封装数据。
使用泛型,更通用。
/** * @param args */public static void main(String[] args) { String sql="select * from user where name=1"; try { User user=BaseDao.getClass(sql, User.class); System.out.println(user.getName()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }} /** * 使用泛型类封装查询结果 * @param <T> * @throws Exception */public static <T> T getClass(String sql, Class<T> clazz) throws Exception { PreparedStatement ps = null; ResultSet rs = null; Connection con=JDBCUtil.getConnection(); ps=con.prepareStatement(sql); rs=ps.executeQuery(); //结果集的字段 ResultSetMetaData md=rs.getMetaData(); //将字段添加到string数组 String[] mdString=new String[md.getColumnCount()]; for(int i=0;i<md.getColumnCount();i++) { mdString[i]=md.getColumnLabel(i+1); } //声明一个泛型类 T t=null; //获得传入类的方法集合 Method[] methods=clazz.getMethods(); if(rs.next()) { t=clazz.newInstance(); for(int j=0;j<mdString.length;j++) { String clsMethod=mdString[j]; //将结果集的字段首字母替换成大写并且以set开头(例:setName对象类里面的set方法) clsMethod="set"+clsMethod.replaceFirst(clsMethod.substring(0,1), clsMethod.substring(0, 1).toUpperCase()); for(Method m:methods) { //匹配传入类的方法集合如果匹配成功则执行。 if(clsMethod.equals(m.getName())) { m.invoke(t, rs.getObject(j+1)); } } } } return t;}//该片段来自于http://byrx.net
用户点评