出處:https://www.cnblogs.com/gdwkong/p/7633250.html
common-dbutils.jar是Apache組織提供的一個對JDBC進行簡單封裝的開源工具類庫,使用它能夠簡化JDBC應用程序的開發,同時也不會影響程序的性能。
1、QueryRunner類
①update方法:
int update(String sql,Object...params) -->可執行增刪改語句
int update(Connection con,String sql,Object...params)-->需要調用者提供Connection,這說明本方法不再管理Connection。支持事務。
②query方法:
T query(String sql,ResultSetHandler rsh,Object...params)-->可執行查詢
它會先得到ResultSet,然後調用rsh的handle()把rs轉換成需要的類型。
T query(Connection con,String sql,ResultSetHandler rsh,Object...params);支持事務。
2、ResultSetHandler接口:
BeanHandler(單行)-->構造器需要一個Class類型參數,用來把一行結果轉換成指定類型的javabean對象。
BeanListHandler(多行)-->構造器也是需要一個Class類型的參數,用來把一行結果集轉換成一個javabean,那麼多行就是轉換成List對象,一堆javabean
MapHandler(單行)-->把一行結果集轉換成Map對象
一行記錄:
sid sname age gender
1001 zs 99 male
一個Map:
{sid:1001, sname:zs, age:99, gender:male}
MapListHandler(多行) -->把一行記錄轉換成一個Map,多行就是多個Map,即List<Map>.
ScalarHandler(單行單列) -->通常用與“SELECT COUNT(*) FROM t_stu;”語句,結果集是單行單列的,它返回一個Object。
3示例
import cn.itcast.jdbc.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.*;
import org.junit.Test;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
public class Demo3 {
@Test
public void fun1() throws SQLException {
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "INSERT INTO t_stu VALUES(?,?,?,?)";
Object[] params = {1002,"lisi",99,"female"};
qr.update(sql,params);
}
@Test
public void fun2() throws SQLException {
//創建QueryRunner,提供數據庫連接池對象
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
//給出sql模板
String sql = "SELECT * FROM t_stu WHERE sid=?";
//給出參數
Object[] params = {1002};
//執行query()方法,需要給出集處理器,即 ResultSetHandler的實現類對象
//我們需要給的是BeanHandler,它實現了ResultSetHandler
//它需要一個類型,然後它會把rs中的數據封裝到指定類型的javabean對象中,然後返回javabean對象
Stu stu = qr.query(sql,new BeanHandler<Stu>(Stu.class),params);
System.out.println(stu);
}
//BeanListHandler的應用,它是多行處理器
//每行對象一個Stu對象
@Test
public void fun3() throws Exception{
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "SELECT * FROM t_stu";
List<Stu> stuList = qr.query(sql,new BeanListHandler<Stu>(Stu.class));
System.out.println(stuList);
}
//MapHandler的應用,它是單行處理器,把一行轉換成一個Map對象
@Test
public void fun4() throws Exception{
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "SELECT * FROM t_stu WHERE sid=?";
Object[] params = {1001};
Map map = qr.query(sql,new MapHandler(),params);
System.out.println(map);
}
//MapListHandler,它是多行處理器,把每行都轉換成一個Map,即List<Map>
@Test
public void fun5() throws Exception{
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "SELECT * FROM t_stu ";
List<Map<String,Object>> mapList = qr.query(sql,new MapListHandler());
System.out.println(mapList);
}@Test
//ScalarHandler,它是單行單列時使用,最爲合適。
public void fun6() throws Exception{
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "SELECT COUNT(*) FROM t_stu ";
Number cnt = (Number) qr.query(sql,new ScalarHandler());
long c = cnt.longValue();
System.out.println(c);
}
}
import cn.itcast.jdbc.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.*;
import org.junit.Test;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
public class Demo3 {
@Test
public void fun1() throws SQLException {
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "INSERT INTO t_stu VALUES(?,?,?,?)";
Object[] params = {1002,"lisi",99,"female"};
qr.update(sql,params);
}
@Test
public void fun2() throws SQLException {
//創建QueryRunner,提供數據庫連接池對象
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
//給出sql模板
String sql = "SELECT * FROM t_stu WHERE sid=?";
//給出參數
Object[] params = {1002};
//執行query()方法,需要給出集處理器,即 ResultSetHandler的實現類對象
//我們需要給的是BeanHandler,它實現了ResultSetHandler
//它需要一個類型,然後它會把rs中的數據封裝到指定類型的javabean對象中,然後返回javabean對象
Stu stu = qr.query(sql,new BeanHandler<Stu>(Stu.class),params);
System.out.println(stu);
}
//BeanListHandler的應用,它是多行處理器
//每行對象一個Stu對象
@Test
public void fun3() throws Exception{
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "SELECT * FROM t_stu";
List<Stu> stuList = qr.query(sql,new BeanListHandler<Stu>(Stu.class));
System.out.println(stuList);
}
//MapHandler的應用,它是單行處理器,把一行轉換成一個Map對象
@Test
public void fun4() throws Exception{
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "SELECT * FROM t_stu WHERE sid=?";
Object[] params = {1001};
Map map = qr.query(sql,new MapHandler(),params);
System.out.println(map);
}
//MapListHandler,它是多行處理器,把每行都轉換成一個Map,即List<Map>
@Test
public void fun5() throws Exception{
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "SELECT * FROM t_stu ";
List<Map<String,Object>> mapList = qr.query(sql,new MapListHandler());
System.out.println(mapList);
}@Test
//ScalarHandler,它是單行單列時使用,最爲合適。
public void fun6() throws Exception{
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "SELECT COUNT(*) FROM t_stu ";
Number cnt = (Number) qr.query(sql,new ScalarHandler());
long c = cnt.longValue();
System.out.println(c);
}
}