dbutils框架的使用

前言

先說一下原生JDBC的弊端:
1、數據庫連接對象、sql語句操作對象、封裝結果集對象,重複定義
2、封裝數據的代碼重複,而且操作複雜,代碼量大
3、釋放資源的代碼重複。
總結:開發的時候有大量重複勞動,開發週期長,效率低

在涉及mybatis框架之前,先學習一下輕量方便的dbutils框架也是很有必要的,比如小型的管理系統之類的,不需要java代碼和sql語句分離,sql語句也不復雜的情況下dbutils就派上用場了。

dbutils是什麼

Commons DbUtils是Apache組織提供的一個對JDBC進行簡單封裝的開源工具類庫,使用它能夠簡化JDBC應用程序的開發,同時也不會影響程序的性能。 (採自百度百科)

說白了dbutils就是一個封裝了原生jdbc很多操作(增刪改查)的工具類。

比如原生jdbc查詢數據需要將結果集ResultSet遍歷、取數據、封裝成bean等等繁瑣的工作, 而dbutils直接一個query()方法就可以將數據集封裝到指定對象的List<>中。

實例

CRUD都主要通過一個類QueryRunner,主要用到的方法就是query()以及update()。

下面直接上代碼,代碼裏面的註釋已經很清晰明白了。

數據源來自c3p0:

    <named-config name="user">
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/mydata</property>
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="acquireIncrement">5</property><!-- 如果池中數據連接不夠時一次增長多少個 -->
        <property name="initialPoolSize">100</property>
        <property name="maxPoolSize">1000</property>
    </named-config>

獲得數據源的方法就一行代碼:

private static DataSource dataSource=new ComboPooledDataSource("user");//數據源:C3P0連接池

查詢稍微複雜點,分爲三種:查詢一條數據、查詢數據集、查詢指定字段某一個數據。

查詢一條數據:

    @Test
    public void queryBean() throws SQLException{
        QueryRunner queryRunner=new QueryRunner(dataSource);
        User user=queryRunner.query("select * from user where id=5",new BeanHandler<User>(User.class));
        System.out.println(user);
    }

注:BeanHandler實現類返回一個bean對象。

運行截圖:

查詢數據集:

    @Test
    public void dbUtilsQuery() throws SQLException {
        QueryRunner queryRunner=new QueryRunner(dataSource);//這裏可以不寫數據源,這樣在下面query()|update()方法中加上
        //Connection參數
        String sql="select * from user";
        List<User> users=queryRunner.query(sql,new BeanListHandler<User>(User.class));//將查詢出來的數據轉換爲User實體列表
        for(User u:users){
            System.out.println(u);
        }
    }

注:BeanListHandler實現類返回Bean對象的List。

運行截圖:

查詢某一個數據:

    //使用new ScalarHandler()實現類查詢單個數據,比如這裏查詢有多少條數據count(*)
    public Long querySize() throws SQLException{
        QueryRunner queryRunner=new QueryRunner(dataSource);
        Long size=queryRunner.query("select count(*) from user",new ScalarHandler<Long>());
        //System.out.println(size);
        return size;
    }

注:ScalarHandler 實現類返回某個數據。

由於此方法後面要調用,所以把@Test註解去掉了,運行結果截圖就省略了。

修改:

    @Test
    public void modify() throws SQLException{
        QueryRunner queryRunner=new QueryRunner(dataSource);
        int i=queryRunner.update("update user set age=35 where name=?","chen");//和preparedStatement同樣的操作
        //update(sql,參數1,參數2...)
        if(i>=1) {
            queryBean();
        }
    }

運行截圖:

插入:

    @Test
    public void insert() throws SQLException{//批量插入數據
        QueryRunner queryRunner=new QueryRunner(dataSource);
        Object [][]params=new String[5][3];//這裏的5表示插入5條數據,3表示3個字段(id,name,age)
        int size=querySize().intValue();
        System.out.println(size);
        for(int i=1;i<=5;i++){//之所以要[i-1]是因爲i=1開始的,i=5過後要下標越界
            params[i-1][0]=size+i+" ";
            params[i-1][1]="dbutil"+(size+i);
            params[i-1][2]= (int)(Math.floor(Math.random()*10+20))+" ";//隨機生成年紀20-30歲
        }
        int result[]=queryRunner.batch("insert into user(id,name,age) values(?,?,?)",params);
        if(result!=null){
            System.out.println("插入成功~");
        }
    }

運行截圖:

刪除的操作同修改,只是改一下sql語句就行了。

所以說dbutils用起來還是很方便的。

原創:https://blog.csdn.net/qq_37094660/article/details/95206941

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章