使用DbUtils实现增删改查——ResultSetHandler接口的实现类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package cn.mickeymouse.dbutils;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.junit.Test;
import cn.mickeymouse.domain.User;
import cn.mickeymouse.utils.DataSourceUtils;
//关于ResultSetHandler的作用及使用方式
public class DbUtilsDemo2 {
     // ResultSetHandler只能在QueryRunner的query方法上使用。
     @Test
     public void fun1() throws SQLException {
         String sql = "select * from user where id=1" ;
         // 将查询的结果封装到User对象中。
         QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
         // 执行sql语句将将结果集封装到指定对象中。
         User user = runner.query(sql, new ResultSetHandler<User>() {
             public User handle(ResultSet rs) throws SQLException {
                 User user = null ;
                 if (rs.next()) {
                     user = new User();
                     user.setId(rs.getInt( "id" ));
                     user.setName(rs.getString( "name" ));
                     user.setAge(rs.getInt( "age" ));
                 }
                 return user;
             }
         });
         System.out.println(user);
         // 上面操作执行的步骤:
         // 1.先执行sql语句,得到一个ResultSet
         // 2.将ResultSet传递到ResultSetHandler的handle方法内
         // 3.handle方法的返回值就是runner.query()方法的返回值。
         // 问题:ResultSetHandler中的handle方法它的作用是什么?
         // 它的作用就是用于实现将ResultSet封装成指定的对象。
     }
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
public class RSHanlderDemo {
     //ScalarHandler:获取结果集中第一行数据指定列的值,常用来进行单值查询
     @Test
     public void tes9() throws SQLException{
         QueryRunner runner = new QueryRunner( new ComboPooledDataSource());
         Long count = (Long)runner.query( "select count(*) from account" , new ScalarHandler());
         System.out.println(count);
     }
      
     //KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里(List<Map>),再把这些map再存到一个map里,其key为指定的列。
     @Test
     public void tes8() throws SQLException{
         QueryRunner runner = new QueryRunner( new ComboPooledDataSource());
          Map< Object , Map< String , Object >> map = runner.query( "select * from account where money>?" , new KeyedHandler( "id" ), 500 );
         System.out.println(map);
     }
     //ColumnListHandler:将结果集中某一列的数据存放到List中。
     @Test
     public void tes7() throws SQLException{
         QueryRunner runner = new QueryRunner( new ComboPooledDataSource());
         List< Object >list = runner.query( "select * from account where money>?" , new ColumnListHandler( 3 ), 500 );
         System.out.println(list);
     }
     //MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
     @Test
     public void tes6() throws SQLException{
         QueryRunner runner = new QueryRunner( new ComboPooledDataSource());
         List<Map< String , Object >> list = runner.query( "select * from account where money>?" , new MapListHandler(), 500 );
         System.out.println(list);
     }
      
     //MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
     @Test
     public void tes5() throws SQLException{
         QueryRunner runner = new QueryRunner( new ComboPooledDataSource());
          Map< String , Object > map = runner.query( "select * from account where money>?" , new MapHandler(), 500 );
         System.out.println(map);
     }
      
     //BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
     @Test
     public void tes4() throws SQLException{
         QueryRunner runner = new QueryRunner( new ComboPooledDataSource());
         List<Account>list = runner.query( "select * from account where money>?" , new BeanListHandler<Account>(Account. class ), 500 );
         System.out.println(list);
     }
      
     //BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
     @Test
     public void tes3() throws SQLException{
         QueryRunner runner = new QueryRunner( new ComboPooledDataSource());
         Account acc = runner.query( "select * from account where money>?" , new BeanHandler<Account>(Account. class ), 500 );
         System.out.println(acc);
     }
     //ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。
     @Test
     public void tes2() throws SQLException{
         QueryRunner runner = new QueryRunner( new ComboPooledDataSource());
         List< Object []> list = runner.query( "select * from account where money>?" , new ArrayListHandler(), 500 );
         System.out.println(list);
     }
      
     //ArrayHandler:把结果集中的第一行数据转成对象数组。
     @Test
     public void test1() throws SQLException{
         QueryRunner runner = new QueryRunner( new ComboPooledDataSource());
         Object [] objs = runner.query( "select * from account where money>?" , new ArrayHandler(), 500 );
         System.out.println(objs);
     }
}



实现类

ArrayHandler,将结果集中第一条记录封装到一个Object[]数组中。

ArrayListHandler将结果集中每一条记录封装到Object[]数组中,在将数组封装到List<Object[]>集合中。

BeanHandler将结果集中第一条记录封装到指定的javaBean中。

BeanListHandler,将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中。

ColumnListHandler,将结果集中某一个指定的列封装到List<Object>中。

KeyedHandler将结果集中每一条记录封装到Map<String,Object>,将它做为value,key是指定的一个字段的值,在封装到一个Map<Object,Map<String,Object>>集合中。

MapHandler将结果集中第一条记录封装到Map<String,Object> key就是字段名称,value就是字段值。

MapListHandler将结果集中每一条记录封装到Map<String,Object> key就是字段名称,value就是字段值。在将这些Map集合封装到List集合中。

ScalarHandler它用于单值封装,例如  select count(*) from user操作



来自为知笔记(Wiz)


你可能感兴趣的:(使用DbUtils实现增删改查——ResultSetHandler接口的实现类)