DBUtils

1、DBUtils概述


  DBUtils是Apache Commons组件中的一员,DBUtils的Jar包是dbutils.jar,开源免费,DBUtils是对JDBC的简单封装,可以把结果集转化成我们想要得到的形式,当前应用很广泛。


2、DBUtils主要类


  ● DbUtils:DbUtils是一个为做一些诸如关闭连接、装载JDBC驱动程序之类的常规工作提供有用方法的类,里面都是静态方法 ;

  ● QueryRunner:这个类使执行SQL查询简单化。提供了两个构造器:一个空构造器,一个 javax.sql.DataSource 作为参数的构造器。方法主要有:

    update():执行insert、update、delete;

    query():执行select语句;

    batch():执行批处理。


3 QueryRunner之更新


  QueryRunner的update()方法可以用来执行insert、update、delete语句。


   使用QueryRunner

    创建QueryRunner

      构造器:QueryRunner();

    update()方法

<span style="font-size:18px;">    int update(Connection con, String sql, Object… params)</span>

  使用实例:

<span style="font-size:18px;">	@Test
	public void fun1() throws SQLException {
		QueryRunner qr = new QueryRunner();
		String sql = "insert into user values(?,?,?)";
		qr.update(JdbcUtils.getConnection(), sql, "u1", "zhangSan", "123");
	}
</span>


  ● 第二种方式使用QueryRunner

    创建QueryRunner

      构造器:QueryRunner(DataSource)

    update()方法

<span style="font-size:18px;">    int update(String sql, Object… params)</span>

  

  这种方式在创建QueryRunner时传递了连接池对象,那么在调用update()方法时就不用再传递Connection了。

<span style="font-size:18px;">	@Test
	public void fun2() throws SQLException {
		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "insert into user values(?,?,?)";
		qr.update(sql, "u1", "zhangSan", "123");
	}</span>


4、ResultSetHandler


  我们知道在执行select语句之后得到的是ResultSet,然后我们还需要对ResultSet进行转换,得到最终我们想要的数据。我们可能希望把ResultSet的数据放到List中或者Map中,或是一个Bean中。DBUtils提供了一个接口ResultSetHandler,用来将ResultSet转换成目标类型的工具。我们可以去实现这个接口,把ResultSet转换成想要的类型。


  DBUtils提供了很多个ResultSetHandler接口的实现,这些实现已经基本够用了,我们通常不需要自己去实现ResultSet接口了:

    ● MapHandler:单行处理器!把结果集转换成Map<String,Object>,其中列名为键;

    ● MapListHandler:多行处理器!把结果集转换成List<Map<String,Object>>;

    ● BeanHandler:单行处理器!把结果集转换成Bean,该处理器需要Class参数,即Bean的类型;

    ● BeanListHandler:多行处理器!把结果集转换成List<Bean>;

    ● ColumnListHandler:多行单列处理器!把结果集转换成List<Object>,使用ColumnListHandler时需要指定某一列的名称或编号,例如:new ColumListHandler(“name”)表示把name列的数据放到List中;

    ● ScalarHandler:单行单列处理器!把结果集转换成Object。一般用于聚集查询,例如select count(*) from tab_student。


  Map处理器:

         


  Bean处理器 :

        


  Column处理器:

        


  Scalar处理器:

             


5、QueryRunner之查询


  QueryRunner的查询方法是:

     public <T> T query(String sql, ResultSetHandler<T> rh, Object… params)

     public <T> T query(Connection con, String sql, ResultSetHandler<T> rh, Object… params)

  query()方法会通过sql语句和params查询出ResultSet,然后通过rh把ResultSet转换成对应的类型再返回。

<span style="font-size:18px;">	@Test
	public void fun1() throws SQLException {
		DataSource ds = JdbcUtils.getDataSource();
		QueryRunner qr = new QueryRunner(ds);
		String sql = "select * from tab_student where number=?";
		Map<String,Object> map = qr.query(sql, new MapHandler(), "S_2000"); //map
		System.out.println(map);
	}
	
	@Test
	public void fun2() throws SQLException {
		DataSource ds = JdbcUtils.getDataSource();
		QueryRunner qr = new QueryRunner(ds);
		String sql = "select * from tab_student";
		List<Map<String,Object>> list = qr.query(sql, new MapListHandler());
		for(Map<String,Object> map : list) {
			System.out.println(map);
		}
	}
	
	@Test
	public void fun3() throws SQLException {
		DataSource ds = JdbcUtils.getDataSource();
		QueryRunner qr = new QueryRunner(ds);
		String sql = "select * from tab_student where number=?";
		Student stu = qr.query(sql, new BeanHandler<Student>(Student.class), "S_2000");
		System.out.println(stu);
	}
	
	@Test
	public void fun4() throws SQLException {
		DataSource ds = JdbcUtils.getDataSource();
		QueryRunner qr = new QueryRunner(ds);
		String sql = "select * from tab_student";
		List<Student> list = qr.query(sql, new BeanListHandler<Student>(Student.class));
		for(Student stu : list) {
			System.out.println(stu);
		}
	}
	
	@Test
	public void fun5() throws SQLException {
		DataSource ds = JdbcUtils.getDataSource();
		QueryRunner qr = new QueryRunner(ds);
		String sql = "select * from tab_student";
		List<Object> list = qr.query(sql, new ColumnListHandler("name"));
		for(Object s : list) {
			System.out.println(s);
		}
	}
	
	@Test
	public void fun6() throws SQLException {
		DataSource ds = JdbcUtils.getDataSource();
		QueryRunner qr = new QueryRunner(ds);
		String sql = "select count(*) from tab_student";
		Number number = (Number)qr.query(sql, new ScalarHandler());
		int cnt = number.intValue();
		System.out.println(cnt);
	}
</span>

6、QueryRunner之批处理


  QueryRunner还提供了批处理方法:batch()。

  我们更新一行记录时需要指定一个Object[]为参数,如果是批处理,那么就要指定Object[][]为参数了。即多个Object[]就是Object[][]了,其中每个Object[]对应一行记录:

<span style="font-size:18px;">@Test
public void fun10() throws SQLException {
	DataSource ds = JdbcUtils.getDataSource();
	QueryRunner qr = new QueryRunner(ds);
	String sql = "insert into tab_student values(?,?,?,?)";
	Object[][] params = new Object[10][];//表示 要插入10行记录
	for(int i = 0; i < params.length; i++) {
		params[i] = new Object[]{"S_300" + i, "name" + i, 30 + i, i%2==0?"男":"女"};
	}
	qr.batch(sql, params);
}</span>



  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值