TxQueryRunner类

依赖的jar包链接:https://pan.baidu.com/s/1auStZRAVedbIFJcppJzLyg 密码:yiv4,其次需要搭建好Jdbcutils(具体看前篇博客)

主要简化jdbc的操作,测试的主要方法update(insert,update,delete),query(查询)

1.底层使用JDBCutils,类内部使用了JdbcUtils.getConnection()类来获取连接对象,以及使用
 * JdbcUtils.releaseConnection()关闭连接

2.测试update方法

    a)update()   主要是insert   update   delete

    b)其中testupdate() 测试了清楚表数据,插入一条数据,更新某一些的值(mysql)

    c)其中testupdate1()测试了事务,二条插入语句 ,要么同时成功 要么同时失败,当爆出异常的时候,事务进行回滚

//首先为了测试这个类,我们首先在数据库goods中 新建一个t_persion表 记住字段跟你定义的属性名一致
    /**
     * 字段    说明
     * pid_a     主键
     * pname     姓名
     * age       年龄
     * birthday  生日
     * @throws SQLException 
     */
@Test
public  void testupdate() throws SQLException{
//清楚表中所有的数据
String sql_del = "TRUNCATE t_person";
  QueryRunner qr_del = new TxQueryRunner();
qr_del.update(sql_del);

//插入数据, 参数化可以防止sql注入
String pid_a = CommonUtils.uuid();
String sql_insert  = "INSERT INTO t_person(pid_a,pname,age,birthday) VALUES(?,?,?,?)";
Object[] insert_params ={pid_a,"xiejiangpeng","22","2018"};//给 sql中对应的参数
QueryRunner qr_insert = new TxQueryRunner();
qr_insert.update(sql_insert,insert_params);//执行sql  也不提供连接,因为他内部会使用JdbcUtils来获取连接



                //更新某一列的值
String sql_update = "update t_person set pname='双击666' where pid_a=?";
Object[] sql_params = {pid_a};
QueryRunner qr_update = new TxQueryRunner();
qr_update.update(sql_update,sql_params);

}
 
/*

        *事务
*1、第一个sql语句 插入
*2、第二个语句继续插入
*3、要么一起成功 ,要么都失败,所以我们引用了事务

*/
     
@Test
public void testupdate1() throws Exception {
try{
JdbcUtils.beginTransaction(); //开始事务

String sql_insert  = "INSERT INTO t_person(pid_a,pname,age,birthday) VALUES(?,?,?,?)";
Object[] insert_params ={CommonUtils.uuid(),"张宇","21","2019"};
QueryRunner qr_insert = new TxQueryRunner();
qr_insert.update(sql_insert,insert_params);//执行
if(false){
throw new Exception();
}
insert_params = new Object[]{CommonUtils.uuid(),"刘备","22","2018"};
qr_insert.update(sql_insert,insert_params);

JdbcUtils.commitTransaction(); //提交事务
}catch(Exception e){

 try {
JdbcUtils.rollbackTransaction();//回滚事务
} catch (SQLException e1) {

   throw e;
}

}

3. 测试testquery()方法

a)其中testquery()单行结果集映射到javaBean中

b) testquery1() 多行结果集映射到List<Bean>中

c))testquery2() 单行结果集映射到map中

d) testquery3()多行结果集映射到List[map]中 

e) testquery4()单行单列的集映射到Object中

 /**
* 测试查询方法
* 我们知道用JDBC的结果是Resultset(结果集)
* 而QueryRunnner查询的而结果是通过Resultset映射后的数据
*   *QueryRunner第一步是执行select 得到Resultset
*   *把ReSultSet转换成其他类型的
*   通过转换结果:
*   *javabean:把结果集封装到Javabean中
*   *map:把结果集封装到Object中(结果集是单行单列)
*/
     
@Test
public void testquery() throws SQLException{


/*
* 单行结果集映射到javaBean中
*/
String  sql_select = "select * from t_person where pname = ?";
Object[]  params_select = {"双击666"};
QueryRunner qr_select = new TxQueryRunner();
/*
* 第二个参数类型为ResultSetHandler,他是一个接口,表示映射的结果

* BeanHandler --》他是ResultSetHandler的实现类,他的作用是把结果集封装到Person类中
*/
Person p = qr_select.query(sql_select, new BeanHandler<Person>(Person.class),params_select);
System.out.println(p);
System.out.println(p.getPname());
}



/*
* 使用BeanListHandler
* 把多行结果集 映射到List<Bean>,也就是多个JavaBean对象
* 一行结果集记录对应一个javabean对象,多行就对应List<>
*/
@Test
public void testquery1() throws SQLException{


/*
* 多行结果集映射到<list>Bean中
*/
String  sql_select = "select * from t_person";
QueryRunner qr_select = new TxQueryRunner();

//list导入的是(javautil)
List<Person> list = qr_select.query(sql_select, new BeanListHandler<Person>(Person.class));
System.out.println(list);
}


