DbUtils組件(核心類QueryRunner)學(xué)習(xí)總結(jié)

一.什么是DbUtils組件

Commons DbUtils是Apache組織提供的一個(gè)對(duì)JDBC進(jìn)行簡(jiǎn)單封裝的開(kāi)源工具類庫(kù)柑贞,使用它能夠簡(jiǎn)化JDBC應(yīng)用程序的開(kāi)發(fā),同時(shí)也不會(huì)影響程序的性能琳彩。

下載組件,引入jar文件:commons-dbutils-1.6.jar 密碼:tygh
maven環(huán)境配置:

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

二.核心類QueryRunner

帶有Connection的

Int update(Connection conn, String sql, Object param);執(zhí)行更新帶一個(gè)占位符的sql
Int update(Connection conn, String sql, Object… param);執(zhí)行更新帶多個(gè)占位符的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); 執(zhí)行更新帶一個(gè)占位符的sql
Int update( String sql, Object… param);執(zhí)行更新帶多個(gè)占位符的sql
Int[] batch( String sql, Object[][] params); 批處理

注意: 如果調(diào)用DbUtils組件的操作數(shù)據(jù)庫(kù)方法,沒(méi)有傳入連接對(duì)象甜无,那么在實(shí)例化QueryRunner對(duì)象的時(shí)候需要傳入數(shù)據(jù)源對(duì)象: 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();
        // 創(chuàng)建DbUtils核心工具類對(duì)象
        QueryRunner qr = new QueryRunner();
        qr.update(conn, sql, 3);
        DbUtils.close(conn);
    }

結(jié)果測(cè)試


例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"}  });
        // 關(guān)閉
        conn.close();
    }
image.png

2.查詢操作

DbUtils提供的封裝結(jié)果的一些對(duì)象:

1)BeanHandler: 查詢返回單個(gè)對(duì)象
2) BeanListHandler: 查詢返回list集合岂丘,集合元素是指定的對(duì)象

  1. ArrayHandler, 查詢返回結(jié)果記錄的第一行,封裝對(duì)對(duì)象數(shù)組, 即返回:Object[]
    1. ArrayListHandler, 把查詢的每一行都封裝為對(duì)象數(shù)組眠饮,再添加到list集合中
    2. ScalarHandler 查詢返回結(jié)果記錄的第一行的第一列 (在聚合函數(shù)統(tǒng)計(jì)的時(shí)候用)
    3. MapHandler 查詢返回結(jié)果的第一條記錄封裝為map
  2. MapListHandler 查詢返回結(jié)果封裝為L(zhǎng)ist<map>
  • a.自定義結(jié)果集封裝數(shù)據(jù)

@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>() {
            //自定義 如何封裝一個(gè)CarBean對(duì)象
            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結(jié)果集對(duì)象封裝數(shù)據(jù)

@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結(jié)果集對(duì)象封裝數(shù)據(jù)

@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 結(jié)果集對(duì)象封裝數(shù)據(jù)

@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 結(jié)果集對(duì)象封裝數(shù)據(jù)(在聚合函數(shù)統(tǒng)計(jì)時(shí)候用)

@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--學(xué)習(xí)筆記

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末奥帘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子仪召,更是在濱河造成了極大的恐慌寨蹋,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扔茅,死亡現(xiàn)場(chǎng)離奇詭異已旧,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)召娜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門运褪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事秸讹√戳” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵璃诀,是天一觀的道長(zhǎng)弧可。 經(jīng)常有香客問(wèn)我,道長(zhǎng)劣欢,這世上最難降的妖魔是什么棕诵? 我笑而不...
    開(kāi)封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮凿将,結(jié)果婚禮上校套,老公的妹妹穿的比我還像新娘。我一直安慰自己丸相,他們只是感情好搔确,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著灭忠,像睡著了一般膳算。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弛作,一...
    開(kāi)封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天涕蜂,我揣著相機(jī)與錄音,去河邊找鬼映琳。 笑死机隙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的萨西。 我是一名探鬼主播有鹿,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼谎脯!你這毒婦竟也來(lái)了葱跋?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤源梭,失蹤者是張志新(化名)和其女友劉穎娱俺,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體废麻,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荠卷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了烛愧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片油宜。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掂碱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出验庙,到底是詐尸還是另有隱情顶吮,我是刑警寧澤社牲,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布粪薛,位于F島的核電站,受9級(jí)特大地震影響搏恤,放射性物質(zhì)發(fā)生泄漏违寿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一熟空、第九天 我趴在偏房一處隱蔽的房頂上張望藤巢。 院中可真熱鬧,春花似錦息罗、人聲如沸掂咒。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)绍刮。三九已至,卻和暖如春挨摸,著一層夾襖步出監(jiān)牢的瞬間孩革,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工得运, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膝蜈,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓熔掺,卻偏偏與公主長(zhǎng)得像饱搏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子置逻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法推沸,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法诽偷,繼承相關(guān)的語(yǔ)法坤学,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 31,625評(píng)論 18 399
  • 本文包括:1报慕、DBUtils簡(jiǎn)介2深浮、DbUtils類3、QueryRunner類4眠冈、ResultSetHandle...
    廖少少閱讀 20,650評(píng)論 1 24
  • JDBC概述 在Java中飞苇,數(shù)據(jù)庫(kù)存取技術(shù)可分為如下幾類:JDBC直接訪問(wèn)數(shù)據(jù)庫(kù)菌瘫、JDO技術(shù)、第三方O/R工具布卡,如...
    usopp閱讀 3,535評(píng)論 3 75
  • JDBC框架——DBUtils 本文包括: 1雨让、DBUtils簡(jiǎn)介 2、DbUtils類 3忿等、QueryRunne...
    加油小杜閱讀 885評(píng)論 0 1
  • 經(jīng)過(guò)一個(gè)多小時(shí)栖忠,坤仔終于到了他與凌潔兩人的小屋,品嘗了凌潔為他做的兩道小菜贸街,小菜中滿是幸福的味道庵寞。 吃完飯、刷完碗...
    斷指鶴閱讀 447評(píng)論 1 0