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

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