/**单行查询 
* 使用MapHandler,把结果集封装到map对象中

*/
@Test
public void testquery2() throws SQLException{


/*
* 单行结果集映射到Map中
*/
String  sql_select = "select * from t_person where pname= ? ";
QueryRunner qr_select = new TxQueryRunner();
/*
* 第二个参数类型为MapHandler,他是一个接口,表示映射的结果
* BeanHandler --》他是ResultSetHandler的实现类,
* 他的作用是把结果集封装到List<Person>类中

*/
//list导入的是(javautil)
Map<String ,Object> map = qr_select.query(sql_select, new MapHandler(),"双击666");
System.out.println(map);
}


/**
* 使用MapListHandler,把多行结果集封装到List<map>中,即多个map
* 一行对应一个map,多行对应List<Map>
*/
@Test
public void testquery3() throws SQLException{
         /*

*/
String  sql_select = "select * from t_person";
QueryRunner qr_select = new TxQueryRunner();

//list导入的是(javautil)
List<Map<String ,Object>> Maplist = qr_select.query(sql_select, new MapListHandler());
System.out.println(Maplist);
}
/*
* 使用ScalarHandler,把单行单列的结果集封装到object中
*/


@Test
public void testquery4() throws SQLException{
         /*

*/
String  sql_select = "select count(*) from t_person";//结果集是单行单列的
QueryRunner qr_select = new TxQueryRunner();



Object obj= qr_select.query(sql_select, new ScalarHandler());
/*
*我们知道 select  count(1),结果一定是个整数!
* 》Intrger
* 》Long
* 》BigInteger
* 不通的驱动,结果不通
* 无论是那种类型,他都是Number类型! 强制转化Number一定不会出错
*/
Number number  = (Number)obj;
Long cnt = number.longValue();
        System.out.println(cnt);
}


界面源代码 ::::

package cn.itcast.test;


import java.sql.SQLException;
import java.util.List;
import java.util.Map;


import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;


import cn.itcast.commons.CommonUtils;
import cn.itcast.jdbc.JdbcUtils;
import cn.itcast.jdbc.TxQueryRunner;
/**繁琐介绍
 * TxQueryRunner类是com mon-dbutils下QueryRunner类的子类,用来简化JDBC操作(commons-dbutils-1.4.jar)
 * TxQueryRunner类内部使用了JdbcUtils.getConnection()类来获取连接对象,以及使用
 * JdbcUtils.releaseConnection()关闭连接
 * 主要方法:
 * 1、int[] batch(String sql, Object[][] params):执行批处理,参数sql是SQL语句模板,params为参数
 * 2、T query(String sql, ResultSetHandler<T> rh):执行查询,执行查询,参数sql为要执行的查询语句模板,rh是结果集处理,用来把结果集映射成你想要的结果
 * 3、T query(String sql, ResultSetHandler<T> rh, Object… params):执行查询,参数sql为要执行的查询语句模板,rh是结果集处理,用来把结果集映射成你想要的结果,params是sql语句的参数
 * 4、int update(String sql):执行增、删、改语句,参数sql是要执行的SQL语句
 * 5、int update(Stringsql, Object param):执行增、删、改语句,参数sql是要执行的SQL语句,参数param是参数(一个参数)
 * 6、int update(String sql, Object… params):执行增、删、改语句,参数sql是要执行的SQL语句,参数params是参数(多个参数)
 */

/**
 * 简化jdbc的操作
 * QueryRunner的三个方法
 * * update()   --> insert /update ,delete
 * * query() --> select
 * *batch() -->批处理
 * @author Xjp
 *
 */
