JDBC一一DBUtils的使用、JavaBean

目录


DBUtils

跳转到目录
如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils

目的: 简化JDBC编程
  • 需要导入jar包

Dbutils三个核心功能介绍

  • QueryRunner 中提供对sql语句操作的API.
  • ResultSetHandler 接口,用于定义select操作后,怎样封装结果集.
  • DbUtils 类,它就是一个工具类,定义了关闭资源与事务处理的方法

QueryRunner核心类

跳转到目录
提供数据源

  • 构造方法
    • QueryRunner(DataSource) 创建核心类,并提供数据源,内部自己维护Connection
  • 普通方法
    • update(String sql , Object ... params)执行DML语句
    • query(String sql , ResultSetHandler , Object ... params) 执行DQL语句,并将查询结果封装到对象中。

提供连接

  • 构造方法
    • QueryRunner() 创建核心类,没有提供数据源,在进行具体操作时,需要手动提供Connection
  • 普通方法
    • update(Connection conn , String sql , Object ... params) 使用提供的Connection,完成
    • DML语句
    • query(Connection conn , String sql , ResultSetHandler , Object ... params) 使用提供的Connection,执行DQL语句,并将查询结果封装到对象中。

QueryRunner实现添加、更新、删除操作

跳转到目录

  • update(String sql, Object… params) 用来完成表数据的增加、删除、更新操作

添加、更新、删除操作

/**
 * QueryRunner实现添加、更新、删除操作
 */
public class DBUtilsDemo1 {

    @Test
    public void insert() throws Exception {
        // 获取一个用来执行SQL语句对象
        QueryRunner qr = new QueryRunner(DruidUtil.getDataSource());
        String sql = "INSERT INTO product(pid, pname, price, category_id) VALUES(?,?,?,?)";
        Object[] params = {100, "百岁山", 5500, "c005"};
        int count = qr.update(sql, params);
        System.out.println("执行成功:=" + count);
    }


    @Test
    public void update() throws Exception {
        QueryRunner qr = new QueryRunner(DBCPUtil.getDataSource());
        String sql = "UPDATE product SET pname=?,price=?,category_id=? WHERE pid=?";
        Object[] params = {"芒果99", "998", "c009", 13};
        int count = qr.update(sql, params);
        System.out.println(count);
    }

    @Test
    public void delete() throws SQLException {
        QueryRunner queryRunner = new QueryRunner(C3P0Util.getDataSource());
        String sql = "DELETE from product WHERE pid = ?";
        Object[] params = {100};
        int r = queryRunner.update(sql, params);
        System.out.println(r);
    }
}

QueryRunner实现查询操作

跳转到目录

  • query(String sql, ResultSetHandler rsh, Object… params) 用来完成表数据的查询操作
    参数:
    • String sql: sql语句,参数用?替代
    • ResultSetHandler<T> rsh: 结果集处理器,接口,必然传递实现类对象
    • Object … params: 可变参数,传递参数列表,数组.
      作用: 给sql中?进行赋值.

ResultSetHandler结果集

跳转到目录

  • BeanHandler:将结果集中第一条记录封装到一个指定的javaBean中。
  • BeanListHandler:将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
  • ScalarHandler:它是用于单数据。例如select count(*) from 表操作。
  • ColumnListHandler:将结果集中指定的列的字段值,封装到一个List集合中

JavaBean
跳转到目录
JavaBean就是一个类,在开发中常用于封装数据,。具有如下特性.

  1. 需要实现接口:java.io.Serializable ,通常实现接口这步骤省略了,不会影响程序。
  2. 提供私有字段:private 类型 字段名;
  3. 提供getter/setter方法:
  4. 提供无参构造

BeanHandler
跳转到目录
查询数据表结果集处理其中一种方式:
BeanHandler处理方式 将数据表的结果集第一行数据,封装成JavaBean类的对象
构造方法: BeanHandler(Class<T> type) 传递一个Class类型对象,将结果封装到哪个类的对象

    @Test
    public void testQueryBeanHandler() throws Exception{
        QueryRunner queryRunner = new QueryRunner(DruidUtil.getDataSource());
        String sql = "SELECT * FROM product WHERE pid = ?";
        Object[] params = {6};
        // 查询并封装
        Product pro = queryRunner.query(sql, new BeanHandler<>(Product.class), params);
        System.out.println(pro);
    }

BeanListHandler
跳转到目录
查询数据表结果集处理其中一种方式:
BeanListHandler处理方式 将数据表的每一行数据,封装成JavaBean类对象 ,多行数据了,多个JavaBean对象,存储List集合.

   @Test
   public void testQueryBeanListHandler() throws Exception{
       QueryRunner queryRunner = new QueryRunner(DBCPUtil.getDataSource());
       String sql = "SELECT * FROM product";
       Object[] params = {};
       List<Product> pros = queryRunner.query(sql, new BeanListHandler<Product>(Product.class), params);
       for (Product pro : pros) {
           System.out.println(pro);
       }
   }

ScalarHander
跳转到目录
作用: 把查询结果的某一列,存储到List集合对象
构造方法:

  • public ScalarHandler(): 获取查询结果的第一行的第一列
  • public ScalarHandler(int index): 获取查询结果的第一行的第index列
  • public ScalarHandler(String ColumnName): 获取查询结果的第一行的ColumnName列
    @Test
    public void testQueryScalarHandler() throws Exception{
        QueryRunner queryRunner = new QueryRunner(DruidUtil.getDataSource());
        String sql = "SELECT * FROM product WHERE pid = ?";
        Object[] params = {2};
        // 表示查询第二行的第二列
        Object o = queryRunner.query(sql, new ScalarHandler(2), params);
        System.out.println(o);
    }

ColumnListHandler
跳转到目录
作用: 把查询结果的某一列,存储到List集合对象.用于聚合函数
构造方法:

  • public ColumnListHandler(): 把第一列的内容存储到List集合中
  • public ColumnListHandler(int index): 把指定编号列的内容存储到List集合中
  • public ColumnListHandler(String ColumnName): 把指定列名对应列的内容存储到List集合中
    @Test
    public void testQueryColumnListHandler() throws Exception{
        QueryRunner queryRunner = new QueryRunner(C3P0Util.getDataSource());
        String sql = "SELECT * FROM product";
        // List<Object> list = queryRunner.query(sql, new ColumnListHandler());// 默认查询第一列
        // List<Object> list = queryRunner.query(sql, new ColumnListHandler(2)); // 查询关系表指定的第二列
        List<Object> list = queryRunner.query(sql, new ColumnListHandler("pname"));
        for (Object o : list) {
            System.out.println(o);
        }
    }

小结

跳转到目录
DBUtils工具

  • 作用:简化JDBC的操作

DBUtils常用类与方法

  • QueryRunner 用来执行SQL语句对象

    • update(Connection conn, String sql, Object… params) 插入表记录、更新表记录、删除表记录
    • query(Connection conn, String sql, ResultSetHandler handler, Object… params) 查询表记录
  • ResultSetHandler 处理结果集的对象

    • BeanHandler:将结果集中第一条记录封装到一个指定的javaBean中。
    • BeanListHandler:将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
    • ScalarHandler:它是用于单数据。例如select count(*) from 表操作。
    • ColumnListHandler:将结果集中指定的列的字段值,封装到一个List集合中
发布了151 篇原创文章 · 获赞 68 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/m0_37989980/article/details/104072744