3. Apache-DBUtils实现CRUD操作

3. Apache-DBUtils实现CRUD操作

1. Apache-DBUtils简介

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

1.1 DBUtils的常用API介绍

  1. 创建QueryRunner对象的API

    QueryRunner(DataSource ds) ,提供数据源(连接池),DBUtils底层自动维护连接connection

  2. 执行增删改的SQL语句的API

    int update(String sql, Object… params),执行增删改的SQL语句,  params参数就是可变参数,参数个数取决于语句中问号的个数

  3. 执行查询的SQL语句的API

    query(String sql, ResultSetHandlerrsh, Object… params),其中ResultSetHandler是一个接口,表示结果集处理者

2. JavaBean(POJO)

2.1 JavaBean(POJO) 的介绍

在使用 Apache-DBUtils 之前,我们首先来理解一下 JavaBean。当我们从数据库中查询到了数据,那么将数据保存起来的最好方式就是 JavaBean,其实也就是写一个对应该表的 类,用来封装数据使用。

不过也是有要求的,如下:

JavaBean要求

  • 私有字段
  • 提供公共的get/set方法
  • 无参构造
  • 实现Serializable

JavaBean的 字段和属性

  • 字段:  全局/成员变量  eg: private String username
  • 属性: 去掉get或者set首字母变小写  eg: setUsername-去掉set->Username-首字母变小写->username

一般情况下,我们通过IDEA直接生成的set/get 习惯把字段和属性搞成一样而言

2.2 JavaBean的示例

下面我们简单写一个对应 user 表数据的 JavaBean 如下:

3. Apache-DBUtils实现CRUD操作
image-20210126152848788
package com.pojo;

import java.io.Serializable;

/**
 * @author Aron.li
 * @date 2021/1/19 23:04
 */

public class User implements Serializable {

    /**
     * 成员属性
     * id
     * uname
     * age
     * sex
     */

    private Integer id;
    private String uname;
    private String age;
    private String sex;

    public User() {
    }