public class TxQueryRunnerTest {

//首先为了测试这个类,我们首先在数据库goods中 新建一个t_persion表 记住字段跟你定义的属性名一致
    /**
     * 字段    说明
     * pid_a     主键
     * pname     姓名
     * age       年龄
     * birthday  生日
     * @throws SQLException 
     */
@Test
public  void testupdate() throws SQLException{
//清楚表中所有的数据
String sql_del = "TRUNCATE t_person";
  QueryRunner qr_del = new TxQueryRunner();
qr_del.update(sql_del);

//插入数据, 参数化可以防止sql注入
String pid_a = CommonUtils.uuid();
String sql_insert  = "INSERT INTO t_person(pid_a,pname,age,birthday) VALUES(?,?,?,?)";
Object[] insert_params ={pid_a,"xiejiangpeng","22","2018"};//给 sql中对应的参数
QueryRunner qr_insert = new TxQueryRunner();
qr_insert.update(sql_insert,insert_params);//执行sql  也不提供连接,因为他内部会使用JdbcUtils来获取连接



        //更新某一列的值
String sql_update = "update t_person set pname='双击666' where pid_a=?";
Object[] sql_params = {pid_a};
QueryRunner qr_update = new TxQueryRunner();
qr_update.update(sql_update,sql_params);

}
 
/*
*1、第一个sql语句 插入
*2、第二个语句继续插入
*3、要么一起成功 ,要么都失败,所以我们引用了事务

*/
     
@Test
public void testupdate1() throws Exception {
try{
JdbcUtils.beginTransaction(); //开始事务

String sql_insert  = "INSERT INTO t_person(pid_a,pname,age,birthday) VALUES(?,?,?,?)";
Object[] insert_params ={CommonUtils.uuid(),"张宇","21","2019"};
QueryRunner qr_insert = new TxQueryRunner();
qr_insert.update(sql_insert,insert_params);//执行
if(false){
throw new Exception();
}
insert_params = new Object[]{CommonUtils.uuid(),"刘备","22","2018"};
qr_insert.update(sql_insert,insert_params);

JdbcUtils.commitTransaction(); //提交事务
}catch(Exception e){

 try {
JdbcUtils.rollbackTransaction();//回滚事务
} catch (SQLException e1) {

   throw e;
}

}

/**
* 测试查询方法
* 我们知道用JDBC的结果是Resultset(结果集)
* 而QueryRunnner查询的而结果是通过Resultset映射后的数据
*   *QueryRunner第一步是执行select 得到Resultset
*   *把ReSultSet转换成其他类型的
*   通过转换结果:
*   *javabean:把结果集封装到Javabean中
*   *map:把结果集封装到Object中(结果集是单行单列)
*/
     
@Test
public void testquery() throws SQLException{


/*
* 单行结果集映射到javaBean中
*/
String  sql_select = "select * from t_person where pname = ?";
Object[]  params_select = {"双击666"};
QueryRunner qr_select = new TxQueryRunner();
/*
* 第二个参数类型为ResultSetHandler,他是一个接口,表示映射的结果

* BeanHandler --》他是ResultSetHandler的实现类,他的作用是把结果集封装到Person类中
*/
Person p = qr_select.query(sql_select, new BeanHandler<Person>(Person.class),params_select);
System.out.println(p);
System.out.println(p.getPname());
}



/*
* 使用BeanListHandler
* 把多行结果集 映射到List<Bean>,也就是多个JavaBean对象
* 一行结果集记录对应一个javabean对象,多行就对应List<>
*/
@Test
public void testquery1() throws SQLException{


/*
* 多行结果集映射到<list>Bean中
*/
String  sql_select = "select * from t_person";
QueryRunner qr_select = new TxQueryRunner();

//list导入的是(javautil)
List<Person> list = qr_select.query(sql_select, new BeanListHandler<Person>(Person.class));
System.out.println(list);
}


/**单行查询 
* 使用MapHandler,把结果集封装到map对象中

*/
@Test
public void testquery2() throws SQLException{


/*
* 单行结果集映射到Map中
*/
String  sql_select = "select * from t_person where pname= ? ";
QueryRunner qr_select = new TxQueryRunner();
/*
* 第二个参数类型为MapHandler,他是一个接口,表示映射的结果
* BeanHandler --》他是ResultSetHandler的实现类,
* 他的作用是把结果集封装到List<Person>类中

*/
//list导入的是(javautil)
Map<String ,Object> map = qr_select.query(sql_select, new MapHandler(),"双击666");
System.out.println(map);
}


/**
* 使用MapListHandler,把多行结果集封装到List<map>中,即多个map
* 一行对应一个map,多行对应List<Map>
*/
@Test
public void testquery3() throws SQLException{
         /*

*/
String  sql_select = "select * from t_person";
QueryRunner qr_select = new TxQueryRunner();

//list导入的是(javautil)
List<Map<String ,Object>> Maplist = qr_select.query(sql_select, new MapListHandler());
System.out.println(Maplist);
}
/*
* 使用ScalarHandler,把单行单列的结果集封装到object中
*/


@Test
public void testquery4() throws SQLException{
         /*

*/
String  sql_select = "select count(*) from t_person";//结果集是单行单列的
QueryRunner qr_select = new TxQueryRunner();



Object obj= qr_select.query(sql_select, new ScalarHandler());
/*
*我们知道 select  count(1),结果一定是个整数!
* 》Intrger
* 》Long
* 》BigInteger
* 不通的驱动,结果不通
* 无论是那种类型,他都是Number类型! 强制转化Number一定不会出错
*/
Number number  = (Number)obj;
Long cnt = number.longValue();
        System.out.println(cnt);
}

}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值