学习笔记之 DBUtils 组件

3. DBUtils 组件

3.1 简介

自定义的jdbc持久层框架,功能不是特别强大!  学习优秀的jdbc组件,Dbutils组件,此组件是对jdbc连接数据的轻量级封装!

 

l  commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司的首选。

 

l    项目中使用DBUtils组件,需要引入:commons-dbutils-1.2.jar

 

 

3.2 API介绍

|--DbUtils              组件提供的核心类:主要提供了关闭连接、加载驱动相关方法

|--QueryRunner      组件(最) 核心处理类封装了jdbc的基本操作:查询、更新、批处理!

       //1.更新方法

       //2.批处理方法

       //3.查询相关方法

 

 

       /****************更新方法***********************/

 

        int  update(Stringsql)                直接更新

        int  update(Stringsql, Object param)        带一个条件更新   

        int  update(Stringsql, Object[] params)   带多个条件更新

         int[] batch (String sql)                                   批处理

 

        int  update(Connectioncon, String sql)

        int  update(Connectioncon, Object param)

        int  update(Connectioncon, Object[] params)

 

|-- ResultSetHandler                    结果集处理器

       /****************查询方法***********************/

       |--  ArrayHandler  查询返回结果集的第一行记录,最终返回的是一个Object[]

       |--  ArrayListHandler    获取所有的结果,返回List<Object[]>

       |--  BeanHandler   把查询结果的第一行,封装为指定的javabean对象

       |--   BeanListHandler  把结果集的每一行封装为指定的javabean对象,再把对象添加到ArrayList集合中

       |--  ColumnListHandler  把查询所有记录的指定的列,添加的集合中;  如果没有指定列,把第一列的值都添加到集合中

       |-- KeyedHandler    查询返回map集合,把指定的列作为key,把每一条记录封装为map集合作为value最终结果Map<指定的列作为key,Map<列名称,列值>>map;

       |-- MapHandler,      把结果封装为map

       |-- MapListHandler      把结果每一行封装为map,再把map添加到list集合

       |-- ScalarHandler    返回结果集的第一行第一列聚合函数

3.3 DBUtilsQuery

/**

 * 查询

 * @author Administrator

 *

 */

public class DBUtilsQuery {

   

    // 创建数据源

    static DataSource ds ;

    static {

        ds = new ComboPooledDataSource();

    }

   

    // 1. ArrayHandler:  查询返回结果集的第一行记录,最终返回的是一个Object[]

    @Test

