zoukankan      html  css  js  c++  java
  • 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分别是主键。

  • 相关阅读:
    windows下 文件资源管理器 的操作
    Visual Studio Code 折叠代码快捷键
    windows 10 取消alt+tab的预览功能
    String.prototype.replace
    Webpack的tapable 为什么要使用 new Funtion 来生成静态代码
    Visual Studio Code 断点调试Nodejs程序跳过node内部模块(internal modules)
    【社群话题分享】有哪些奇葩的技术人员考核方式?
    工信部要求应用商店上新 App 检查 IPv6,这里有一份 IPv6 快速部署指南
    读完这篇文章,5G 就没有秘密了
    双剑合璧——掌握 cURL 和 Dig 走天涯
  • 原文地址:https://www.cnblogs.com/liuzhenyou/p/4662730.html
Copyright © 2011-2022 走看看