DBUtils工具类的使用

1、DBUtils是什么

为了更加简单地使用JDBC,Apache组织提供了一个DBUtils工具,它是操作数据库的一个组件,实现了对JDBC的简单封装,可以在不影响数据库访问性能的情况下简化JDBC的编码工作量。DBUtils工具要有2个作用。

写数据,DBUtils可以通过编写SQL语句对数据表进行增、删、改操作。

读数据,DBUtils工具可以将从数据表中读取的数据结果集转换成Java常用类集合,以方便对结果进行处理。

2、DBUtils的核心类

DBUtils核心类库主要包括DBUtils类、QueryRunner类和ResultSetHandler接口。DBUtils工具主要通过这三个核心API进行JDBC的所有操作。

  • QueryRunner类:用来执行sql语句
  • DbUtils类:用来释放资源
  • ResultSetHandler接口:用来接收查询的结果集

2.1、QueryRunner类

QueryRunner类简化了执行SQL语句的代码,它与ResultSetHandler配合就能完成大部分的数据库操作,大大减少了编码量。QueryRunner类提供了2个构造方法

构造方法作用
QueryRunner()如果使用空参数构造方法创建对象,那么使用update方法和query方法时,必须传递conn对象
QueryRunner(DataSource ds)如果使用的是带连接池的构造方法,那么QueryRunnery类会自动的从连接池中获取conn对象
使用完毕会自动把conn对象归还给连接池

2.2、QueryRunner类的常用方法

QueryRunner主要提供了2个方法:

  • 用来执行insert,update,delete语句的方法:update ,该方法返回int类型的值
  • 用来执行select语句的方法:query 该方法返回对象或者集合

3.3、ResultSetHandler实现类

BeanHandler和BeanListHandler实现类是将结果集中的数据封装到对应的JavaBean中。在封装时,表中数据的字段和JavaBean的属性是相互对应的,一条数据记录被封装进一个对应的JavaBean对象中。BeanHandler和BeanListHandler的对比如下表所示。

3、增删改测试

3.1、数据准备

maven依赖

<dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
        <dependency>
            <groupId>commons-dbutils</groupId>
            <artifactId>commons-dbutils</artifactId>
            <version>1.7</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

创建表,添加数据

-- ----------------------------
-- 创建部门表
-- ----------------------------
DROP TABLE IF EXISTS `tb_dept`;
CREATE TABLE `tb_dept` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '部门编号',
  `dept_name` varchar(20) NOT NULL COMMENT '部门名称',
  `dept_desc` varchar(200) DEFAULT NULL COMMENT '部门简介',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- 添加部门表数据
INSERT INTO `tb_dept` VALUES ('1', '研发部', '负责公司的产品研发工作');
INSERT INTO `tb_dept` VALUES ('2', '市场部', '负责市场推广和客户关系管理');
INSERT INTO `tb_dept` VALUES ('3', '销售部', '负责销售和客户关系维护');
INSERT INTO `tb_dept` VALUES ('4', '人力资源部', '负责招聘、培训和员工关系管理');
INSERT INTO `tb_dept` VALUES ('5', '财务部', '负责公司的财务管理和报表制作');

创在resources目录下添加c3p0-config.xml文件

<?xml version="1.0" encoding="utf-8" ?>
<c3p0-config>
    <named-config name="testc3p0">
        <!--指定链接数据源的基本属性-->
        <!--驱动-->
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <!--路径-->
        <property name="jdbcUrl">
            jdbc:mysql://localhost:3306/db_student
        </property>
        <!--用户名-->
        <property name="user">root</property>
        <!--密码-->
        <property name="password">123456</property>
        <!--连接池设置-->
        <!--初始化连接的数量-->
        <property name="initialPoolSize">20</property>
        <!--最大有多少连接-->
        <property name="maxPoolSize">40</property>
        <!--当超出最大数量的时候,每次增加多少条连接-->
        <property name="acquireIncrement">5</property>
        <!--最少有多少连接-->
        <property name="minPoolSize">10</property>
    </named-config>
</c3p0-config>

 添加实体类

public class Dept {
    private int id;
    private String dept_name;
    private String dept_desc;
    //省略getter setter
}

3.2、CURD测试

public class QueryRunnerInsertDemo {
    ComboPooledDataSource dataSource;
    QueryRunner qr;
    //获取数据源
    @Before
    public void getDs(){
        //获取数据源
        dataSource = new ComboPooledDataSource("testc3p0");
        //获取queryRunner对象
        qr = new QueryRunner(dataSource);
    }
    //添加数据
    @Test
    public void addTest() throws SQLException {
        //编写添加sql语句
        String sql = "insert into tb_dept(dept_name,dept_desc) values(?,?)";
        //调用更新方法
        int row = qr.update(sql, "开发部", "需求变现");
        System.out.println("受影响的行:"+row);
    }
    //修改
    @Test
    public void upTest() throws SQLException {
        //编写添加sql语句
        String sql = "update tb_dept set dept_name=?,dept_desc=? where id = ?";
        //调用更新方法,传递参数
        int row = qr.update(sql, "开发部","需求变现",1);
        System.out.println("受影响的行:"+row);
    }
    //删除
    @Test
    public void delTest() throws SQLException {
        //编写添加sql语句
        String sql = "delete from tb_dept where id = ?";
        //调用更新方法,传递参数
        int row = qr.update(sql, 1);
        System.out.println("受影响的行:"+row);
    }
    //通过Id查询数据
    @Test
    public void findById() throws SQLException {
        //编写添加sql语句
        String sql = "select * from tb_dept where id = ?";
        //获取BeanHandle对象
        BeanHandler<Dept> beanHandler = new BeanHandler<>(Dept.class);
        //调用查询方法,传递参数
        Dept dept = qr.query(sql, beanHandler,1);
        System.out.println("对象:"+ dept);
    }

    //查询所有数据
    @Test
    public void findAll() throws SQLException {
        //编写添加sql语句
        String sql = "select * from tb_dept";
        //获取BeanListHandle对象
        BeanListHandler<Dept> beanListHandler = new BeanListHandler<>(Dept.class);
        //调用查询方法
        List<Dept> depts = qr.query(sql, beanListHandler);
        System.out.println("集合:"+ depts);
    }
}

查询左右运行结果: 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值