DBUtils

作者: 达摩君 | 来源:发表于2017-11-16 17:05 被阅读26次

DBUtils介绍 apache

什么是dbutils,它的作用
DBUtils是java编程中的数据库操作实用工具,小巧简单实用。
DBUtils封装了对JDBC的操作,简化了JDBC操作。可以少写代码。
1.对于数据表的读操作,他可以把结果转换成List,Array,Set等java集合,便于程序员操作;
2.对于数据表的写操作,也变得很简单(只需写sql语句)
3.可以使用数据源,使用JNDI,数据库连接池等技术来优化性能--重用已经构建好的数据库连接对象

DBUtils的三个核心对象

QueryRunner类
ResultSetHandler接口
DBUtils类

  • QueryRunner类
    QueryRunner中提供对sql语句操作的API.
    它主要有三个方法
    query() 用于执行select
    update() 用于执行insert update delete
    batch() 批处理
  • ResultSetHandler接口
    用于定义select操作后,怎样封装结果集.
  • DbUtils类
    它就是一个工具类,定义了关闭资源与事务处理的方法

Dbutils快速入门

package com.lib.util;

import com.ljb.entity.User;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.junit.Test;

import java.sql.SQLException;
import java.util.Date;
import java.util.List;

public class TestCRUD {



    @Test
    public void testSelect() throws SQLException {
        //创建一个QueryRunner对象
        QueryRunner qr = new QueryRunner(C3P0Util.getDs());

        List<User> list = qr.query("select * from users", new BeanListHandler<User>(User.class));

        for (User user: list) {
            System.out.println(user);
        }

        List<User> list2 = qr.query("select * from users where id = ?", new BeanListHandler<User>(User.class), 1);
        for (User user: list2) {
            System.out.println(user);
        }
    }

    @Test
    public void testInsert() throws SQLException {

        QueryRunner qr = new QueryRunner(C3P0Util.getDs());

        qr.update("insert into users(username, password, email, brithday) values(?,?,?,?)","bobo","123","333@qq.com",new Date());
    }

    @Test
    public void testUpdate() throws SQLException {

        QueryRunner qr = new QueryRunner(C3P0Util.getDs());

        qr.update("update users set username=?, password=? where id = ?","bobooo","123",1);
    }

    @Test
    public void testDelete() throws SQLException {

        QueryRunner qr = new QueryRunner(C3P0Util.getDs());

        qr.update("delete from users where id = ?",1);
    }

    @Test
    public void testBatch() throws SQLException {

        QueryRunner qr = new QueryRunner(C3P0Util.getDs());

        Object[][] params = new Object[10][];//高维代表执行多少次
        for (int i =0; i < params.length; i ++) {
            params[i] = new Object[]{"bobo" + i,"123","333@qq.com",new Date()};
        }
        qr.batch("insert into users(username, password, email, brithday) values(?,?,?,?)",params);
    }
}

QueryRunner对象

构造函数:

new QueryRunner(); 它的事务可以手动控制。
也就是说此对象调用的方法(如:query、update、batrch)参数中要有Connection对象。
new QueryRunner(DataSource ds); 它的事务是自动控制的。一个sql一个事务。
此对象调用的方法(如:query、update、batrch)参数中无需Connection对象。

ResultSetHandler接口

  • ArrayHandler:适合取1条记录。把该条记录的每列值封装到一个数组中Object[]
@Test
    public void testArrylist() throws SQLException {
        QueryRunner qr = new QueryRunner(C3P0Util.getDs());
        Object[] query = qr.query("select * from users", new ArrayHandler());

        for (Object o:
          query){
            System.out.println(o);
        }
    }
  • ArrayListHandler:适合取多条记录。把每条记录的每列值封装到一个数组中Object[],把数组封装到一个List中
  • ColumnListHandler:取某一列的数据。封装到List中。
  • KeyedHandler:取多条记录,每一条记录封装到一个Map中,再把这个Map封装到另外一个Map中,key为指定的字段值。
@Test
    public void testKeyedHandler() throws SQLException {
        QueryRunner qr = new QueryRunner(C3P0Util.getDs());
        //大map的key是表中的某列,小map的key是表的列名,说明第一个是object类型,第二个是string类型
        Map<Object, Map<String, Object>> query = qr.query("select * from users", new KeyedHandler(1));

        for (Map.Entry<Object, Map<String, Object>> item:
             query.entrySet()) {
            for (Map.Entry<String, Object> mm:
                 item.getValue().entrySet()) {
                System.out.println(mm.getKey() + "\t" + mm.getValue());
            }
            System.out.println("============");
        }

    }
  • MapHandler:适合取1条记录。把当前记录的列名和列值放到一个Map中
  • MapListHandler:适合取多条记录。把每条记录封装到一个Map中,再把Map封装到List中
  • ScalarHandler:适合取单行单列数据
@Test
    public void testScalarHandler() throws SQLException {
        QueryRunner qr = new QueryRunner(C3P0Util.getDs());
        Object query = qr.query("select count(*) from users", new ScalarHandler(1));

        System.out.println(query);
    }
  • BeanHandler:适合取单行数据
@Test
    public void testBeanHandler() throws SQLException {
        QueryRunner qr = new QueryRunner(C3P0Util.getDs());
        User user = qr.query("select * from users", new BeanHandler<User>(User.class));

        System.out.println(user);
    }
  • BeanListHandler

相关文章

网友评论

      本文标题:DBUtils

      本文链接:https://www.haomeiwen.com/subject/ijvlvxtx.html