首页 > 数据库技术 > 详细

JAVA反射实现JdbcTemplate中查询方法 返回的结果集自动封装成对应的JAVABean对象

时间:2019-02-18 14:58:06      阅读:1017      评论:0      收藏:0      [点我收藏+]

将JdbcTemplate中查询方法返回的结果集自动封装成对应的JAVABean对象

 

只能查询单张表的数据 封装到对应的JAVABean对象中 查询的列数随意 可以不查询全部列  但JAVABean属性 整数只能使用int或Integer 小数使用double或Double 

 

 1 public List query(String sql, Object[] values, Class cls){ //第一个参数 sql语句 第二个参数 查询语句参数的数组 第三个封装数据JAVA bean对象的class对象
 2         ArrayList list=new ArrayList();
 3         try {
 4             conn=DBUtil.getConnection();
 5             ps=conn.prepareStatement(sql);
 6             if(values!=null){
 7                 for(int i=0;i<values.length;i++){
 8                         ps.setObject(i+1, values[i]);
 9                 }
10             }
11             rs=ps.executeQuery();
12             ResultSetMetaData data=rs.getMetaData(); //得到当前结果集所有列的信息
13             ArrayList<String> ColumnNames=new ArrayList<String>();//创建集合存储列名
14             for(int i=1;i<=data.getColumnCount();i++){ //遍历每一列的名字 添加到集合
15                 ColumnNames.add(data.getColumnName(i));
16             }    
17             
18             while (rs.next()) {
19                 Object obj=cls.newInstance(); //创建目标对象
20                 Field[] fields=cls.getDeclaredFields();//得到所有属性
21                 for (int i = 0; i < ColumnNames.size(); i++) {//遍历列名集合 
22                     Field f=null;
23                     for (Field fi : fields) { //遍历属性集合 判断属性名 找到和列名相同的属性对象
24                         if(fi.getName().toUpperCase().equals(ColumnNames.get(i))){
25                             f=fi;
26                             break;
27                         }
28                     }
29                         if(f!=null){
30                         Object value=null;//数据库列的值
31                         if(f.getType()==Integer.class||f.getType()==int.class){ //数字类型需要特殊处理 
32                             value=rs.getInt(f.getName());
33                         }else if(f.getType()==Double.class||f.getType()==double.class){
34                             value=rs.getDouble(f.getName());
35                         }else{
36                             value=rs.getObject(f.getName());//字符 时间类型通过这个方法获取
37                         }
38 
39                           if(value==null){ //如果数据库中列的值为null 获取到的值也为null 所以结束本次循环
40                              continue; 
41                           }
42                        
43                         PropertyDescriptor prop=new PropertyDescriptor(f.getName(), cls);//创建属性描述对象
44                         prop.getWriteMethod().invoke(obj,value);//执行set方法 
45                      
46                   }        
47                 }
48                 
49                 list.add(obj); //将赋值完成的对象 添加到集合
50             
51         }
52             
53         } catch (Exception e) {
54             // TODO Auto-generated catch block
55             e.printStackTrace();
56         }finally{
57             DBUtil.close(conn, rs,ps);
58         }
59         
60         
61         return list;
62     }

 

JAVA反射实现JdbcTemplate中查询方法 返回的结果集自动封装成对应的JAVABean对象

原文:https://www.cnblogs.com/java888/p/10395509.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!