Java高级Day51-apacheDBUtils

136.ApDBUtils

基本介绍

  1. commons-dbutils 是 Apache 组织提供的一个开源JDBC工具类库,它是对JJDBC的封装,使用dbutils能极大简化jdbc编码的工作量

  2. QueryRunner类:该类封装了SQL的执行,是线程安全的。可以实现增删改查和批处理

  3. 使用QueryRunner类实现查询

  4. 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);
   
相关推荐
猿究院_夏燊8 小时前
Spring Bean 生命周期
java·后端·spring
Wang's Blog9 小时前
Java 项目实战: 交友项目:登录链路回顾与今日任务地图
java·开发语言·状态模式·交友
信誓旦旦的程序猿9 小时前
【Python量化实战宝典 #08】可转债与债券接口手册:转股价·溢价率·纯债价值(Python 可跑)
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
砚底藏山河9 小时前
python量化:行情数据回溯
java·开发语言·python·金融·maven
今年下半年9 小时前
AI智能体项目实战记录(02):初始化 Python 项目
开发语言·人工智能·python·fastapi
Jlzn88889 小时前
华东电芯分选通道数怎么配才不堵线
java·人工智能·架构·自动化·制造
Williamtym10 小时前
PickGo Lab实践:用浏览器、Python和MCP串起机器人搬运仿真
开发语言·python·机器人
香吧香10 小时前
GRPC连接机制---长连接分析
java·网络与传输协议
DongQiShanRen10 小时前
六根硬件映射(四):归属澄清、两处不一致与卷十一总表
开发语言·人工智能·算法·rust·哈希算法·集成学习
CS创新实验室10 小时前
Python 对象“死“了之后去了哪?——引用计数与分代垃圾回收
开发语言·jvm·python