博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DbUtils入门
阅读量:4046 次
发布时间:2019-05-25

本文共 3327 字,大约阅读时间需要 11 分钟。

  • 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最重要的就是要熟悉它为我们提供的众多结果集。

 

 

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

你可能感兴趣的文章
c++字符数组和字符指针区别以及str***函数
查看>>
c++类的操作符重载注意事项
查看>>
c++模板与泛型编程
查看>>
WAV文件解析
查看>>
WPF中PATH使用AI导出SVG的方法
查看>>
WPF UI&控件免费开源库
查看>>
QT打开项目提示no valid settings file could be found
查看>>
Win10+VS+ESP32环境搭建
查看>>
android 代码实现圆角
查看>>
flutter-解析json
查看>>
android中shader的使用
查看>>
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>
drat中构造方法
查看>>
JavaScript的一些基础-数据类型
查看>>
JavaScript基础知识(2)
查看>>
转载一个webview开车指南以及实际项目中的使用
查看>>
android中对于非属性动画的整理
查看>>
一个简单的TabLayout的使用
查看>>
ReactNative使用Redux例子
查看>>
Promise的基本使用
查看>>