TxQueryRunner它是QueryRunner的子类!需要导入commons-dbutils.jar
* 用起来与QueryRunner相似!
* 这个类支持事务!它底层使用了JdbcUtils来获取连接!
简化jdbc操作
* QueryRunner的三个方法:
* update() -->insert、update、delete
* query() -->select
* batch() -->批处理
1 @Test 2 public void testUpdate() throws SQLException 3 { 4 String sql ="insert into t_admin(adminId,adminname,adminpwd) values(?,?,?)"; 5 Object[] params={"1","zouzou","123"};//给sql中传递对应的参数 6 7 QueryRunner qr=new TxQueryRunner();//我们没有给对象提供连接池 8 qr.update(sql, params);//执行sql,不提供连接,它内部会使用JdbcUtils来获取连接 9 } 10 使用事务例子 11 @Test 12 public void testUpdate() throws Exception 13 { 14 try{ 15 JdbcUtils.beginTransaction();//开启事务 16 //多次操作 17 18 String sql="insert into t_admin(adminId,adminname,adminpwd) values(?,?,?)"; 19 QueryRunner qr=new TxQueryRunner(); 20 Object[] params={"2","zouzou1","123"}; 21 qr.update(sql, params);//执行SQL语句 22 if(false) 23 { 24 throw new Exception(); 25 } 26 params=new Object[]{"3","zouzou2","123"}; 27 qr.update(sql, params);//执行SQL语句 28 29 JdbcUtils.commitTransaction();//提交事务 30 } 31 catch(Exception e){ 32 try{ 33 JdbcUtils.rollbackTransaction();//回滚事务 数据库操作错误,可以回滚还原操作。 34 } catch (SQLException e1) 35 { 36 } 37 throw e; 38 } 39 } 40 测试查询方法 41 * 我们知道JDBC查询的结果是ResultSet 42 * 而QueryRunner查询的结果是通过ResultSet映射后的数据. 43 * * QueryRunner第一步是执行select,得到ResultSet 44 * * 然后把ResultSet转换成其他类型的! 45 * 通过转换结果: 46 * * javaBean:把结果集封装到javaBean中 47 * * Map:把结果集封装到Map中 48 * * 把结果集封装到Object中(结果集是单行单列) 49 //单行结果集映射到javaBean中 50 @Test 51 public void testQuery1() throws SQLException 52 { 53 String sql="select *from t_admin where adminId=?"; 54 QueryRunner qr=new TxQueryRunner(); 55 /** 56 * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型. 57 * 58 * BeanHandler --> 它是ResultSetHandler的实现类,它的作用是把结果集封装到Person对象中 59 */ 60 Person p=qr.query(sql,new BeanHandler<Person>(Person.class),"1");//1是?的数值 61 System.out.println(p); 62 } 63 /** 64 * 使用BeanListHandler 65 * 把多行结果集映射到List<Bean>,即多个JavaBean对象。 66 * 一行结果集记录对应一个javaBean对象,多行就对应List<Bean> 67 * @throws SQLException 68 */ 69 @Test 70 public void testQuery2() throws SQLException 71 { 72 String sql="select * from t_admin"; 73 QueryRunner qr=new TxQueryRunner(); 74 /** 75 * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。 76 * 77 * BeanListHandler -->它是ResultSetHandler的实现类 78 * 它的作用是把结果集封装到List<Person>对象中 79 */ 80 List<Person> list=qr.query(sql, new BeanListHandler<Person>(Person.class)); 81 System.out.println(list); 82 } 83 /** 84 * 使用MapHandler,把单行结果集封装到Map对象中 85 * @throws SQLException 86 */ 87 @Test 88 public void testQuery3() throws SQLException 89 { 90 String sql="select * from t_admin where adminId=?"; 91 QueryRunner qr=new TxQueryRunner(); 92 /** 93 * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。 94 * 95 * BeanListHandler -->它是ResultSetHandler的是实现类 96 * 它的作用是把结果集封装到List<Person>对象中 97 */ 98 Map<String,Object> map=qr.query(sql, new MapHandler(),"1"); 99 System.out.println(map); 100 } 101 /** 102 * 使用MapListHandler,把多行结果集封装到List<Map>对象中,即多个Map 103 * 一行对应一个Map,多行对应List<Map> 104 * @throws SQLException 105 */ 106 @Test 107 public void testQuery4() throws SQLException 108 { 109 String sql="select * from t_admin"; 110 QueryRunner qr=new TxQueryRunner(); 111 /** 112 * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。 113 * 114 * BeanListHandler --> 它是ResultSetHandler的是实现类 115 * 它的作用是把结果集封装到List<Person>对象中 116 */ 117 List<Map<String,Object>> mapList=qr.query(sql, new MapListHandler()); 118 System.out.println(mapList); 119 } 120 /** 121 * 使用ScalarHandler,把单行单列的结果集封装到Object中 122 * @throws SQLException 123 */ 124 @Test 125 public void testQuery5() throws SQLException 126 { 127 String sql="select count(*) from t_admin";//结果集是单行单列的 128 QueryRunner qr=new TxQueryRunner(); 129 130 Object obj=qr.query(sql, new ScalarHandler()); 131 /** 132 * 我们知道select count(1),结果一定是个整数! 133 * > Integer 134 * > Long 135 * > BigInteger 136 * 137 * 不同的驱动,结果不同! 138 * 无论是那种类型,它都是Number类型!强转换成Number一定不出错 139 */ 140 Number number =(Number)obj; 141 int cnt=number.intValue(); 142 System.out.println(cnt); 143 } 144 /** 145 * 一行结果集中包含了两张表的列 146 * 使用MapHandler来处理 147 * 1. 把结果集封装到map中 148 * 2. 使用map生成Person对象 149 * 3. 使用map生成Zou对象 150 * 4. 把两个实体对象建立关系 151 * @throws SQLException 152 */ 153 @Test 154 public void testQuery6() throws SQLException 155 { 156 String sql="select * from t_admin p,t_zou a where p.adminId=a.adminId and p.adminId=?";//结果集是单行单列的 157 QueryRunner qr=new TxQueryRunner(); 158 /** 159 * 1.得到Map 160 */ 161 Map map=qr.query(sql, new MapHandler(),"1"); 162 /** 163 * 2.把Map中部分数据封装到Person中 164 */ 165 Person p=CommonUtils.toBean(map, Person.class); 166 /** 167 * 3.把Map中部分数据封装到Zou中 168 */ 169 Zou z=CommonUtils.toBean(map, Zou.class); 170 /** 171 * 4. 建立两个实体的关系 172 */ 173 p.setZou(z); 174 System.out.println(p); 175 }