    public User(Integer id, String uname, String age, String sex) {
        this.id = id;
        this.uname = uname;
        this.age = age;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", uname='" + uname + ''' +
                ", age='" + age + ''' +
                ", sex='" + sex + ''' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

3.  下载 DBUtils 的 JAR 包,查看说明文档

我们使用 DBUtils 可以直接下载 jar 包,导入项目中,操作如下。也可以使用 maven 来下载依赖,后续也会讲解。

3.1 下载 DbUtils 的 jar 包

http://commons.apache.org/proper/commons-dbutils/download_dbutils.cgi

3. Apache-DBUtils实现CRUD操作
image-20201028220459563

下载好的 jar 包如下:

3. Apache-DBUtils实现CRUD操作
image-20201028222511895

将 jar 包加入项目中,如下:

3. Apache-DBUtils实现CRUD操作
image-20201028222653228

3.2 查看 DbUtils 的开发文档

3. Apache-DBUtils实现CRUD操作
image-20201028222957024

下面我们首先来看看 QueryRunner 添加数据的更新方法,如下:

3. Apache-DBUtils实现CRUD操作
image-20201028223206691

4.使用 Maven 设置 DBUtils 的 依赖

访问 https://mvnrepository.com/ 搜索 dbutils

3. Apache-DBUtils实现CRUD操作
image-20210126153410224
3. Apache-DBUtils实现CRUD操作
image-20210126153446894
<!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils -->
<dependency>
    <groupId>commons-dbutils</groupId>
    <artifactId>commons-dbutils</artifactId>
    <version>1.7</version>
</dependency>

在项目的 pom.xml 中设置依赖,如下:

3. Apache-DBUtils实现CRUD操作
image-20210126153711572
    <!--  设置依赖  -->
    <dependencies>
        <!--  按下 alt + insert 搜索依赖      -->
        <!-- dbutils 依赖       -->
        <!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils -->
        <dependency>
            <groupId>commons-dbutils</groupId>
            <artifactId>commons-dbutils</artifactId>
            <version>1.7</version>
        </dependency>
        <!--  druid依赖      -->
        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.4</version>
        </dependency>
        <!--  C3P0依赖      -->
        <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.mchange/mchange-commons-java -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>mchange-commons-java</artifactId>
            <version>0.2.20</version>
        </dependency>
        <!--  mysql连接依赖      -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>
        <!--  注入junit依赖      -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

5. 使用DBUtils完成增删改

5.1  步骤

  1. 创建QueryRunner()对象,传入dataSource
  2. 调用update()方法

5.2 实现

5.2.1 首先查询一下插入之前的数据表

mysql> select * from user;
+----+-----------+-----------+-----------+-------------+
| id | name      | password  | address   | phone       |
+----+-----------+-----------+-----------+-------------+
|  1 | 章子怡    | qwerty    | Beijing   | 13788658672 |
|  2 | 郭富城    | abc123    | HongKong  | 15678909898 |
|  3 | 林志颖    | 654321    | Taiwan    | 18612124565 |
|  4 | 梁静茹    | 987654367 | malaixiya | 18912340998 |
|  5 | LadyGaGa  | 123456    | America   | 13012386565 |
+----+-----------+-----------+-----------+-------------+
5 rows in set (0.00 sec)

5.2.2 编写 insert 插入的示例

3. Apache-DBUtils实现CRUD操作
image-20210126160334783
/**
 * 使用 DruidUtil 的 QueryRunner 插入数据
 */

@Test
public void test01() throws SQLException {
    //目标:执行添加数据的SQL语句

    // 1. 设置插入数据的SQL
    String sql = "insert into user values (null,?,?,?,?)";

    // 2. 使用德鲁伊工具类,获取连接池
    DataSource dataSource = DruidUtil.getDataSource();

    //3. 创建QueryRunner对象
    QueryRunner queryRunner = new QueryRunner(dataSource);

    //4. 使用QueryRunner对象调用update(sql,...)执行增删改的SQL语句
    int i = queryRunner.update(sql, "特朗普""tlbsb""USA""123456");
    System.out.println(i);
}

插入后的数据如下:

mysql> select * from user;
+----+-----------+-----------+-----------+-------------+
| id | name      | password  | address   | phone       |
+----+-----------+-----------+-----------+-------------+
|  1 | 章子怡    | qwerty    | Beijing   | 13788658672 |
|  2 | 郭富城    | abc123    | HongKong  | 15678909898 |
|  3 | 林志颖    | 654321    | Taiwan    | 18612124565 |
|  4 | 梁静茹    | 987654367 | malaixiya | 18912340998 |
|  5 | LadyGaGa  | 123456    | America   | 13012386565 |
|  6 | 特朗普    | tlbsb     | USA       | 123456      | -- 插入的数据
|  7 | 特朗普    | tlbsb     | USA       | 123456      |
+----+-----------+-----------+-----------+-------------+
7 rows in set (0.00 sec)

mysql> 

5.2.3 编写 update 更新数据的示例

3. Apache-DBUtils实现CRUD操作
image-20210126161109378
/**
 * 使用 DruidUtil 的 QueryRunner 更新数据
 */

@Test
public void test02() throws SQLException {
    //目标:执行更新数据的SQL语句

    // 1. 设置更新数据的SQL
    String sql = "update user set name = ? where id = ?";

    // 2. 使用德鲁伊工具类,获取连接池
    DataSource dataSource = DruidUtil.getDataSource();

    //3. 创建QueryRunner对象
    QueryRunner queryRunner = new QueryRunner(dataSource);

    //4. 使用QueryRunner对象调用update(sql,...)执行增删改的SQL语句
    int i = queryRunner.update(sql, "拜登""7");
    System.out.println("受影响的行数: " + i);
}

5.2.5 编写 delete 删除数据的示例

3. Apache-DBUtils实现CRUD操作
image-20210126161710907
/**
 * 使用 DruidUtil 的 QueryRunner 删除数据
 */

@Test
public void test03() throws SQLException {
    //目标:执行删除数据的SQL语句

    // 1. 设置更新数据的SQL
    String sql = "delete from user where id = ?";

    // 2. 使用德鲁伊工具类,获取连接池
    DataSource dataSource = DruidUtil.getDataSource();

    //3. 创建QueryRunner对象
    QueryRunner queryRunner = new QueryRunner(dataSource);

    //4. 使用QueryRunner对象调用update(sql,...)执行增删改的SQL语句
    int i = queryRunner.update(sql, "6");
    System.out.println("受影响的行数: " + i);
}

5.3 小结

  1. 创建QueryRuner()对象, 传入DataSource
  2. 调用update(String sql, Object…params)

6. 使用DBUtils完成查询

6.1 步骤

  1. 创建QueryRunner()对象 传入DataSource

  2. 调用query(sql, resultSetHandler,params)方法

6.2 ResultSetHandler结果集处理类介绍

3. Apache-DBUtils实现CRUD操作
img

6.3 代码实现

6.3.1 首先准备好一个 JavaBean,用来保存查询的结果

package com.pojo;

public class User2 {

    // | id | name      | password  | address   | phone       |
    private Integer id;
    private String name;
    private String password;
    private String address;
    private String phone;

    public User2() {
    }

    public User2(Integer id, String name, String password, String address, String phone) {
        this.id = id;
        this.name = name;
        this.password = password;
        this.address = address;
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "User2{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", password='" + password + ''' +
                ", address='" + address + ''' +
                ", phone='" + phone + ''' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}

3.2.1 查询一条数据封装到JavaBean对象中(使用BeanHandler)

3. Apache-DBUtils实现CRUD操作
image-20210126165222668
/**
 * 查询一条数据封装到JavaBean对象中(使用BeanHandler)
 */

@Test
public void test04() throws SQLException {
    // 1. 设置更新数据的SQL
    String sql = "select * from user where id = ?";

    // 2. 使用德鲁伊工具类,获取连接池
    DataSource dataSource = DruidUtil.getDataSource();

    //3. 创建QueryRunner对象
    QueryRunner queryRunner = new QueryRunner(dataSource);

    //4.执行SQL语句,将结果封装到 POJO 对象中
    User2 user = queryRunner.query(sql, new BeanHandler<>(User2.class), 7);
    System.out.println(user);
}

3.2.2 查询多条数据封装到List中(使用BeanListHandler)

3. Apache-DBUtils实现CRUD操作
image-20210126165524607
    /**
     *  查询多条数据封装到List<JavaBean>中(使用BeanListHandler)
     */

