Java高级Day51-apacheDBUtils
136.ApDBUtils
基本介绍
-
commons-dbutils 是 Apache 组织提供的一个开源JDBC工具类库,它是对JJDBC的封装,使用dbutils能极大简化jdbc编码的工作量
-
QueryRunner类:该类封装了SQL的执行,是线程安全的。可以实现增删改查和批处理
-
使用QueryRunner类实现查询
-
ResultSetHandler接口:该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式
ArrayHandler:把结果集种的第一行数据转成对象数组 ArrayListHandler:把结果集种的每一行数据都转成一个数组,再存放到List中 BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中 BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里 ColumnListHandler:将结果集中某一列的数据存放到List中 KeyedHandler(name):将结果集中的每行数据都封装到Map里,再把这些map再存放到一个map里,其key为指定的ky MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值 MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
ApDBUtils查询
public class DBUtils_USE { //使用apache-DBUtils 工具类 + druid 完成对表的crud操作 public void testQueryMany() throws SQLException {//返回结果是多行数据的情况 //1.得到 连接 (druid) Connection connection = JDBCUtilsByDruid.getConnection(); //2.使用 DBUtils 类和接口,先引入DBUtils相关的jar,加入到本Project //3.创建 QueryRunner QueryRunner queryRunner = new QueryRunner(); //4.就可以执行相关的方法,返回ArrayList 结果集 String sql = "select * from actor where id >= ?"; //(1)query 方法就是执行sql语句,得到resultset --封装到--> ArrayList 集合中 //(2)返回集合 //(3)connection:连接 //(4)sql:执行的sql语句 //(5)new BeanListHandler<>(Actor.class):在将resultset -> Actor 对象 -> 封装到ArrayList // 底层使用反射机制 去获取Actor类的属性,然后进行封装 //(6) 1 就是给 sql 语句的 ? 赋值的,可以有多个值,因为是可变参数Object...params //(7)底层得到的resultest,会在 query关闭,关闭 PreparedStatement List<Actor> list = queryRunner.query(connection,sql, new BeanListHandler<>(Actor.class),1); System.out.println("输出这个集合的细腻些"); for (Actor actor : List) { System.out.println(actor); } //释放资源 JDBCUtilsByDruid.close(null, null, connection); } public void testQuerySingle() throws SQLException { //演示 apache-dbutils + druid 完成 返回的结果是单行记录(单个对象) //1.得到 连接 (druid) Connection connection = JDBCUtilsByDruid.getConnection(); //2.使用 DBUtils 类和接口,先引入DBUtils相关的jar,加入到本Project //3.创建 QueryRunner QueryRunner queryRunner = new QueryRunner(); //4.就可以执行相关的方法,返回单个 结果集 String sql = "select * from actor where id = ?"; //因为我们返回的单行记录<--->单个对象,使用的Handler 是 BeanHandler Actor actor = queryRunner.query(connection, sql. new BeanHandler<>(Actor.class),4); System.out.println(actor); //释放资源 JDBCUtilsByDruid.close(null, null, connection); } //演示apache-dbutils + druid 完成查询结果是单行单列-返回的就是一个Object public void testScalar() throws SQLException { //1.得到 连接 (druid) Connection connection = JDBCUtilsByDruid.getConnection(); //2.使用 DBUtils 类和接口,先引入DBUtils相关的jar,加入到本Project //3.创建 QueryRunner QueryRunner queryRunner = new QueryRunner(); //4.就可以执行相关的方法,返回单行单列,返回的就是Object String sql = "select name from actor where id = ?"; //因为返回的是一个对象,所以收纳柜的 handler 是 ScalarHandler Object obj = queryRunner.query(connection, sql, new ScalarHandler(), 4); System.out.println(obj); //释放资源 JDBCUtilsByDruid.close(null, null, connection); } }
137.ApDBUtilsDML
//演示apache-dbutils + druid 完成 dml public void testDML() throws SQLException { //1.得到 连接 (druid) Connection connection = JDBCUtilsByDruid.getConnection(); //2.使用 DBUtils 类和接口,先引入DBUtils相关的jar,加入到本Project //3.创建 QueryRunner QueryRunner queryRunner = new QueryRunner(); //4.组织sql 完成 update, insert , delete //String sql = "update actor set name = ? where id = ?"; //String sql = "insert into actor values (null,'赛小息','男','2004-1-1','116')"; //String sql = "delete from actor where id = 5"; //(1) 执行dml 操作是 queryRunner.update() //(2) 返回值是受影响的行数 int affectedRow = queryRunner.update(connection, sql, "张三丰", 4); System.out.println(affectedRow > 0 ? "执行成功" : "执行没有影响到表"); //释放资源 JDBCUtilsByDruid.close(null, null, connection);