Dbutils的使用

    科技2026-03-27  12

    一、什么是Dbutils DbUtils工具类是 Apache 组织提供的一个开源JDBC工具类库,它封装了JDBC的常用操作,可以简化增删查改的步骤。 二、使用Dbutils的原因 在使用Dbutils 之前,Dao层使用的技术是JDBC,JDBC的弊端有(1)数据库链接对象、sql语句操作对象,封装结果集对象,这三大对象会重复定义(2)封装数据的代码重复,而且操作复杂,代码量大(3)释放资源的代码重复三、Dbutils三个核心类 1、DbUtils:连接数据库对象----jdbc辅助方法的集合类,线程安全构造方法:DbUtils()作用:控制连接,控制书屋,控制驱动加载一个类。 2、QueryRunnerSQL语句的操作对象,可以设置查询结果集的封装策略,线程安全。构造方法: 2.1、QueryRunner():创建一个与数据库无关的QueryRunner对象,后期再操作数据库的会后,需要手动给一个Connection对象,它可以手动控制事务。 Connection.setAutoCommit(false); 设置手动管理事务Connection.commit(); 提交事务 2.2、QueryRunner(DataSource ds):创建一个与数据库关联的queryRunner对象,后期再操作数据库的时候,不需要Connection对象,自动管理事务。DataSource:数据库连接池对象。 构造函数与增删改查方法的组合: QueryRunner() update(Connection conn, String sql, Object… params) query(Connection conn, String sql,ResultSetHandler rsh, Object… params) QueryRunner(DataSource ds) update(String sql, Object… params) query(String sql, ResultSetHandler rsh, Object… params) 3、ResultSetHandle:封装数据的策略对象------将封装结果集中的数据,转换到另一个对象策略:封装数据到对象的方式(示例:将数据库保存在User、保存到数组、保存到集合)方法介绍:handle(ResultSet rs) 四、eclipse中DbUtils工具使用步骤 导入三个jar包,一个配置文件;创建一个工具类MyDbUtils;创建执行对象;执行数据库操作和原生的JDBC。1、导入三个jar包,一个配置文件。 mysql连接驱动jar包: mysql-connector-java-5.1.37-bin.jar 德鲁伊连接池包 :druid-1.1.5.jar DbUtils工具包 :commons-dbutils-1.6.jardruid.properties 配置文件使用DbUtils工具是需要手动获得一个连接对象的,可采用druid连接池来获得连接对象,druid.properties配置文件是配置自己的数据库信息以及连接池的信息,放在src目录下。 2、创建一个工具类MyDbUtils由于DbUtils的使用需要手动的获得一个连接对象,故需要自己定义一个类来获取连接对象对象,使用druid连接池来动态的管理连接对象,管理多个连接对象从而提高效率.而数据源是数据库的一个抽象的表示,可通过数据源来获得连接对象,再使用druid连接池来管理连接对象。创建MyDbUtils就是为了根据个人的配置文件来获取个人的数据库信息,进而获得个人的数据源。 3、创建执行对象获得一个执行对象qr,用来执行sql语句:private QueryRunner qr = new QueryRunner(MyDbUtils.getDataSource(()) ; 4、执行数据库操作DbUtils封装了大部分对数据库的操作,只需要准备好sql语句就即可。QueryRunner对象有两个常用的方法对数据库进行操作: 4.1、增删改等无返回值的操作: 使用update(); 4.2、查询语句(有返回值的):根据查询结果的不同,DbUtils提供了三个常用的类(BeanHandler类:实现类,把一条记录转换成对象;BeanListHandler类:实现类,把多条记录转换成List集合; ScalarHandler类:实现类,适合获取一行一列)来对结果进行转换。 4.2.1、返回值是一个对象的: String sql2 = “select * from user where id =?”; try { User user = qr.query(sql2, new BeanHandler(User.class),2); } catch (SQLException e) { e.printStackTrace(); } 4.2.2、返回值是一个集合的: String sql = “select * from user;”; try { List userList = qr.query(sql, new BeanListHandler(User.class)); } catch (SQLException e) { e.printStackTrace(); } 4.2.3、查询聚合函数时,返回值是聚合函数得到的值: String sql3 = “select count(*) from user”; try { Long count = (Long) qr.query(sql3, new ScalarHandler()); } catch (SQLException e) { e.printStackTrace(); } 5、原生的JDBC PreparedStatement pstat = null;Connection conn = null;try { // 1,加载驱动 Class.forName(“com.mysql.jdbc.Driver”); // 2. 获取连接对象 conn = DriverManager.getConnection(“jdbc:mysql:localhost:3306/stu”, “root”, “root”); // 3. 准备sql语句 String sql = “update user set username = ? where id = ?;”; // 4. 预编译sql语句并获取执行对象 pstat = conn.prepareStatement(sql); // 5.为占位符赋值.第几个参数,参数值 pstat.setString(1, “小明”); pstat.setInt(2, 1); // 6.1执行sql语句,无返回值的sql long count = pstat.executeLargeUpdate(); // 7.2执行有返回值的sql ArrayList list = new ArrayList(); String sql2 = “select * from user;”; pstat = conn.prepareStatement(sql2); // 7.3获得结果集 ResultSet rs = pstat.executeQuery(); // 7.4遍历结果集 while (rs.next()) { int id = rs.getInt(1); String name = rs.getString(2); User user = new User(); user.setId(id); user.setUsername(name); // 7.5封装成list集合 list.add(user); }} catch (ClassNotFoundException | SQLException e1) { e1.printStackTrace();} finally { //8.释放资源 if (pstat != null) { try { pstat.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } }} 五、总结 DBUtils是个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果集封装成JavaBean,这就为我们做了最枯燥乏味、最容易出错的一大部分工作。在使用DBUtils之前,应该注意一些问题:1、DBUtils是JDBC的简单封装,可以和JDBC混合使用。 2、DBUtils对结果集自动封装为JavaBean是有着苛刻要求的:必须满足JavaBean的规范,其次Bean的getter与setter方法的名字与结果集的列名一一对应,而不要求JavaBean的私有成员与表结果集列名一一对应。 3、DBUtils的性能和JDBC性能是一样,测试过程中没发现性能损失,拥有了很高性能的同时,而不失JDBC的灵活性。

    Processed: 0.025, SQL: 9