DBUtils实现CURD操作

1.Apache-DBUtils简介

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

API介绍:

  • org.apache.commons.dbutils.QueryRunner
  • org.apache.commons.dbutils.ResultSetHandler
  • 工具类:org.apache.commons.dbutils.DbUtils

2.主要API的使用
DbUtils:提供如关闭连接、装载JDBC驱动程序等常规工作的工具类,里面的所有方法都是静态的。主要方法如下:

  • public static void close(…) throws java.sql.SQLException : DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭Connection、Statement和ResultSet
  • public static void closeQuietly(…): 这一类方法不仅能在Connection、Statement和ResultSet为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLEeception。
  • public static void commitAndClose(Connection conn)throws SQLException: 用来提交连接的事务,然后关闭连接
  • public static void commitAndCloseQuietly(Connection conn): 用来提交连接,然后关闭连接,并且在关闭连接时不抛出SQL异常。
  • public static void rollback(Connection conn)throws SQLException:允许conn为null,因为方法内部做了判断
  • public static void rollbackAndClose(Connection conn)throws SQLException
  • rollbackAndCloseQuietly(Connection)
  • public static boolean loadDriver(java.lang.String driverClassName):这一方装载并注册JDBC驱动程序,如果成功就返回true。使用该方法,你不需要捕捉这个异常ClassNotFoundException。

3.QueryRunner类
该类简化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。

QueryRunner类提供了两个构造器:
默认的构造方法。
需要一个javax.sql.DataSource来作参数的构造器。

QueryRunner类的主要方法:

  • public int update(Connection connection,String sql, Object …args) throws SQLException:用来执行一个更新(插入、更新、删除)操作。
  • public Object query(Connection connection ,String sql ,ResultSetHandler resultSetHandler,Object…args)thorws SQLException

4.ResultSetHandler接口及实现类
该接口用于处理 java.sql.ResultSet,将数据按要求转换成另一种形式。

  • ResultSetHandler接口提供了一个单独的方法:Object handle (java.sql.Result.rs)。
    接口的主要实现类:
  • BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中
  • BeanListHandler:将结果集中的每一行数据都封装到一个对应的javaBean实例中,然后存放到List里。
  • MapHandler:将结果集中的第一行数据封装到一个Map里,key为列名,value就是对应的值
  • MapListHandler:将结果集中的每一行数据都封装到一个Map中,然后存放到List中
  • ScalarHandler:查询单个值对象。

BaseDao

package dao.impl;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import utils.JdbcUtils;

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

/**
 * @ClassName : BaseDao  //类名
 * @Description : 对数据的基本操作  //描述
 * @Author : Gao //作者
 * @Date: 2021/11/3  22:03
 */

public abstract class BaseDao {
    //使用DbUtils操作数据库
    private QueryRunner queryRunner = new QueryRunner();

    /**
     * update() 方法用来执行 update delete insert语句
     *
     * @return 如果返回-1表示执行失败,返回其他表示影响的行数
     */
    public int update(String sql, Object... args) {
        Connection connection = JdbcUtils.getConnection();
        try {
            return queryRunner.update(connection, sql, args);
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException();
        }
    }
    /**
     * 查询返回一个javaBean的sql语句
     *
     * @return
     * @paramt type 返回的对象类型
     * @paramt SQL 执行的sql语句
     * @paramt args SQL对应的参数值
     * @paramt <T>返回的类型的泛型
     */
    public <T> T queryForOne(Class<T> type, String sql, Object... args) {
        Connection connection = JdbcUtils.getConnection();
        try {
            return queryRunner.query(connection, sql, new BeanHandler<>(type), args);
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException();
        }
    }

    /**
     * 查询返回多个javaBean的SQL语句
     * @param  type 返回的对象类型
     * @param  sql 执行的SQL语句
     * @param args sql对应的参数值
     * @param <T> 返回的类型泛型
     * @return
     */
    public <T> List<T> queryForList(Class<T> type,String sql,Object ...args){
        Connection connection = JdbcUtils.getConnection();

        try {
            return queryRunner.query(connection,sql,new BeanListHandler<T>(type),args);
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException();
        }
    }
    /**
     * 执行返回一行一列的sql语句
     * @param sql 执行的SQL语句
     * @param args sql对应的数值
     * @return
     */
    public Object queryForSingleValue(String sql,Object ...args){
        Connection connection = JdbcUtils.getConnection();

        try {
            return queryRunner.query(connection,sql,new ScalarHandler(),args);
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值