前言
我经常喜欢把自己想要实现的功能在网络上搜索一下,看看有没有志同道合的朋友已经写好了,我就可以懒懒的拿过来直接用了!上个周末无意间去研究了下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
修改数据和插入是一样的,只需要把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 = 六安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