DbUtils入门

DbUtils是Apache组织提供的一款对JDBC进行封装的工具库,简化了数据库操作,尤其在查询方面表现突出,提供了丰富的结果集处理器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • DbUtils简介

Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。

JDBC的操作复杂、且非常容易出错。因此,DbUtils可以让我们从这些复杂繁琐的工作中解放出来,是我们更加的专注于数据库的相关操作。

  • 使用DbUtils的优势
  1. 完善的封装,使我们可以编写更加简洁的代码,是我们可以专注于数据库相关操作。
  2. 自动将结果集封装为JavaBean,而不需要在通过手动封装对象,转换类型。
  3. 可以使用数据源,使用JNDI,数据库连接池等技术来优化性能--重用已经构建好的数据库连接对象。
  • 核心类
  1. DbUtils
    1. 数据库操作基本类,提供了数据库连接相关操作的静态方法。
      1. public static void close(Connection conn)
        1. 关闭数据库连接
      2. public static void close(ResultSet rs)
        1. 关闭结果集
      3. public static void close(Statement stmt)
        1. 关闭Statement
      4. public static void commitAndClose(Connection conn)
        1. 提交是否并关闭连接
  1. QueryRunner
    1. 用于执行数据库操作的类,主要使用的类
      1. batch()
        1. 批量操作数据库
      2. insert()
        1. 向数据库中插入一条数据,可以返回插入数据的自增ID
      3. insertBatch()
        1. 向数据库中批量插入多条数据
      4. query()
        1. 从数据库中查询数据
      5. update()
        1. 修改数据库中的内容,返回修改的条数
    2. 该类中给我们提供了大量的重载方法来调用,我们可以根据不同的需要调用不同的方法。
  2. ResultSetHandler
    1. ResultSetHandler是一个接口,我们操作数据库时,最麻烦的问题就是将从数据库中查询到的数据封装为对象,这是一个非常繁琐,非常容易出错的操作。这个接口就是帮我们解决这个问题。而更好的是他已经给我们提供了足够多的实现类,而不用我们再去自己实现。
    2. ArrayHandler
      1. 将查询到的数据封装为一个Object数组
    3. ArrayListHandler
      1. 将查询到的数据封装为一个List<Object[]>
    4. BeanHandler
      1. 返回一个对象
    5. BeanListHandler
      1. 返回对象的集合(List)
    6. BeanMapHandler
      1. 返回一个map,map的key为第一个数据,值为一行数据
    7. ColumnListHandler
      1. 返回第一列的数据
    8. KeyedHandler
      1. 返回一个map,map的key为第一个数据,值为一行数据
    9. MapHandler
      1. 将查询到的数据封装为一个Map<String,Object>
    10. MapListHandler
      1. 将查询到数据封装为一个List< Map<String,Object>>
    11. ScalarHandler

返回一个单独的结果

  •   示例代码
  1. 环境准备

在数据库中创建一个表user

CREATE TABLE user(

    id INT(11) AUTO_INCREMENT PRIMARY KEY

    `name` VARCHAR(20),

    age INT(11)

)     

  1. 创建User用于封装数据

public class User {

    private Integer id;

    private String name;

    private Integer age;

    //省略部分代码

}

  1. 创建TestDB测试类
    1. 获取数据库连接的静态方法

public static Connection getConnection(){

Connection conn = null;

try {

Class.forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection("jdbc:mysql:///test","root","root");

} catch (Exception e) {

e.printStackTrace();

}

return conn;

}  

  1. 插入数据方法

public void save(){

       QueryRunner runner = new QueryRunner();

       Connection conn = getConnection();

       String sql = "INSERT INTO user (name,age) values(?,?)";

       try {

           Long id = runner.insert(conn, sql, new ScalarHandler<Long>(), "sunwukong", 20 );

           System.out.println(id);

       } catch (SQLException e) {

           e.printStackTrace();

       } finally{

           DbUtils.closeQuietly(conn);

       }

    }

  1. 查询一个对象

public void queryOne(){

QueryRunner runner = new QueryRunner();

Connection conn = getConnection();

String sql = "SELECT id , name , age FROM user";

try {

User user = runner.query(conn, sql, new BeanHandler<User>(User.class));

System.out.println(user);

} catch (SQLException e) {

e.printStackTrace();

} finally{

DbUtils.closeQuietly(conn);

}

}

  1. 查询多个对象

public void queryMore(){

       QueryRunner runner = new QueryRunner();

       Connection conn = getConnection();

       String sql = "SELECT id , name , age FROM user";

       try {

           List<User> list = runner.query(conn, sql, new BeanListHandler<User>(User.class));

           System.out.println(list);

       } catch (SQLException e) {

           e.printStackTrace();

       } finally{

           DbUtils.closeQuietly(conn);

       }

    }

  1. 修改

public void update(){

        QueryRunner runner = new QueryRunner();

        Connection conn = getConnection();

        String sql = "UPDATE user set name=? , age=? WHERE id=?";

        try {

            runner.update(conn, sql, "admin2",12,1);

        } catch (SQLException e) {

            e.printStackTrace();

        } finally{

            DbUtils.closeQuietly(conn);

        }

    }

  •   总结

经过上面的代码不难发现,DbUtils的确是简化了我们的开发。但是可以注意到的是DbUtils的最大优势并不是修改和插入,因为即使原生的JDBC修改和插入也并不是多繁琐。DbUtils最大的优势是查询,DbUtils为我们提供了大量的结果集处理器,使我们可以很方便的将查询到结果转换为各种对象,极大的简化了我们的开发,所以掌握DbUtils最重要的就是要熟悉它为我们提供的众多结果集。

 

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值