    public void queryOne() {

        String sql = " SELECT * FROM admin;";

       

        // 创建核心处理类

        QueryRunner runner = new QueryRunner(ds);

        try {

            // 执行查询

            Object[] obj = (Object[]) runner.query(sql, new ArrayHandler());

           

            System.out.println(obj);

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

   

    // 2. ArrayListHandler:  获取所有的结果,返回List<Object[]>

    @Test

    public void queryAll() {

        String sql = " SELECT * FROM admin;";

       

        // 创建核心处理类

        QueryRunner runner = new QueryRunner(ds);

        try {

            // 执行查询

            List<Object[]> obj = (List<Object[]>) runner.query(sql, new ArrayListHandler());

           

            System.out.println(obj.get(0)[1]);

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

   

    // 3. BeanHandler:把查询结果的第一行,封装为指定的javabean对象

    @Test

    public void getOneBean() {

        String sql = " SELECT * FROM admin;";

       

        // 创建核心处理类

        QueryRunner runner = new QueryRunner(ds);

        try {

           

            Object obj = runner.query(sql, new BeanHandler(OrderMeal.class));

           

            System.out.println(obj);

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

   

    // 4. BeanListHandler: 把结果集的每一行封装为指定的javabean对象,再把对象添加到ArrayList集合中

    @Test

    public void getAllBean() {

        String sql = " SELECT * FROM admin;";

        // 创建核心处理类

        QueryRunner runner = new QueryRunner(ds);

        try {

            Object obj = runner.query(sql, new BeanListHandler(OrderMeal.class));

            System.out.println(obj);

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

   

    // 5. ColumnListHandler 把查询所有记录的指定的列,添加的集合中;  如果没有指定列,把第一列的值都添加到集合中

    @Test

    public void getColumn() {

        String sql = " SELECT * FROM admin;";

        // 创建核心处理类

        QueryRunner runner = new QueryRunner(ds);

        try {

            Object obj = runner.query(sql, new ColumnListHandler("user"));

            System.out.println(obj);

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

   

    // 6. KeyedHandler: 查询返回map集合,把指定的列作为key,把每一条记录封装为map集合作为value最终结果Map<指定的列作为key,Map<列名称,列值>> map;

    @Test

    public void getKeyed() {

        String sql = " SELECT * FROM admin;";

        // 创建核心处理类

        QueryRunner runner = new QueryRunner(ds);

        try {

            Map<Integer,Map<String,String>> obj = (Map<Integer, Map<String, String>>) runner.query(sql, new KeyedHandler("user"));

           

            System.out.println(obj);

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

   

    // 9. ScalarHandler: 返回查询结果的第一行的第一列

    @Test

    public void getOneOne() {

        String sql = " SELECT * FROM admin;";

        // 创建核心处理类

        QueryRunner runner = new QueryRunner(ds);

        try {

            Object obj = runner.query(sql, new ScalarHandler("meal"));

           

            System.out.println(obj);

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

   

}

3.4 DBUtilsUpdate

/**

 * 1. 更新

 * 2. 批处理

 * @author Administrator

 *

 */

public class DBUtilsUpdate {

   

    // 创建数据源

    static DataSource ds ;

    static {

        ds = new ComboPooledDataSource();

    }

   

 

    // 1. 删除(插入、修改、删除), 指定连接对象操作

    @Test

    public void update() {

        String sql = "DELETE FROM order_meal WHERE id=1";

        // 创建DBUtils核心处理类对象

        QueryRunner query  = new QueryRunner();

       

        try {

            // 使用DBUtils类加载驱动

            DbUtils.loadDriver("com.mysql.jdbc.Driver");

            // 获取连接

            Connection con =

                DriverManager.getConnection("jdbc:mysql:///day17", "root", "root");

           

            // 删除操作

            query.update(con,sql);

           

            // 关闭连接

            DbUtils.close(con);

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

 

 

    // 1. 删除, 创建QueryRunner对象的时候指定数据源,进行jdbc操作的时候,可以不指定连接对象(推荐)

    @Test

    public void update2() {

        String sql = "DELETE FROM order_meal WHERE id=2";

        // 创建DBUtils核心处理类对象

        QueryRunner query  = new QueryRunner(ds);

       

        try {

            // 删除操作

            query.update(sql);

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    @Test

    public void update3() {

        String sql = "DELETE FROM order_meal WHERE id=? or id=?";

        // 创建DBUtils核心处理类对象

        QueryRunner query  = new QueryRunner(ds);

       

        try {

            Object[] paramValue = {4,5};

            // 删除操作

            query.update(sql,paramValue);

            // 关闭

            //DbUtils.closeQuietly(null, null, null);

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

   

    @Test

    //2. 批处理 - 删除

    public void delBatch() {

        String sql = "DELETE FROM order_meal WHERE id=? ";

       

        // 创建DBUtils核心处理类对象

        QueryRunner runner = new QueryRunner(ds);

        // 删除id 9876

        Object[][] paramValues = {{9},{8},{7}};

        try {

            runner.batch(sql, paramValues);

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    @Test

    //2. 批处理 - 增加

    public void addBatch() {

        String sql = "INSERT INTO order_meal(meal,order_date,sendman,address) VALUES(?,?,?,?)";

       

        // 创建DBUtils核心处理类对象

        QueryRunner runner = new QueryRunner(ds);

        // 删除id 9876

        Object[][] paramValues = {{"土豆丝","1999-09-09","老李","天河区"},{"土豆丝2","2011-09-09","老李","天河区"}};

        try {

            runner.batch(sql, paramValues);

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

}

 

使用DBUtils组件,写一个jdbc操作的公用类,实现对jdbc的公用操作!

 

优化之前的项目:订餐列表显示、删除!

 

使用DBUtils组件优化

 

 

/**

 * 使用DBUtils组件优化

 * jdbc公用操作,所有的dao都继承此类,调用相关方法完成对jdbc的操作!

 * @author Administrator

 *

 */

public class BaseDao {

 

    //1. 创建数据源

    private static DataSource ds = null;

    // 创建DBUtils核心处理类对象

    private static QueryRunner runner;

    static {

        // 初始化连接池资源

        ds = new ComboPooledDataSource();

        runner = new QueryRunner(ds);

    }

   

   

    //2. 查询

    public Object query(String sql,ResultSetHandler rsh,Object[] paramValues) {

        // 查询

        try {

            return runner.query(sql, rsh, paramValues);

        } catch (SQLException e) {

            throw new RuntimeException();

        }

    }

    //3. 更新

    public int update(String sql,Object[] paramVallues) {

       

        try {

            return runner.update(sql, paramVallues);

        } catch (SQLException e) {

            throw new RuntimeException();

        }

    }

    //4. 关闭

    public void closeAll(Connection con,Statement stmt, ResultSet rs) {

        DbUtils.closeQuietly(con, stmt, rs);

    }

}

 

 

总结:

1.      BeanUtils组件的使用;

       案例:请求数据自动填充到javabean中!

2.      获取元数据,实现通过的CURD操作,即自定义一个jdbc持久层框架!

       BaseDao.java 

       缺点:必须要遵守约定,即数据库中字段名称与javabean属性名称一样!

              (<propertie name=”id”  column=”sid”>_

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值