apache dbutils使用总结

上传人:第*** 文档编号:32682335 上传时间:2018-02-12 格式:DOC 页数:6 大小:60.50KB
返回 下载 相关 举报
apache dbutils使用总结_第1页
第1页 / 共6页
apache dbutils使用总结_第2页
第2页 / 共6页
apache dbutils使用总结_第3页
第3页 / 共6页
apache dbutils使用总结_第4页
第4页 / 共6页
apache dbutils使用总结_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《apache dbutils使用总结》由会员分享,可在线阅读,更多相关《apache dbutils使用总结(6页珍藏版)》请在金锄头文库上搜索。

1、Apache DBUtils 使用总结DBUtils 是个小巧的 JDBC 轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果集封装成 JavaBean,这就为我们做了最枯燥乏味、最容易出错的一大部分工作。在使用 DBUtils 之前,应该注意一些问题:1、DBUtils 是 JDBC 的简单封装,可以和 JDBC 混合使用。2、DBUtils 对结果集自动封装为 JavaBean 是有着苛刻要求的:必须满足 JavaBean 的规范,其次 Bean 的 getter 与 setter 方法的名字与结果集的列名一一对应,而不要求 JavaBean 的私有成员与表结果集列

2、名一一对应。比如:person 表中有个字段叫:address,那么对应的 JavaBean 的 Person 类中必须有 getAddress和 setAddress 两个方法,而 Person 类中可以将 address 属性命名为 add,这是没问题的。3、DBUtils 可以将结果集封装为各种类型,主要有:Bean/List,Map/List/Map ,数组/List,列/List,这些类型。对于 Map的类型使用 KeyedHandler 作为结果集处理器,内层的 Map 是“列名-值对,外层的 Map 是“主键-内层 Map 的引用”,但此处的主键不一定就是数据库的主键,可以随意指

3、定,比如:ResultSetHandler h = new KeyedHandler(id);Map found = (Map) queryRunner.query(select id, name, age from person, h);Map jane = (Map) found.get(new Long(1); / janes id is 1 String janesName = (String) jane.get(name);Integer janesAge = (Integer) jane.get(age);4、DBUtils 执行插入操作的时候,无法返回自增主键,这是一个很严重的问

4、题,当然不能怪 DBUtils,可以通过变通的方法来实现,比如在 MySQL 中,执行完了一个插入 SQL 后,接着执行 SELECT LAST_INSERT_ID()语句,就可以获取到自增主键。5、DBUtils 的性能和 JDBC 性能是一样,测试过程中没发现性能损失,拥有了很高性能的同时,而不失 JDBC 的灵活性。6、对于 JavaBean 的成员类型定义,有一条原则那就是:尽可能使用包装类型,而不要使用基本类型。很多人不理解为什么,包括我见到一些傻 B(,我提出让改为包装类型,他还信誓旦旦的说他的代码多牛多叼) ,都干好多年了,这个简单的道理还不知道:/错误int a1 = (Int

5、eger) null;boolean x1 = (Boolean)null;/正确Integer a2 = (Integer) null;Boolean x2 = (Boolean)null;实际上就是为了保证在查询结果为 null 的时候,也不会因为给基本类型赋 null 值而发生错误。下面给出一个简单例子,作为以后写代码时候有点参考:环境:MySQL5.4JDK1.5建表 SQL:CREATETABLEperson (id bigint(20) NOT NULL AUTO_INCREMENT,namevarchar(24) DEFAULT NULL,age int(11) DEFAULT

6、NULL,address varchar(120) DEFAULT NULL,PRIMARYKEY(id) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=gbkJava 代码:publicclassPerson privateLong id;privateString sdf;privateString address2;privateInteger age;publicPerson() publicPerson(String sdf) this.sdf = sdf;publicPerson(String sdf, Integer age, St

7、ring address) this.sdf = sdf;this.age = age;this.address2 = address;publicLong getId() returnid;publicvoidsetId(Long id) this.id = id;publicString getSdf() returnsdf;publicvoidsetSdf(String sdf) this.sdf = sdf;publicInteger getAge() returnage;publicvoidsetAge(Integer age) this.age = age;publicString

8、 getAddress() returnaddress2;publicvoidsetAddress(String address2) this.address2 = address2;测试packagecom.lavasoft.dbstu;mon.DBToolkit;mons.dbutils.QueryRunner;mons.dbutils.handlers.BeanHandler;mons.dbutils.handlers.BeanListHandler;mons.dbutils.handlers.MapHandler;mons.dbutils.handlers.ScalarHandler;

9、importjava.sql.Connection;importjava.sql.SQLException;importjava.util.List;importjava.util.Map;/* * Created by IntelliJ IDEA. * * author leizhimin 2010-1-25 21:00:29 */publicclassPersonDAOImpl implements PersonDAO privatestaticPersonDAOImpl instance = new PersonDAOImpl();publicstaticPersonDAOImpl ge

10、tInstance() returninstance;publicstaticvoidmain(String args) /错误 inta1 = (Integer) null;booleanx1 = (Boolean) null;/正确 Integer a2 = (Integer) null;Boolean x2 = (Boolean) null;getInstance().save(null);/ getInstance().save(null); / getInstance().save(null); / getInstance().save(null); / getInstance().

11、save(null); getInstance().update(null);getInstance().load(null);getInstance().load4Map(null);OverridepublicLong save(String sql) Long id = null;String ins_sql = INSERT INTO person (NAME, age, address) VALUES (aaa, 21, address001);Connection conn = DBToolkit.getConnection();QueryRunner qr = new Query

12、Runner();tryqr.update(conn, ins_sql);/获取新增记录的自增主键 id = (Long) qr.query(conn, SELECT LAST_INSERT_ID(), new ScalarHandler(1); catch (SQLException e) e.printStackTrace(); finally DBToolkit.closeConnection(conn);returnid;Overridepublicintdelete(Long id) intx = 0;Connection conn = DBToolkit.getConnection

13、();QueryRunner qr = new QueryRunner();tryx = qr.update(conn, DELETE FROM person WHERE id = ?, id); catch (SQLException e) e.printStackTrace(); finally DBToolkit.closeConnection(conn);returnx;Overridepublicintupdate(Person person) intx = 0;Connection conn = DBToolkit.getConnection();QueryRunner qr =

14、new QueryRunner();tryx = qr.update(conn, UPDATE person SET NAME = ?, age = ?, address = ? WHERE id = ?, xxx, 23, ttt, 5); catch (SQLException e) e.printStackTrace(); finally DBToolkit.closeConnection(conn);returnx;OverridepublicPerson load(Long id) Connection conn = DBToolkit.getConnection();QueryRu

15、nner qr = new QueryRunner();tryPerson person = (Person) qr.query(conn, SELECT * FROM person where id = ?, new BeanHandler(Person.class), 3L);System.out.println(person.getId() + t + person.getSdf() + t + person.getAge() + t + person.getAddress(); catch (SQLException e) e.printStackTrace();returnnull;OverridepublicList findPerson(String sql) Connection conn = DBToolkit.getConnection();QueryRunner qr = new QueryRunner();tryList pset = (List) qr.query(conn, SELECT * FROM person, new BeanListHandler(Person.class);for(Person pers

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号