common-dbutils.jar学习心得

本文详细介绍了DbUtils库中的QueryRunner类如何进行数据库的基本增删改查操作,并展示了不同的结果集处理方式,包括BeanHandler、BeanListHandler、MapHandler、MapListHandler及ScalarHandler的应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

common-dbutils.jar


QueryRunner


update方法:
* int update(String sql, Object... params) -->  可执行增、删、改语句

@Test
public void fun1() throws SQLException {
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "insert into t_stu values(?,?,?,?)";
Object[] params = {1002, "kevin", 8, "male"};

qr.update(sql, params);
}


* int update(Connection con, String sql, Object... parmas) 
--> 需要调用者提供Connection,
这说明本方法不再管理Connection了。支持事务!









query方法:
* T query(String sql, ResultSetHandler rsh, Object... params) --> 可执行查询
 > 它会先得到ResultSet,然后调用rsh的handle()把rs转换成需要的类型!

public void fun2() throws SQLException {
// 创建QueryRunner,需要提供数据库连接池对象
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
// 给出sql模板
String sql = "select * from t_stu where sid=?";
// 给出参数
Object[] params = {1001};
// 执行query()方法,需要给出结果集处理器,即ResultSetHandler的实现类对象
// 我们给的是BeanHandler,它实现了ResultSetHandler
// 它需要一个类型,然后它会把rs中的数据封装到指定类型的javabean对象中,然后返回javabean
Stu stu = qr.query(sql, new BeanHandler<Stu>(Stu.class), params);
System.out.println(stu);
}


* T query(Connection con, String sql, ResultSetHadler rsh, Object... params),
 支持事务






ResultSetHandler接口:


* BeanHandler(单行) --> 构造器需要一个Class类型的参数,
用来把一行结果转换成指定类型的javaBean对象 

public void fun2() throws SQLException {
// 创建QueryRunner,需要提供数据库连接池对象
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
// 给出sql模板
String sql = "select * from t_stu where sid=?";
// 给出参数
Object[] params = {1001};
// 执行query()方法,需要给出结果集处理器,即ResultSetHandler的实现类对象
// 我们给的是BeanHandler,它实现了ResultSetHandler
// 它需要一个类型,然后它会把rs中的数据封装到指定类型的javabean对象中,然后返回javabean
Stu stu = qr.query(sql, new BeanHandler<Stu>(Stu.class), params);
System.out.println(stu);
}

* BeanListHandler(多行) --> 构造器也是需要一个Class类型的参数
  ,用来把一行结果集转换成一个javabean,
那么多行就是转换成List对象,一堆javabean

/**
* BeanListHandler的应用,它是多行处理器
* 每行对象一个Stu对象!
* @throws Exception
*/
@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对象
 > 一行记录:
sid  sname  age  gender
1001 kevin     29   male

 > 一个Map:
{sid:1001, sname:cidy, age:29, gender:male}

/**
* MapHandler的应用,它是单行处理器,把一行转换成一个Map对象
* @throws SQLException 
*/
@Test
public void fun4() throws SQLException  {
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,
多行就是多个Map,即List<Map>!


/**
* MapListHandler,它是多行处理器,把每行都转换成一个Map,即List<Map>
* @throws SQLException
*/
@Test
public void fun5() throws SQLException  {
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);
}



* ScalarHandler(单行单列)
--> 通常用与select count(*) from t_stu语句!
结果集是单行单列的!它返回一个Object,其实......Integer...Long....BigInteger....等起父类都是Number类型

/**
* ScalarHandler,它是单行单列时使用,最为合适!
* @throws SQLException
*/
@Test
public void fun6() throws SQLException {
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "select count(*) from t_stu";
/*
* Integer、Long、BigInteger
*/
Number cnt = (Number)qr.query(sql, new ScalarHandler());

long c = cnt.longValue();
System.out.println(c);
}
}























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值