继hibernate后又一ORM框架commons-dbutils的JDBC第一次使用日记

前言

我经常喜欢把自己想要实现的功能在网络上搜索一下,看看有没有志同道合的朋友已经写好了,我就可以懒懒的拿过来直接用了!上个周末无意间去研究了下apache的开源项目,发现了commons-dbutils这个包,英文的介绍看着很累,立即百度了一下commons-dbutils这个关键词,结果是少量的信息,同样的内容!不过看完介绍我也是觉得如获至宝,赶紧下载下来试试,在调试过程中出现了不少错误,现将过程分享给大家,希望大家不要从蹈我的覆辙。

1.commons-dbutils最新版目前是commons-dbutils-1.5.jar

下载地址:http://commons.apache.org/proper/commons-dbutils

英文不好的我替你们愁,因为全是英文的页面。

2.commons-dbutils-1.5.jar需要依赖包

commons-dbcp-1.4.jar、commons-pool-1.4.jar

3.JDK环境1.6

4.Mysql数据库驱动一定要下载mysql-connector-java-5.0.6-bin.jar或以上版本,开始我用的mysqldriver.jar老是出现异常(功能未实现)

5.有了以上基础,就可以写个测试类来测试一下了

新建项目:dbutils-test

新建包:com.qisentech.demo.dbutils

新建类:DBTest.java

创建数据库的语句:

create database `test`;
create table `city` (
  `id` int(11) not null auto_increment,
  `name` varchar(50) character set utf8 default NULL,
  primary key (`id`)
);
insert into `city` values (1,'六安');
insert into `city` values (2,'南京');
insert into `city` values (3,'苏州');
insert into `city` values (4,'上海');
insert into `city` values (5,'合肥');
insert into `city` values (6,'成都');

使用commons-dbutils最主要是要有数据源,所以首先我在类中封装了一个初始化数据燕的方法

    /**
     * 初始化数据源
     *
     * @return 数据源
     */
    private static DataSource initDataSource() {
        BasicDataSource ds = new BasicDataSource();
        ds.setDriverClassName("org.gjt.mm.mysql.Driver");
        ds.setUsername("root");
        ds.setPassword("123456");
        ds.setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8");
        return ds;
    }
大家看到了我用的驱动是[org.gjt.mm.mysql.Driver]

接下来,我们来写几个方法来看看如何使用DBUtils

增加数据:

    public Object inert(String sql, Object param[]) throws SQLException {
        DataSource dataSource = initDataSource();
        QueryRunner queryRunner = new QueryRunner(dataSource);
        return queryRunner.update(sql, param);
    }
    
    public static void main(String[] args) throws SQLException {
        DBTest test = new DBTest();
        Object result = test.inert("insert into City(Name)values(?)", new Object[]{"北京"});
        System.out.println("result : " + result.toString());
    }
执行结果:result : 1
代表1行受影响,即数据插入成功。

修改数据和插入是一样的,只需要把SQL语句改成update语句即可。

下面我们来看看如何查询并返回一个对象,前提是我们需要先建一个对象:

public class City {

    private int id;
    private String name;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
我们建了一个实体对象City

下面是查询对象方法:

    public City query(String sql, Object[] param, Class clazz) throws SQLException {
        DataSource dataSource = initDataSource();
        QueryRunner queryRunner = new QueryRunner(dataSource);
        City obj = (City) queryRunner.query(sql, new BeanHandler(clazz), param);
        return obj;
    }

    public static void main(String[] args) throws SQLException {
        DBTest test = new DBTest();
        City city = test.query("select * from City where id = ?", new Object[]{1}, City.class);
        System.out.println("result :city.name  = " + city.getName());
    }

执行结果:result :city.name  = 六安

是不是很简单!

那我们查询对象集合怎么办呢,不急,来看下面这段代码:

    public List<City> queryList(String sql, Object[] param, Class clazz) 
                                                    throws SQLException {
        DataSource dataSource = initDataSource();
        QueryRunner queryRunner = new QueryRunner(dataSource);
        List<City> list = (List<City>) queryRunner
                     .query(sql, new BeanListHandler(clazz), param);
        return list;
    }

    public static void main(String[] args) throws SQLException {
        DBTest test = new DBTest();
        List<City> list = test.queryList("select * from City where id < 3"
                                                         , null, City.class);
        for (int i = 0; i < list.size(); i++) {
            City city = list.get(i);
            System.out.println("result[" + i + "] :city.name  = " + city.getName());
        }
    }

执行结果:

result[0] :city.name  = 六安
result[1] :city.name  = 南京
result[2] :city.name  = 苏州
result[3] :city.name  = 上海
result[4] :city.name  = 合肥
result[5] :city.name  = 成都
result[6] :city.name  = 北京
好了,示例演示到这了,下面来讲一下主要原理和规则:

1.实体类City和数据库表City是通过City.class来映射绑定的,实体类名可以和数据表名称不一致。

2.实体类City中的属性要和City表的字段名和字段类型要一致。

3.实体City中的属性要生成标准的getter和setter方法。

具备了以上3个条件,执行query后,commons-dbutils会自动封装为List。

笔者也进行了对比实验,使用commons-dbutils封装对象,比自行getter和setter的效率高出20倍.传统方法查询后(185条记录)自行封装,需要370毫秒,而使用commons-dbutils,仅需要23毫秒.

希望此文能起到抛砖引玉的作用,转载请保留出处!

http://blog.csdn.net/yakson/article/details/9282751

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值