TxQueryRunner

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

  • int[] batch(String sql, Object[][] params):执行批处理,参数sql是SQL语句模板,params为参数;
  • T query(String sql, ResultSetHandler<T> rh):执行查询,执行查询,参数sql为要执行的查询语句模板,rh是结果集处理,用来把结果集映射成你想要的结果;
  • T query(String sql, ResultSetHandler<T> rh, Object… params):执行查询,参数sql为要执行的查询语句模板,rh是结果集处理,用来把结果集映射成你想要的结果,params是sql语句的参数;
  • int update(String sql):执行增、删、改语句,参数sql是要执行的SQL语句;
  • int update(Stringsql, Object param):执行增、删、改语句,参数sql是要执行的SQL语句,参数param是参数(一个参数);
  • int update(String sql, Object… params):执行增、删、改语句,参数sql是要执行的SQL语句,参数params是参数(多个参数);

为了测试TxQueryRunner,在test数据库下创建person表:

表person:

测试代码:

测试update方法
public class TxQueryRunnerTest {
    /**
     * 测试update方法
     * @throws SQLException
     */
    @Test
    public void testUpdate() throws SQLException {
        String sql="insert into person(pid, pname, age) values(?,?,?)";
        Object[] params = {"1","p1", "18"};//给sql中对应的参数
        QueryRunner qr = new TxQueryRunner();//没有给对象提供连接池
        qr.update(sql, params);

    }
    //使用事务
    @Test
    public void testUpade2() throws Exception{
        try {
            JdbcUtils.beginTransaction();

            String sql="insert into person(pid, pname, age) values(?,?,?)";
            QueryRunner qr = new TxQueryRunner();

            Object[] params = {"2","p2", "18"};
            qr.update(sql,params);//执行

            /*取消注释,演示抛出异常时,事件回滚情况
            if(true){
                throw new Exception();
            }
            */

            params = new Object[]{"3","p3", "18"};
            qr.update(sql, params);//执行

            JdbcUtils.commitTransaction();//提交事务
        } catch (Exception e) {
            try {
                JdbcUtils.rollbackTransaction();//回滚事件
            } catch (SQLException e1) {
            }
            /*throw e;*/
        }
    }
}

执行结果

测试query方法
public class TxQueryRunnerTest {
    /**
     * 测试查询方法
     * 我们知道jdbc查询的结果是ResultSet
     * 而QueryRunner查询的结果是通过ResultSet映射后的数据。
     *         QueryRunner第一步是执行select,得到ResultSet
     *         把ResultSet转换成其他类型
     * 通过转换结果:
     *         JavaBean:把结果集封装到JavaBean中
     *         Map:把结果集封装到Object中(结果集是当行单列)
     * @throws SQLException
     *
     */
    //单行结果集映射到javaBean中
    @Test
    public void testQuery1() throws SQLException{
        String sql = "select * from person where pid=?";
        QueryRunner qr = new TxQueryRunner();
        /*
         * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型
         * BeanHandler → 它是ResultSetHandler的实现类,它的作用是把结果集封装到person对象中
         * 注意:结果集的列名与person的属性名必须相同
         */
        Person p = qr.query(sql, new BeanHandler<Person>(Person.class),"1");
        System.out.println(p);
    }
    /**
     * 使用BeanListhandler
     * 把多行结果集映射到List<Bean>,即多个JavaBean对象
     * 一行结果集记录对应一个JavaBean对象,多行就对应List<Bean>
     * @throws SQLException
     */
    @Test
    public void testQuery2() throws SQLException {
        String sql = "select * from person";
        QueryRunner qr = new TxQueryRunner();
        /*
         * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型
         * BeanHandler → 它是ResultSetHandler的实现类,
         * 它的作用是把结果集封装到List<person>对象中
         * 注意:结果集的列名与person的属性名必须相同
         */
        List<Person> list = qr.query(sql, new BeanListHandler<Person>(Person.class));
        System.out.println(list);
    }

}

testQuery1()

testQuery2()

