标签:utils 子类 als 数据库操作 throws ons 表示 param system
TxQueryRunner它是QueryRunner的子类!需要导入commons-dbutils.jar
* 用起来与QueryRunner相似!
* 这个类支持事务!它底层使用了JdbcUtils来获取连接!
简化jdbc操作
* QueryRunner的三个方法:
* update() -->insert、update、delete
* query() -->select
* batch() -->批处理
@Test
public void testUpdate() throws SQLException
{
String sql ="insert into t_admin(adminId,adminname,adminpwd) values(?,?,?)";
Object[] params={"1","zouzou","123"};//给sql中传递对应的参数
QueryRunner qr=new TxQueryRunner();//我们没有给对象提供连接池
qr.update(sql, params);//执行sql,不提供连接,它内部会使用JdbcUtils来获取连接
}
@Test
public void testUpdate() throws Exception
{
try{
JdbcUtils.beginTransaction();//开启事务
//多次操作
String sql="insert into t_admin(adminId,adminname,adminpwd) values(?,?,?)";
QueryRunner qr=new TxQueryRunner();
Object[] params={"2","zouzou1","123"};
qr.update(sql, params);//执行SQL语句
if(false)
{
throw new Exception();
}
params=new Object[]{"3","zouzou2","123"};
qr.update(sql, params);//执行SQL语句
JdbcUtils.commitTransaction();//提交事务
}
catch(Exception e){
try{
JdbcUtils.rollbackTransaction();//回滚事务 数据库操作错误,可以回滚还原操作。
} catch (SQLException e1)
{
}
throw e;
}
}
测试查询方法
* 我们知道JDBC查询的结果是ResultSet
* 而QueryRunner查询的结果是通过ResultSet映射后的数据.
* * QueryRunner第一步是执行select,得到ResultSet
* * 然后把ResultSet转换成其他类型的!
* 通过转换结果:
* * javaBean:把结果集封装到javaBean中
* * Map:把结果集封装到Map中
* * 把结果集封装到Object中(结果集是单行单列)
//单行结果集映射到javaBean中
@Test
public void testQuery1() throws SQLException
{
String sql="select *from t_admin where adminId=?";
QueryRunner qr=new TxQueryRunner();
/**
* 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型.
*
* BeanHandler --> 它是ResultSetHandler的实现类,它的作用是把结果集封装到Person对象中
*/
Person p=qr.query(sql,new BeanHandler<Person>(Person.class),"1");//1是?的数值
System.out.println(p);
}
/**
* 使用BeanListHandler
* 把多行结果集映射到List<Bean>,即多个JavaBean对象。
* 一行结果集记录对应一个javaBean对象,多行就对应List<Bean>
* @throws SQLException
*/
@Test
public void testQuery2() throws SQLException
{
String sql="select * from t_admin";
QueryRunner qr=new TxQueryRunner();
/**
* 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。
*
* BeanListHandler -->它是ResultSetHandler的实现类
* 它的作用是把结果集封装到List<Person>对象中
*/
List<Person> list=qr.query(sql, new BeanListHandler<Person>(Person.class));
System.out.println(list);
}
/**
* 使用MapHandler,把单行结果集封装到Map对象中
* @throws SQLException
*/
@Test
public void testQuery3() throws SQLException
{
String sql="select * from t_admin where adminId=?";
QueryRunner qr=new TxQueryRunner();
/**
* 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。
*
* BeanListHandler -->它是ResultSetHandler的是实现类
* 它的作用是把结果集封装到List<Person>对象中
*/
Map<String,Object> map=qr.query(sql, new MapHandler(),"1");
System.out.println(map);
}
/**
* 使用MapListHandler,把多行结果集封装到List<Map>对象中,即多个Map
* 一行对应一个Map,多行对应List<Map>
* @throws SQLException
*/
@Test
public void testQuery4() throws SQLException
{
String sql="select * from t_admin";
QueryRunner qr=new TxQueryRunner();
/**
* 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。
*
* BeanListHandler --> 它是ResultSetHandler的是实现类
* 它的作用是把结果集封装到List<Person>对象中
*/
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 t_admin";//结果集是单行单列的
QueryRunner qr=new TxQueryRunner();
Object obj=qr.query(sql, new ScalarHandler());
/**
* 我们知道select count(1),结果一定是个整数!
* > Integer
* > Long
* > BigInteger
*
* 不同的驱动,结果不同!
* 无论是那种类型,它都是Number类型!强转换成Number一定不出错
*/
Number number =(Number)obj;
int cnt=number.intValue();
System.out.println(cnt);
}
/**
* 一行结果集中包含了两张表的列
* 使用MapHandler来处理
* 1. 把结果集封装到map中
* 2. 使用map生成Person对象
* 3. 使用map生成Zou对象
* 4. 把两个实体对象建立关系
* @throws SQLException
*/
@Test
public void testQuery6() throws SQLException
{
String sql="select * from t_admin p,t_zou a where p.adminId=a.adminId and p.adminId=?";//结果集是单行单列的
QueryRunner qr=new TxQueryRunner();
/**
* 1.得到Map
*/
Map map=qr.query(sql, new MapHandler(),"1");
/**
* 2.把Map中部分数据封装到Person中
*/
Person p=CommonUtils.toBean(map, Person.class);
/**
* 3.把Map中部分数据封装到Zou中
*/
Zou z=CommonUtils.toBean(map, Zou.class);
/**
* 4. 建立两个实体的关系
*/
p.setZou(z);
System.out.println(p);
}
TxQueryRunner使用方法
标签:utils 子类 als 数据库操作 throws ons 表示 param system
原文地址:http://www.cnblogs.com/zou-zou/p/6129528.html