草样年华--跑掉的青春

博客园 首页 新随笔 联系 订阅 管理

元数据:描述数据的数据,ResultSetMetaData是描述ResultSet的元数据对象,从它可以得到数据集有多少了,每一列的列名。。。

ResultSetMetaData可以通过ResultSet类的getMetaData()获得。

ResultSetMetaData中的方法:

  ->getColumnCount():获取数据集有多少列

  ->getColumnLabel(int column):获取指定列的列名,索引从1开始

 

 

步骤:

1、利用sql进行查询,得到结果集,查询时应该给出列的别名,别名要和类的对象的属性名对应;

2、利用反射创建实体类的对象;

3、获取结果集的列的别名;

4、再获取结果集中每一列的值,结合步骤3得到一个Map,键为列名,值为对应的值;

5、利用反射给实体对象的属性赋值。

 1 public <T> T get(Class<T> clazz, String sql,Object ... args){
 2         T entity = null;
 3         Connection connection = null;
 4         PreparedStatement preparedStatement = null;
 5         ResultSet resultSet = null;
 6 
 7         try {
 8             //1、进行sql查询,获取resultSet对象
 9             connection = jdbcTools.getConnection();
10             preparedStatement = connection.prepareStatement(sql);
11 
12             for(i=0;i<args.length;i++){
13                 preparedStatement.setObject(i+1,args[i]);
14             }
15             resultSet = preparedStatement.executeQuery();
16 
17             //2、获取数据集元数据,即ResultSetMetaData对象
18             ResultSetMetaData rsmd = resultSet.getMetaData();
19 
20             //3和4,获取列名和值,创建map对象
21             Map<String,Object> values = new HashMap<String,Object>();
22 
23             while(resultSet.next()){
24                 for(int i = 0;i<rsmd.getColumnCount();i++){
25 
26                     String columnLabel = rsmd.getColumnLabel(i+1);
27                     Object columnValue = resultSet.getObject(columnLabel);
28                     values.put(columnLabel,columnValue);
29 
30                 }
31             }
32 
33             //5、创建实例,并通过反射赋值
34             entity = clazz.newInstance();
35 
36             for(Map.Entry<String,Object> entry: values.entrySet()){
37                 String fieldName = entry.getKey();
38                 Object fieldValue = entry.getValue();
39                 ///反射工具类需要自己实现
40                 //ReflectUtils.setFieldValue(entity,fieldName,fieldValue);
41           BeanUtils.setProperty(entity,fieldname,fieldValue);
42             }
43 
44 
45         }catch (Exception e){
46             e.printStackTrace();
47 
48         }finally {
49             jdbcTools.releaseResource(resultSet,preparedStatement,connection);
50         }
51         return entity;
52     }

 上面的方法是返回一个对象,如果需要返回多条记录,则需要重新写一个方法

 1  public <T> List<T> getForList(Class<T> clazz, String sql, Object...args) throws Exception{
 2         List<T> list = null;
 3         Connection connection = null;
 4         PreparedStatement preparedStatement = null;
 5         ResultSet resultSet = null;
 6 
 7         try{
 8             connection = jdbcTools.getConnection();
 9             preparedStatement = connection.prepareStatement(sql);
10             for(int i = 0;i<args.length;i++){
11                 preparedStatement.setObject(i+1,args[i]);
12             }
13 
14             resultSet = preparedStatement.executeQuery();
15             ResultSetMetaData rsmd = resultSet.getMetaData();
16             List<Map<String,Object>> values = new ArrayList<Map<String, Object>>();
17 
18             Map<String,Object> map = null;
19 
20             while(resultSet.next()){
21                 map = new HashMap<String, Object>();
22                 for(int i = 0;i< rsmd.getColumnCount();i++){
23                     String fieldName = rsmd.getColumnLabel(i+1);
24                     Object object = resultSet.getObject(i+1);
25                     map.put(fieldName,object);
26                 }
27                 values.add(map);
28             }
29 
30             T bean = null;
31             if(values != null ){
32                 for(Map<String,Object> m: values){
33                     for(Map.Entry<String,Object> entry : m.entrySet()) {
34                         String fieldName = entry.getKey();
35                         Object fieldValue = entry.getValue();
36                         bean = clazz.newInstance();
37                         BeanUtils.setProperty(bean,fieldName,fieldValue);
38 
39                     }
40                     list.add(bean);
41                 }
42             }
43 
44 
45 
46         }catch (Exception e){
47             e.printStackTrace();
48         }finally {
49             jdbcTools.releaseResource(resultSet,preparedStatement,connection);
50         }
51 
52         return list;
53 
54     }

 

posted on 2016-05-08 12:00  草样年华--跑掉的青春  阅读(231)  评论(0)    收藏  举报