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;
} }

Result映射成对象和List的更多相关文章

  1. cocos2d-x 将cocosbuilder输出文件映射成对象的原理

    转自:http://www.cnblogs.com/fox7nights/archive/2013/02/21/2920640.html 一.调用代码 CCNode* GameOverScene::l ...

  2. Mybaits 源码解析 (八)----- 全网最详细,没有之一:结果集 ResultSet 自动映射成实体类对象(上篇)

    上一篇文章我们已经将SQL发送到了数据库,并返回了ResultSet,接下来就是将结果集 ResultSet 自动映射成实体类对象.这样使用者就无需再手动操作结果集,并将数据填充到实体类对象中.这可大 ...

  3. 怎么让Intellj Idea 把数据库的表映射成hibernate的domain对象

    步骤如下: 第一步:连接数据源: 点击:idea右边的database.如下图所示: 或者你依次点击:view-->Tool windows--->database 然后你将看在如下点击下 ...

  4. 分享公司DAO层数据库结果映射到对象的方法

    主题 前面写过一篇文章,分享了公司是怎么动态封装SQL查询条件的(http://www.cnblogs.com/abcwt112/p/5874401.html). 里面提到数据库查询结果二维数组最后是 ...

  5. json转换成对象

    在json转换成对象时,json的key会与java 类的字段一一对应.如果没有映射上的java字段会在该数据类型上填充默认值,如int 0,String null 等. 没有映射的json key在 ...

  6. hibernate将本地SQL查询结果封装成对象

    hibernate将本地SQL查询结果封装成对象 不知道大家有没有碰过这种情况,迫于很多情况只能用native SQL来查询(如:复杂统计等),然而使用native查询后,结果会被放到object里, ...

  7. httpClient实例--返回响应部分并且转换成对象

    import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import ja ...

  8. .net 4中使用 dynamic,将json字符串转成对象的 万能方法。

    在.net 4中增加了对弱类型的支持.为和弱类型的对象进行数据交换提供了方法.我们常常会遇到将json字符串转成对象的情景,虽然可以使用 JavaScriptSerializer 或者 DataCon ...

  9. ORM映射(对象关系映射)

    ORM映射(对象关系映射)分创建表和操作表两个部分创建单表创建关联表(foreignKey) 一对一 一对多(重点) 多对多(重点) 创建表后加str方法把打印的地址转换成对应字符表的操作(增删改查) ...

随机推荐

  1. oracle安装后listener.ora文件

    # listener.ora Network Configuration File: D:\Develop\oracle11g\product\11.2.0\dbhome_1\network\admi ...

  2. iOS页面性能优化

    前言 在软件开发领域里经常能听到这样一句话,“过早的优化是万恶之源”,不要过早优化或者过度优化.我认为在编码过程中时刻注意性能影响是有必要的,但凡事都有个度,不能为了性能耽误了开发进度.在时间紧急的情 ...

  3. 蓝牙进阶之路 (001) - HC-05蓝牙无线模块设置

    USB转串口的有线转接方式,实在太难看了,尤其是寻接头,那是相当的不方便.其它电器厂商都想把是接头做小,做精致,唯独串口接头还是那么庞大,感觉应该换一换了,都已经完全不符合这个时代的审美观了. 于是, ...

  4. HDU 4532 湫秋系列故事——安排座位 (组合+DP)

    湫秋系列故事——安排座位 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)To ...

  5. 安卓Textview的getLineCount返回0

    ViewTreeObserver observer = tv.getViewTreeObserver(); // textAbstract为TextView控件 observer.addOnGloba ...

  6. Mac下django简单安装配置步骤

    一.安装软件包并创建项目 $sudo pip install django$sudo python -c "import django;print django.VERSION"( ...

  7. Appium 设置手机连接方式

    使用appium的 Connection 和driver 的setConnection方法,可以切换手机的上网方式 // 切换到wifi Connection cnn = Connection.WIF ...

  8. word中公式居中编号在最右端

    1 显示标尺 2 设置居中制表符 3 在对应位置做标记 首先让公式居中 使用居中制表符在标尺的灰色地带标记位置,1)标记公式位置,鼠标左击 2)标记右边标号位置,注意和右边留有一定边距 4 公式左对齐 ...

  9. 连接远程linux机器时无法使用matlab gui的解决方案

    用ssh连接romate linux之后要打开matlab的界面.却得到warning: No display specified.的警告 虽然每个linux都是可以打开matlab界面的.但是需要使 ...

  10. vim的全局替换[zz]&把字符替换成回车

    本文出自   http://blog.csdn.net/shuangde800   本文是在学习<使用vi编辑器, Lamb & Robbins编著>时在所记的笔记.   本文内容 ...