public class TxQueryRunnerTest {
    /**
     * 使用BeanListhandler
     * 把单行结果集映射到Map对象中
     * @throws SQLException
     */
    @Test
    public void testQuery3() throws SQLException {
        String sql = "select * from person where pid=?";
        QueryRunner qr = new TxQueryRunner();

        Map<String,Object> map = qr.query(sql, new MapHandler(),"1");
        System.out.println(map);
    }
    /**
     * 使用BeanListhandler
     * 把多行结果集封装到List<Map>,即多个Map对象
     * 一行对应一个Map对象,多行就对应List<Map>
     * @throws SQLException
     */
    @Test
    public void testQuery4() throws SQLException {
        String sql = "select * from person";
        QueryRunner qr = new TxQueryRunner();

        List<Map<String, Object>> maplist = qr.query(sql, new MapListHandler());
        System.out.println(maplist);
    }
    /**
     * 使用ScalarHandler
     * 把单行单列的结果集封装到Object中
     * @throws SQLException
     */
    @Test
    public void testQuery5() throws SQLException {
        String sql = "select count(*) from person";//结果集是单行单列
        QueryRunner qr = new TxQueryRunner();

        Object obj = qr.query(sql, new ScalarHandler());
        /*
         * 我们知道select count(*),结果一定是个整数!
         * >Integer
         * >Long
         * >BigInteger
         *
         * 不同的驱动,结果不同!
         * 无论是哪种类型,它都是Number类型,强转化成Number一定不出错
         */
        Number number = (Number)obj;
        long cnt = number.longValue();
        System.out.println(cnt);
    }
}

testQuery3()

testQuery4()

testQuery5()

时间: 2024-10-11 07:48:18

TxQueryRunner的相关文章

网上图书商城项目学习笔记-035工具类之JdbcUtils及TxQueryRunner及C3P0配置

事务就是保证多个操作在同一个connection,TxQueryRunner通过JdbcUtils获取连接,而JdbcUtils通过ThreadLocal<Connection>确保了不同线程设置的con不会混淆(tl.set(con)),而同一线程的connecion可以共用,从而具有事务的功能 1.JdbcUtils.java 1 package cn.itcast.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.SQLExc

TxQueryRunner使用方法

TxQueryRunner它是QueryRunner的子类!需要导入commons-dbutils.jar *   用起来与QueryRunner相似! *   这个类支持事务!它底层使用了JdbcUtils来获取连接! 简化jdbc操作 * QueryRunner的三个方法: * update() -->insert.update.delete * query() -->select * batch() -->批处理 @Test public void testUpdate() thr

关于TxQueryRunner及其单元测试

1.TxQueryRunner的简介(需要相关jar包的请留言) TxQueryRunner类是common-dbutils下QueryRunner的子类,是用来简化JDBC操作的,所以要导入common-dbutils的jar包. TxQueryRunner底层是使用了JdbcUtils.可以使用JdbcUtils.getConnection()来获取连接.使用JdbcUtils.releaseConnection()来关闭连接. 2.TxQueryRunner中的方法 TxQueryRunn

web day19 Service层处理事务(利用ThreadLocal),TxQueryRunner小工具,单表练习(增删改查操作),分页

Service事务 DAO中不是处理事务的地方,因为DAO中的每个方法都是对数据库的一次操作 在Service中不应该出现Connection,它应该只在DAO中出现, 因为它是JDBC的东西,JDBC的东西是用来连接数据库的 修改JdbcUtils 我们把对事务的开启和关闭放到JdbcUtils中,在Service中调用JdbcUtils的方法来完成事务的处理, 但在Service中就不会再出现Connection这一"禁忌"了. 代码 public class JdbcUtils

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/1e

java操作数据库增删改查的小工具--TxQueryRunner

在java程序中,一般使用jdbc连接数据库,比较麻烦,在看传智教程时学了一个工具类,用于简化与数据库之间的操作步骤,就是TxQueryRunner,他是QueryRunner的子类,用起来和他是一样的,特点是支持事务,使用时需要导入几个jar包,分别是 : 这个工具类的优点基本上就是阿帕奇出的DBUtils框架里边所具有的特点,极大简化操作者的代码量,底层使用c3p0连接池,可以方便的吧数据库查询出来的结果映射到JavaBean,List,Map等中,以下是笔记及代码: import java

javaWeb建立一个简单三层项目具体步骤

1.导包 (1) c3p0  数据库连接池 c3p0配置文件  加入到src目录下 (2) dbutils:对jdbc操作进行了封装 it-cast工具包 包含生成验证码,TxQueryRunner,uuid等 (3) json工具包:java对象->json字符串;;java集合->json字符串 (4)mysql 连接

关于不定项参数的查询方法(多条件查询)

如果要进行一个多条件的查询,但又不知道用户到底对哪些条件进行了设定,所以,我们在编辑一个多条件查询的时候,会遇到这样的问题. 那么我们可以通过以下的方式进行解决: 假设一个场景-->       如下图:其中Customer.class 包含了以下的所有属性 开始解决问题: 那么我们在CustomerDao中可以这样进行编写: public class CustomerDao{ private QueryRunner qr = new TxQueryRunner(); //TxQueryRunn

使用c3p0 对事务的处理

创建类 TxQueryRunner 继承 QueryRunner 重写其参数不带Connection的方法 需要jar包 :c3p0-0.9.1.2.jar.mysql-connector-java-5.1.20-bin.jar.commons-dbutils-1.6.jar 1 package com.javaweb.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.SQLException; 5 6 import org.apac