TxQueryRunner类对结果集封装成bean、map及object的操作

一、需要的jar包:

 

  itcast-tools-1.4.jar     http://pan.baidu.com/s/1Dbo2i

  commons-beanutils-1.8.3.jar    http://pan.baidu.com/s/1Dbo2i

  commons-logging-1.1.1.jar  http://pan.baidu.com/s/1c0yefK0

  mysql-connector-java-5.1.28-bin.jar    http://pan.baidu.com/s/1eQjgUqA 

  c3p0-0.9.2-pre1.jar   http://pan.baidu.com/s/1mg1lBa4

  commons-dbutils-1.4.jar   http://pan.baidu.com/s/1o6OOdcu

  mchange-commons-0.2.jar    http://pan.baidu.com/s/1hqEkZvm

  c3p0-config.xml       http://pan.baidu.com/s/1ntzhCZR     注:连数据库的配置文件,初次使用要修改密码、用户名

二、结果集封装用到的方法

  TxQueryRunner类是common-dbutilsQueryRunner类的子类,用来简化JDBC操作。TxQueryRunner类内部使用了JdbcUtils.getConnection()类来获取连接对象,以及使用           JdbcUtils.releaseConnection()关闭连接。

● int[] batch(String sql, Object[][] params):执行批处理,参数sqlSQL语句模板,params为参数;

● T query(String sql, ResultSetHandler<T> rh):执行查询,执行查询,参数sql为要执行的查询语句模板,rh是结果集处理,用来把结果集映射成你想要的结果;

● T query(String sql, ResultSetHandler<T> rh, Object… params):执行查询,参数sql为要执行的查询语句模板,rh是结果集处理,用来把结果集映射成你想要的结果,paramssql语句的参数;

● int update(String sql):执行增、删、改语句,参数sql是要执行的SQL语句;

● int update(Stringsql, Object param):执行增、删、改语句,参数sql是要执行的SQL语句,参数param是参数(一个参数);

● int update(String sql, Object… params):执行增、删、改语句,参数sql是要执行的SQL语句,参数params是参数(多个参数);

三、单表结果集封装

   QueryRunner的三个方法:
        *update() --> insert/update/delete(能实现事务处理)
        *query() --> select
        *batch() --> 批处理
    1、测试查询
        JDBC查询后的结果是ResultSet
        而QueryRunner查询后的结果是通过ResultSet映射后的数据。
            1.QueryRunner第一步执行select,得到ResultSet
            2.把ResultSet转换成其他类型!
        通过转换结果:
            1.JavaBean:把结果集封装到JavaBean中(最常见)
                     query的第二个参数类型为ResultSetHandler,它是个接口,表示映射的结果类型。
                  1).使用BeanHandler把单行结果集映射到Bean中
                 a).BeanHandler --> 它是ResultSetHandler的实现类,它的作用是把结果集封装到Person对象中
                 b).结果集的列名与Person的属性名必须相同
                     String sql = "select * from t_person where pid = ?";
                     QueryRunner qr = new TxQueryRunner();
                    Person p = qr.query(sql,new BeanHandler<Person>(Person.class,"1"));
                  2).使用BeanListHandler把多行结果集映射到List<Bean>,即多个JavaBean对象。
                  a).一行结果集记录对应一个JavaBean对象,多行就对应List<Bean>    
                     String sql = "select * from t_person";
                     QueryRunner qr = new TxQueryRunner();
                     List<Person> listP = qr.query(sql,new BeanListHandler<Person>(Person.class));                              
            2.Map:把结果集封装到Map中
                1).使用MapHandler把结果集的列名做为key、列值作为key值(重名的结果集的列名会覆盖)
                          String sql = "select * from t_person where pid = ?";
                    QueryRunner qr = new TxQueryRunner();    
                    Map<String,Object> map = qr.query(sql,new MapHandler,"1");
                2).使用MapListHandler把结果集的列名做为key、列值作为key值;一行对应一个Map多个对应List<Map>    
                          String sql = "select * from t_person";
                    QueryRunner qr = new TxQueryRunner();    
                    List<Map<String,Object>> map = qr.query(sql,new MapListHandler);
            3.Object:把结果集封装到Object中(结果集是单行单列的)
                String sql = "select count(*) from t_person";
                QueryRunner qr = new TxQueryRunner();
                Object obj = qr.query(sql,new ScalarHandler());
                Number number = (Number)obj;
                long cnt = number.longValue();//任意选int cnt = number.intValue();
                注:select count(1),结果一定是整数!
                      >Integer
                      >long
                      >bigInteger
                     不同的驱动,结果不同!无论是那种类型,它就是Number类型!强转成Number一定不会错    

四、多表结果集的映射        

     select * from t_person p,t_address a where p.aid=a.aid and p.pid='aaa';

     结果集包含两个对象!
        使用MapHandler来处理:
            1).把结果集封装到map中
            2).使用map生成Person对象
            3).使用map生成address对象
            4).把两个实体对象建立起关系
        String sql = "select * from t_person p,t_address a where p.aid=a.aid and p.pid='aaa'";
        QueryRunner qr = new TxQueryRunner();
        Map map = qr.query(sql,new MapHandler(),"aaa");//1).把结果集封装到map中
        Person p = CommonUtils.toBean(map,Person.class);//2).使用map生成Person对象
        Address addr = CommonUtils.toBean(map,Address.calss);//3).使用map生成address对象
        p.setAddress(addr);//4).把两个实体对象建立起关系

注:以上需要用到t_person(pid,pname,age,sex,aid)和t_address(aid,province,city,district,street)表aid和pid分别是主键。

 

posted @ 2015-07-20 21:16  LiuZhenYou  阅读(841)  评论(0编辑  收藏  举报