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();
}
}
}
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();
}
}
}