• TxQueryRunner使用方法


    TxQueryRunner它是QueryRunner的子类!需要导入commons-dbutils.jar
     *   用起来与QueryRunner相似!
     *   这个类支持事务!它底层使用了JdbcUtils来获取连接!
     简化jdbc操作
     * QueryRunner的三个方法:
       * update() -->insert、update、delete
       * query() -->select
       * batch() -->批处理
     
      1  @Test
      2    public void testUpdate() throws SQLException
      3    {
      4         String sql ="insert into t_admin(adminId,adminname,adminpwd) values(?,?,?)";
      5         Object[] params={"1","zouzou","123"};//给sql中传递对应的参数
      6  
      7         QueryRunner qr=new TxQueryRunner();//我们没有给对象提供连接池
      8         qr.update(sql, params);//执行sql,不提供连接,它内部会使用JdbcUtils来获取连接
      9    }
     10 使用事务例子
     11   @Test
     12    public void testUpdate() throws Exception
     13    {
     14        try{
     15             JdbcUtils.beginTransaction();//开启事务            
     16             //多次操作
     17  
     18             String sql="insert into t_admin(adminId,adminname,adminpwd) values(?,?,?)";
     19             QueryRunner qr=new TxQueryRunner();
     20             Object[] params={"2","zouzou1","123"};
     21             qr.update(sql, params);//执行SQL语句
     22             if(false)
     23             {
     24                 throw new Exception();
     25             }
     26             params=new Object[]{"3","zouzou2","123"};
     27             qr.update(sql, params);//执行SQL语句
     28  
     29             JdbcUtils.commitTransaction();//提交事务
     30         }
     31         catch(Exception e){
     32             try{
     33                 JdbcUtils.rollbackTransaction();//回滚事务   数据库操作错误,可以回滚还原操作。
     34             } catch (SQLException e1)
     35             {
     36             }
     37             throw e;
     38         }
     39    }
     40 测试查询方法
     41     *   我们知道JDBC查询的结果是ResultSet
     42     *   而QueryRunner查询的结果是通过ResultSet映射后的数据.
     43     *     * QueryRunner第一步是执行select,得到ResultSet
     44     *     * 然后把ResultSet转换成其他类型的!
     45     *   通过转换结果:
     46     *     * javaBean:把结果集封装到javaBean中
     47     *     * Map:把结果集封装到Map中
     48     *     * 把结果集封装到Object中(结果集是单行单列)
     49   //单行结果集映射到javaBean中
     50    @Test
     51    public void testQuery1() throws SQLException
     52    {
     53        String sql="select *from t_admin where adminId=?";
     54        QueryRunner qr=new TxQueryRunner();
     55        /**
     56         * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型.
     57         * 
     58         * BeanHandler --> 它是ResultSetHandler的实现类,它的作用是把结果集封装到Person对象中
     59         */
     60        Person p=qr.query(sql,new BeanHandler<Person>(Person.class),"1");//1是?的数值
     61        System.out.println(p);
     62    }
     63   /**
     64     * 使用BeanListHandler
     65     *   把多行结果集映射到List<Bean>,即多个JavaBean对象。
     66     *   一行结果集记录对应一个javaBean对象,多行就对应List<Bean>
     67     *  @throws SQLException
     68     */
     69    @Test
     70    public void testQuery2() throws SQLException
     71    {
     72        String sql="select * from t_admin";
     73        QueryRunner qr=new TxQueryRunner();
     74        /**
     75         * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。
     76         * 
     77         * BeanListHandler -->它是ResultSetHandler的实现类
     78         *    它的作用是把结果集封装到List<Person>对象中
     79         */
     80        List<Person> list=qr.query(sql, new BeanListHandler<Person>(Person.class));
     81        System.out.println(list);
     82    }
     83   /**
     84     * 使用MapHandler,把单行结果集封装到Map对象中
     85     * @throws SQLException
     86     */
     87    @Test
     88    public void testQuery3() throws SQLException
     89    {
     90        String sql="select * from t_admin where adminId=?";
     91        QueryRunner qr=new TxQueryRunner();
     92        /**
     93         * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。
     94         * 
     95         * BeanListHandler -->它是ResultSetHandler的是实现类
     96         *    它的作用是把结果集封装到List<Person>对象中
     97         */
     98        Map<String,Object> map=qr.query(sql, new MapHandler(),"1");
     99        System.out.println(map);
    100    }
    101   /**
    102     * 使用MapListHandler,把多行结果集封装到List<Map>对象中,即多个Map
    103     *  一行对应一个Map,多行对应List<Map>
    104     * @throws SQLException
    105     */
    106    @Test
    107    public void testQuery4() throws SQLException
    108    {
    109        String sql="select * from t_admin";
    110        QueryRunner qr=new TxQueryRunner();
    111        /**
    112         * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。
    113         * 
    114         * BeanListHandler --> 它是ResultSetHandler的是实现类
    115         *    它的作用是把结果集封装到List<Person>对象中 
    116         */
    117        List<Map<String,Object>> mapList=qr.query(sql, new MapListHandler());
    118        System.out.println(mapList);
    119    }
    120   /**
    121     * 使用ScalarHandler,把单行单列的结果集封装到Object中
    122     * @throws SQLException
    123     */
    124    @Test
    125    public void testQuery5() throws SQLException
    126    {
    127        String sql="select count(*) from t_admin";//结果集是单行单列的
    128        QueryRunner qr=new TxQueryRunner();
    129  
    130        Object obj=qr.query(sql, new ScalarHandler());
    131        /**
    132         * 我们知道select count(1),结果一定是个整数!
    133         *  > Integer
    134         *  > Long
    135         *  > BigInteger
    136         *  
    137         * 不同的驱动,结果不同!
    138         * 无论是那种类型,它都是Number类型!强转换成Number一定不出错
    139         */
    140        Number number =(Number)obj;
    141        int cnt=number.intValue();
    142        System.out.println(cnt);
    143    }
    144   /**
    145     * 一行结果集中包含了两张表的列
    146     * 使用MapHandler来处理
    147     * 1. 把结果集封装到map中
    148     * 2. 使用map生成Person对象
    149     * 3. 使用map生成Zou对象
    150     * 4. 把两个实体对象建立关系
    151     * @throws SQLException
    152     */
    153    @Test
    154    public void testQuery6() throws SQLException
    155    {
    156        String sql="select * from t_admin p,t_zou a where p.adminId=a.adminId and p.adminId=?";//结果集是单行单列的
    157        QueryRunner qr=new TxQueryRunner();
    158        /**
    159         * 1.得到Map 
    160         */
    161        Map map=qr.query(sql, new MapHandler(),"1");
    162        /**
    163         * 2.把Map中部分数据封装到Person中 
    164         */
    165        Person p=CommonUtils.toBean(map, Person.class);
    166        /**
    167         * 3.把Map中部分数据封装到Zou中 
    168         */
    169        Zou z=CommonUtils.toBean(map, Zou.class);
    170        /**
    171         * 4. 建立两个实体的关系 
    172         */
    173         p.setZou(z);
    174         System.out.println(p);
    175    }
  • 相关阅读:
    结构体数组
    关于VCL的编写 (一) 如何编写自己的VCL控件
    谈一下怎样设计Oracle 分区表
    c++截取屏幕图片并保存(函数代码实现)
    微信公众平台开发之微团购
    怎么调用系统通讯录并向被选中联系人发送短信
    TFS(Team Foundation Server)介绍和入门
    2014百度之星资格赛题解
    C语言中volatilekeyword的作用
    自己定义滑动开关控件的实现与使用
  • 原文地址:https://www.cnblogs.com/zou-zou/p/6129528.html
Copyright © 2020-2023  润新知