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    }
原文地址:https://www.cnblogs.com/zou-zou/p/6129528.html