DbUtils组件(核心类QueryRunner)学习总结

一.什么是DbUtils组件

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

下载组件,引入jar文件:commons-dbutils-1.6.jar 密码:tygh
maven环境配置:

 <dependency>
      <groupId>commons-dbutils</groupId>
      <artifactId>commons-dbutils</artifactId>
      <version>1.6</version>
    </dependency>

二.核心类QueryRunner

带有Connection的

Int update(Connection conn, String sql, Object param);执行更新带一个占位符的sql
Int update(Connection conn, String sql, Object… param);执行更新带多个占位符的sql
Int[] batch(Connection conn, String sql, Object[][] params) 批处理
T query(Connection conn ,String sql, ResultSetHandler<T> rsh, Object... params) 查询方法

不带有Connection的

Int update( String sql, Object param); 执行更新带一个占位符的sql
Int update( String sql, Object… param);执行更新带多个占位符的sql
Int[] batch( String sql, Object[][] params); 批处理

注意: 如果调用DbUtils组件的操作数据库方法,没有传入连接对象,那么在实例化QueryRunner对象的时候需要传入数据源对象: QueryRunner qr = new QueryRunner(DataSource ds);

1.更新操作(包括delete 、insert、 update)

例1:
 @Test
    public void delete() throws Exception {
        String sql = " delete from car where id =? ";
        conn = ConnUtil.getConnextion();
        // 创建DbUtils核心工具类对象
        QueryRunner qr = new QueryRunner();
        qr.update(conn, sql, 3);
        DbUtils.close(conn);
    }

结果测试


例2:
 public void save(CarBean carBean)throws Exception {
        String sql = "INSERT INTO car (carname,carEntity) VALUES(?,?); " ;
        conn = ConnUtil.getConnextion();
        QueryRunner qr = new QueryRunner();
        // 批量插入
        qr.batch(conn, sql, new Object[][]{ {"宝马","2017"},{"奔驰","2017"}  });
        // 关闭
        conn.close();
    }
image.png

2.查询操作

DbUtils提供的封装结果的一些对象:

1)BeanHandler: 查询返回单个对象
2) BeanListHandler: 查询返回list集合,集合元素是指定的对象

  1. ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
    1. ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
    2. ScalarHandler 查询返回结果记录的第一行的第一列 (在聚合函数统计的时候用)
    3. MapHandler 查询返回结果的第一条记录封装为map
  2. MapListHandler 查询返回结果封装为List<map>
  • a.自定义结果集封装数据

@Test
    public void carFind() throws Exception {
        String sql = " select * from car where id = ? ";
        conn = ConnUtil.getConnextion();
        QueryRunner qr = new QueryRunner();
        //查询
        CarBean carBean= qr.query(conn, sql, new ResultSetHandler<CarBean>() {
            //自定义 如何封装一个CarBean对象
            public CarBean handle(ResultSet resultSet) throws SQLException {
                if(resultSet.next()) {
                    CarBean carBean = new CarBean();
                    carBean.setId(resultSet.getInt("id"));
                    carBean.setCarname(resultSet.getString("carname"));
                    carBean.setCarname(resultSet.getString("carEntity"));
                    return carBean;
                }
                return null;
            }
        },1);
        System.out.println(carBean.getId()+""+carBean.getCarname()+""+carBean.getCarEntity());

    }
  • b.查询使用组件提供的BeanHandler结果集对象封装数据

@Test
    public void carFind() throws Exception {
        String sql = " select * from car where id = ? ";
        conn = ConnUtil.getConnextion();
        QueryRunner qr = new QueryRunner();
        //查询
     CarBean carBean = qr.query(conn,sql,new BeanHandler<CarBean>(CarBean.class),2);

      System.out.println(carBean.getId()+" "+carBean.getCarname()+" "+carBean.getCarEntity());
      conn.close();

    }
  • c.查询使用组件提供的BeanListHandler结果集对象封装数据

@Test
    public void carFind() throws Exception {
        String sql = " select * from car where id = ? ";
        conn = ConnUtil.getConnextion();
        QueryRunner qr = new QueryRunner();
        //查询
     List <CarBean> carBean = qr.query(conn,sql,new BeanListHandler<CarBean>(CarBean.class),4);

      System.out.println(carBean.get(0).getId()+" "+carBean.get(0).getCarname()+" "+carBean.get(0).getCarEntity());
      conn.close();

    }
  • d.查询使用组件提供的MapHandler 结果集对象封装数据

@Test
    public void carFind() throws Exception {
        String sql = " select * from car";
        conn = ConnUtil.getConnextion();
        QueryRunner qr = new QueryRunner();
        //查询
     Map<String,Object> carBean = qr.query(conn,sql,new MapHandler());

      System.out.println(carBean);
      conn.close();

    }

image.png
  • e.查询使用组件提供的ScalarHandler 结果集对象封装数据(在聚合函数统计时候用)

@Test
    public void carFind() throws Exception {
        String sql = " select count(*) from car";
        conn = ConnUtil.getConnextion();
        QueryRunner qr = new QueryRunner();
        //查询
     Long carBean = qr.query(conn,sql,new ScalarHandler<Long>());

      System.out.println(carBean);
      conn.close();

    }

文章文集:JavaEE--学习笔记

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,293评论 18 399
  • 本文包括:1、DBUtils简介2、DbUtils类3、QueryRunner类4、ResultSetHandle...
    廖少少阅读 20,252评论 1 24
  • JDBC概述 在Java中,数据库存取技术可分为如下几类:JDBC直接访问数据库、JDO技术、第三方O/R工具,如...
    usopp阅读 3,495评论 3 75
  • JDBC框架——DBUtils 本文包括: 1、DBUtils简介 2、DbUtils类 3、QueryRunne...
    加油小杜阅读 814评论 0 1
  • 经过一个多小时,坤仔终于到了他与凌洁两人的小屋,品尝了凌洁为他做的两道小菜,小菜中满是幸福的味道。 吃完饭、刷完碗...
    断指鹤阅读 429评论 1 0