    @Test
    public void test05() throws SQLException {
        // 1. 设置更新数据的SQL
        String sql = "select * from user where id > ?";

        // 2. 使用德鲁伊工具类,获取连接池
        DataSource dataSource = DruidUtil.getDataSource();

        //3. 创建QueryRunner对象
        QueryRunner queryRunner = new QueryRunner(dataSource);

        //4.执行SQL语句
        List<User2> userList = queryRunner.query(sql, new BeanListHandler<>(User2.class), 2);

        //5.遍历查询到的结果
        for (User2 user : userList) {
            System.out.println(user);
        }
        
    }

3.2.3 查询一条数据,封装到Map对象中(使用MapHandler)

3. Apache-DBUtils实现CRUD操作
image-20210126165959615
/**
 *  查询一条数据,封装到Map对象中(使用MapHandler)
 */

@Test
public void test06() throws SQLException {
    // 1. 设置更新数据的SQL
    String sql = "select * from user where id = ?";

    // 2. 使用德鲁伊工具类,获取连接池
    DataSource dataSource = DruidUtil.getDataSource();

    //3. 创建QueryRunner对象
    QueryRunner queryRunner = new QueryRunner(dataSource);

    //4.执行SQL语句
    // 查询一条数据,封装到Map中: 结果集的字段名就是map的key,结果集的字段值就是map的value
    Map<String, Object> map = queryRunner.query(sql, new MapHandler(), 3);

    //5.遍历查询到的结果
    System.out.println(map);
}

3.2.4 查询多条数据,封装到List<Map>对象中(使用MapListHandler)

3. Apache-DBUtils实现CRUD操作
image-20210126170314186
    /**
     *  查询多条数据,封装到`List<Map>`对象中(使用MapListHandler)
     */

    @Test
    public void test07() throws SQLException {
        // 1. 设置更新数据的SQL
        String sql = "select * from user where id > ?";

        // 2. 使用德鲁伊工具类,获取连接池
        DataSource dataSource = DruidUtil.getDataSource();

        //3. 创建QueryRunner对象
        QueryRunner queryRunner = new QueryRunner(dataSource);

        //4.执行SQL语句
        List<Map<String, Object>> mapList = queryRunner.query(sql, new MapListHandler(), 3);

        //5.遍历查询到的结果
        for (Map<String, Object> map : mapList) {
            System.out.println(map);
        }

    }

3.2.5 查询单个数据(使用ScalarHandler())

3. Apache-DBUtils实现CRUD操作
image-20210126170540337
    /**
     *  查询单个数据(使用ScalarHandler())
     */

    @Test
    public void test08() throws SQLException {

        // 1. 设置更新数据的SQL
        String sql = "select count(*) from user";

        // 2. 使用德鲁伊工具类,获取连接池
        DataSource dataSource = DruidUtil.getDataSource();

        //3. 创建QueryRunner对象
        QueryRunner queryRunner = new QueryRunner(dataSource);

        //4.执行SQL语句
        Object count = queryRunner.query(sql, new ScalarHandler());
        System.out.println("查询总条数: " + count);
        
    }

6.4. 小结

  1. 步骤

    • 创建QueryRunner() 对象传入DataSource
    • 调用query(sql,ResultSetHandler, params…)
  2. ResultSetHandler

    • BeanHandler()   查询一条记录封装到JavaBean对象
    • BeanListHandler()     查询多条记录封装到Listlist
    • MapHandler()            查询一条记录封装到Map对象
    • MapListHandler()     查询多条记录封装到List
    • ScalarHandler()        封装单个记录的 eg:统计数量
  3. 注意实现

    封装到JavaBean条件, 查询出来的数据的列名必须和JavaBean属性一致


原文始发于微信公众号(海洋的渔夫):3. Apache-DBUtils实现CRUD操作

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/34064.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!