DBUtils工具类学习

    xiaoxiao2023-11-08  162

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

    1、特征

    DBUtils是java编程中的数据库操作实用工具,小巧简单实用, 1.对于数据表的读操作,他可以把结果转换成List,Array,Set等java集合,便于程序员操作; 2.对于数据表的写操作,也变得很简单(只需写sql语句) 3.可以使用数据源,使用JNDI,数据库连接池等技术来优化性能--重用已经构建好的数据库连接对象,而不像php,asp那样,费时费力的不断重复的构建和析构这样的对象。

    2、DBUtils提供了三个核心的功能

    2.1QueryRunner中提供对sql语句操作的API

    QueryRunner(DataSource ds),提供数据源(连接池),DBUtils底层自动维护了连接Connection update(String sql, Object...params),执行更新数据 query(String sql,ResultSetHandler rsh,Object... params),执行查询

    2.2 ResultSetHandler接口,用于定义select操作后,怎样封装结果集

    ArrayHandler:将结果集中的第一条记录封装到Object[]数组中,数组中的每一个元素即使这条记录中的每一个字段的值 ArrayListHandler:将结果集中的每一条记录封装到Object[]数组中,将这些数组再封装到List集合中 BeanHandler:将结果集中的第一条记录封装到一个指定的javabean中 BeanListHandler:将结果集中每一条记录封装到javabean中,将这些javabean再封装到List集合中 ColumnListHandler:将结果集中指定列的字段值封装到一个List集合中 KeyedHandler:将结果集中的每一条记录封装到Map<String,Object>,再讲这个map集合作为另一个Map的value,另一个Map集合的key是指定的字段的值 MapHandler:将结果集中的第一条记录封装到Map<String,Object>集合中,key就是字段名称,value就是字段的值 MapListHandler:将结果集中的每一条记录封装到Map<String,Object>集合中,key就是字段名称,value就是字段的值,再将这些Map封装到List集合中 ScalarHandler:它是用于单数据,列如:select count(1) from 表操作

    2.3 DbUtils类,就是一个工具类,定义了关闭资源和事务处理的方法

    closeQuietly(Connetion conn)关闭连接,有异常就会抛出 commitAndCloseQuietly(Connetion conn):提交并关闭连接 rollbackAndCloseQuietly(Connetion conn):回滚并关闭连接

    3、DBUtils操作代码demo

    3.1maven依赖

    <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.44</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils --> <dependency> <groupId>commons-dbutils</groupId> <artifactId>commons-dbutils</artifactId> <version>1.7</version> </dependency>

    3.2QueryDbUtils代码

    package com.rookie.bigdata.dbutils; import com.rookie.bigdata.domain.User; import com.rookie.bigdata.util.C3P0Utils; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import java.sql.SQLException; import java.util.List; /** * Created by dell on 2019/5/24. */ public class QueryDbUtils { public static void main(String[] args) { //insertMethod(); //updateMethod(); //deleteMethod(); //selectAllUserMethod(); //selectUserMethod(); try { QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource()); String sql = "select count(*) from user "; Long count=(Long)qr.query(sql, new ScalarHandler()); System.out.println(count); } catch (Exception e) { e.printStackTrace(); } } //查询单个用户方法 private static void selectUserMethod() { try { QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource()); String sql = "select * from user where username=?"; Object[] params = {"李四"}; User user = qr.query(sql, new BeanHandler<User>(User.class), params); System.out.println(user); } catch (Exception e) { e.printStackTrace(); } } //查询所有的用户信息 private static void selectAllUserMethod() { try { QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource()); String sql = "select * from user"; List<User> userList = qr.query(sql, new BeanListHandler<User>(User.class)); for (User user : userList) { System.out.println(user); } } catch (Exception e) { e.printStackTrace(); } } //删除操作 private static void deleteMethod() { try { QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource()); String sql = "delete from user where username=?"; Object[] params = {"李四"}; int update = qr.update(sql, params); System.out.println("删除了" + update + "记录"); } catch (Exception e) { e.printStackTrace(); } } //更新记录操作 private static void updateMethod() { try { QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource()); String sql = "update user set password=? where username=?"; Object[] params = {"654321", "李四"}; int update = qr.update(sql, params); System.out.println("更新了" + update + "记录"); } catch (Exception e) { e.printStackTrace(); } } /** * 查询操作 */ private static void insertMethod() { try { // 1.创建核心类QueryRunner QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource()); // 2.编写SQL语句 String sql = "insert into user values(?,?)"; // 3.为站位符设置值 Object[] params = {"李四", "123456"}; // 4.执行添加操作 int rows = qr.update(sql, params); System.out.println("添加成功!" + rows); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

    C3P0Utils.java

    package com.rookie.bigdata.util; import com.mchange.v2.c3p0.ComboPooledDataSource; import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * Created by dell on 2019/5/23. */ public class C3P0Utils { private static ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql"); public static DataSource getDataSource() { return dataSource; } public static Connection getConnection() { try { return dataSource.getConnection(); } catch (SQLException e) { throw new RuntimeException(e); } } //释放连接回连接池 public static void close(Connection conn, PreparedStatement pst, ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pst != null) { try { pst.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }

    User.java

    package com.rookie.bigdata.domain; /** * Created by dell on 2019/5/25. */ public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User{" + "username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }

    如果有想学习java的程序员,可来我们的java学习扣qun:83078,3865,免费送java的视频教程噢!我每晚上8点还会在群内直播讲解Java知识,欢迎大家前来学习哦 

    最新回复(0)