TxQueryRunner用法

package cn.zz.toolstesxt;


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


import javax.enterprise.inject.New;


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 cn.itcast.commons.CommonUtils;
import cn.itcast.jdbc.JdbcUtils;
import cn.itcast.jdbc.TxQueryRunner;


/**
 * TxQueryRunner它是QueryRunner的子类 (依赖的jar common-dbutils.jar)
 *  可用起来与QueryRunner相似的!
 *  我们的类支持事务!它底层使用了JdbcUtils来获取连接!
 *  QueryRunner的三个方法:
 *  *update() --> insert、update、delete
 *  *query()  --> select
 *  *batch() -->批处理
 * @author Administrator
 *
 */
public class TxQueryRunnerTest {


public void update(){
/**
* 测试update()方法,用来执行insert、update、delete语句
* @test
*/
String sql = "insert into t_student (stu_name,gender,age,address) value(?,?,?,?)";
Object[] params ={"lihan","1","12","深圳"};//给sql中对应的参数值
QueryRunner qr = new TxQueryRunner(); //我们没有给对象提供连接池
try {
qr.update(sql,params); // 执行sql,也提供连接,它内部会使用JdbcUtils来获取连接
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void shiwu(){
/**
* 使用事务
*/
try {
JdbcUtils.beginTransaction(); //开启事务
// 多次操作事务
String sql = "insert into t_student (stu_name,gender,age,address) value(?,?,?,?)";
QueryRunner qr = new TxQueryRunner();
Object[] params ={"lihan1","2","18","深圳罗湖区"};
qr.update(sql,params); // 执行

if(false){
throw new Exception();
}
params = new Object[]{"lihan2","3","18","深圳福田区"};
qr.update(sql,params); // 执行

//最后提交事务
JdbcUtils.commitTransaction();

} catch (Exception e) {

try {
//出错了回滚事务
JdbcUtils.rollbackTransaction();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
}
Exception e;
}
public void query1(){
/**
* 测试查询方法
*  我们知道JDBC查询的结果的是ResultSet
*  而QueryRunner查询的结果是通过ResultSet映射后的数据。
*   *QueryRunner第一步是执行select,得到ResultSet
*   *把ResultSet转换成其他类型的!
*   通过转换的结果:
*    *javaBean:把结果集封装javaBean中  
*    *Map:把结果集封装到Map中
*    *把结果集封装到object中(结果集是单行单列)
*/
/*
* 单行结果集映射到javaBean中
*/
String sql="select * from t_person where id=?";
QueryRunner qr = new TxQueryRunner();
/*
* 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。
* BeanHandler --> 它是ResultSetHandler的实现类,它的作用是把结果集封装到Person对象中

*/
try {
Person p = qr.query(sql,new BeanHandler<Person>(Person.class),"2");
System.out.println(p);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
public void query2(){
/**
* 使用BeanListHandler
*  把多行结果集映射List<Bean>,即多个javaBean对象
*  一行结果集记录对应一个JavaBean对象,多行就对应List<Bean>
*/
String sql="select * from t_person ";
QueryRunner qr = new TxQueryRunner();
/*
* 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。
* BeanListHandler --> 它是ResultSetHandler的实现类,
* 它的作用是把结果集封装到List<Person>对象中

*/
try {
List<Person> list = qr.query(sql,new BeanListHandler<Person>(Person.class));
System.out.println(list);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

  }
public void query3() {
/**
* 使用MapHandler,把单行结果封装到Map对象中

*/
String sql="select * from t_person where id=?";
QueryRunner qr = new TxQueryRunner();
/*
* 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。
* BeanListHandler --> 它是ResultSetHandler的实现类,
* 它的作用是把结果集封装到List<Person>对象中

*/
try {
Map<String, Object> map= qr.query(sql,new MapHandler(),"1");
System.out.println(map);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

  }
public void query4() {
/**
* 使用MapListHandler,把多行结果集封装到List<Map>中,即多个Map
* 一行对应一个Map, 多行对应List<Map>

*/
String sql="select * from t_person";
QueryRunner qr = new TxQueryRunner();
/*
* 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。
* BeanListHandler --> 它是ResultSetHandler的实现类,
* 它的作用是把结果集封装到List<Person>对象中

*/
try {
List<Map<String, Object>> mapList= qr.query(sql,new MapListHandler());
System.out.println(mapList);
} catch (Exception e) {
e.printStackTrace();
}

  }
public void query5()  {
/**
* 使用ScalarHandler,把单行单列的结果集封装到object中,

*/
String sql="select count(*) from t_person";
QueryRunner qr = new TxQueryRunner();
 
try {
Object obj = qr.query(sql, new ScalarHandler());
/*
* 我们知道select count(1),结果一定是个整数!
* >Integer
* >Long
* >BigInteger
* 不同的驱动,结果不同!
* 无论是那种类型,它都是Number类型!强转成Number一定不出错
*/
Number number =(Number) obj;
long cnt = number.longValue();
System.out.println(cnt);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

  }
public static void main(String[] args) {
/**
* 一行结果集中包含了两张表的列
* 使用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.id=?";
QueryRunner qr = new TxQueryRunner();
 
try { 
/*
* 1.得到map
*/
Map map = qr.query(sql, new MapHandler(),"2");
/*
* 2.把Map中部分数据封装到Person中
*/
Person p = CommonUtils.toBean(map, Person.class);
/*
* 3.把Map中部分数据封装到Address
*/
Address address =CommonUtils.toBean(map, Address.class);
/*
* 4.建立两个实体的关系
*/
p.setAddress(address);
System.out.println(address);
System.out.println(p);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

 }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值