Result映射成对象和List

package com.com.dbhelper; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Manager { public static List toList(ResultSet rs) throws SQLException { List list = new ArrayList(); ResultSetMetaData md = rs.getMetaData(); int columnCount = md.getColumnCount(); while (rs.next()) { Map rowData = new HashMap(); for (int i = 1; i <= columnCount; i++) { rowData.put(md.getColumnName(i), rs.getObject(i)); } list.add(rowData); } return list; } public static List resultSetToList(ResultSet rs,Class cls) { List list = new ArrayList(); try { //获取数据库表结构 ResultSetMetaData meta=rs.getMetaData(); Object obj=null; while(rs.next()) { //获取formbean实例对象 obj=Class.forName(cls.getName()).newInstance(); //循环获取指定行的每一列的信息 for(int i=1;i<=meta.getColumnCount();i++) { //当前列名 String colName=meta.getColumnName(i); //将列名第一个字母大写(为什么加+""呢?为了把char类型转换为String类型。replace的参数是String类型。) colName=colName.replace(colName.charAt(0)+"", new String(colName.charAt(0)+"").toUpperCase()); //设置方法名 String methodName="set"+colName; //获取当前位置的值,返回Object类型 Object value=rs.getObject(i); //利用反射机制,生成setXX()方法的Method对象并执行该setXX()方法。 Method method=obj.getClass().getMethod(methodName, value.getClass()); method.invoke(obj, value); } list.add(obj); } }catch(Exception ex) { ex.printStackTrace(); }finally{ return list; } } //将查询结果的第一条数据转换为指定类型的对象 public static <T> T parseResultSet(ResultSet rs,Class<T> cls) { try { //只会将查询的第一天数据转换为对象 if (rs.next()) { //实例化对象 T obj = cls.newInstance(); //获取类中所有的属性 Field[] arrf = cls.getDeclaredFields(); //遍历属性 for (Field f : arrf) { //设置忽略访问校验 // f.setAccessible(true); // 为属性设置内容 f.set(obj, rs.getObject(f.getName())); } return obj; } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public static <T> List<T> parseResultSetAll(ResultSet rs,Class<T> cls) { try { List<T> list=new ArrayList<>(); //将查询的所有数据转换为对象添加到集合 while(rs.next()){ //实例化对象 T obj=cls.newInstance(); //获取类中所有的属性 Field[] arrf=cls.getDeclaredFields(); //遍历属性 for(Field f:arrf){ //设置忽略访问校验 f.setAccessible(true); //为属性设置内容 f.set(obj, rs.getObject(f.getName())); } list.add(obj);//添加到集合 } return list; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public static <T> List<T> parseRSAll(ResultSet rs,Class<T> cls) { try { List<T> list=new ArrayList<>(); //将查询的所有数据转换为对象添加到集合 while(rs.next()){ //实例化对象 T obj=cls.newInstance(); //获取类中所有的属性 Field[] arrf=cls.getDeclaredFields(); //遍历属性 for(Field f:arrf){ //记录属性名称 String name=f.getName(); //获取当前属性上面的注解对象 Col fn=f.getAnnotation(Col.class); if(fn!=null){ name=fn.value();//获取注解的内容 } //设置忽略访问校验 f.setAccessible(true); //为属性设置内容 f.set(obj, rs.getObject(name)); } list.add(obj);//添加到集合 } return list; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2015-10-16 yield return 和yield break