DbUtils入门

  • DbUtils简介

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

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

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

 

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源,欢迎大家关注尚硅谷公众号(atguigu)了解更多。