`
liujiekasini0312
  • 浏览: 147162 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Apache DbUtils应用实例

 
阅读更多
前段时间使用了Apache Common DbUtils这个工具,在此留个印,以备不时查看。大家都知道现在市面上的数据库访问层的框架很多,当然很多都是包含了OR-Mapping工作步骤的 例如大家常用的Hibernate与Mybatis。当然如果人们要一个纯粹的封装了JDBC的工具类,使用Apache Common DbUtils(下面简称ACD)是个不错的选择,这个工具在JDBC的基础上稍加封装是JDBC的操作更加便捷,在学习使用这个框架的途中你也不需要学 习太多的API类,因为一共也才3个部分(3个包)。

  1. org.apache.commons.dbutils (该包中的类主要帮助我们更便捷的操作JDBC)

  2. org.apache.commons.dbutils.handlers(该包中的类都是实现org.apache.commons.dbutils.ResultSetHandler接口的实现类)

  3. org.apache.commons.dbutils.wrappers(该包中的类主要是封装了对Sql结果集的操作)

使用这个DbUtils的一些优势:

  1. 防止了资源的泄露,写一段JDBC的准备代码其实并不麻烦,但是那些操作确实是十分耗时和繁琐的,也会导致有时候数据库连接忘记关闭了导致异常难以追踪。

  2. 干净整洁的持久化代码,把数据持久化到数据库的代码被打打削减,剩下的代码能够清晰简洁的表达你的操作目的。

  3. 自动把ResultSets中的工具映射到JavaBean中,你不需要手动的使用Setter方法将列值一个个赋予相应的时日,Resultset中的每一个行都大表一个完成的Bean实体。    

要学习如何使用这个框架,最简单的方式就是用它写个Demo-CRUD操作,让我们先做个准备动作在MySQL中建立一个测试专用表Visitor。

  1. /*创建Visitor*/
  2. CREATETABLEVisitor
  3. (
  4. IdINT(11)NOTNULLAUTO_INCREMENT,
  5. NameVARCHAR(1000)NOTNULL,
  6. EmailVARCHAR(1000)NOTNULL,
  7. StatusINTNOTNULLDEFAULT1,
  8. CreateTimeDateTime,
  9. PRIMARYKEY(Id)
  10. )

建完表结构,我们就可以学习怎么利用框架中的Utils类帮助我们完成CRUD-DEMO,其实对于这个框架主要操作的是ResultSetHandler接口的实现类与QueryRunner类

创建对应的JavaBean实体类如下:

  1. packagedavid.apache.model;
  2. importjava.text.SimpleDateFormat;
  3. importjava.util.Date;
  4. publicclassVisitor{
  5. privateintid;
  6. privateStringname;
  7. privateStringemail;
  8. privateintstatus;
  9. privateDatecreateTime;
  10. publicVisitor(){
  11. //TODOAuto-generatedconstructorstub
  12. setCreateTime(newDate());
  13. }
  14. publicVisitor(Stringname,Stringemail){
  15. this.setName(name);
  16. this.setEmail(email);
  17. this.setStatus(1);
  18. this.setCreateTime(newDate());
  19. }
  20. publicintgetId(){
  21. returnid;
  22. }
  23. publicvoidsetId(intid){
  24. this.id=id;
  25. }
  26. publicStringgetName(){
  27. returnname;
  28. }
  29. publicvoidsetName(Stringname){
  30. this.name=name;
  31. }
  32. publicStringgetEmail(){
  33. returnemail;
  34. }
  35. publicvoidsetEmail(Stringemail){
  36. this.email=email;
  37. }
  38. publicintgetStatus(){
  39. returnstatus;
  40. }
  41. publicvoidsetStatus(intstatus){
  42. this.status=status;
  43. }
  44. publicDategetCreateTime(){
  45. returncreateTime;
  46. }
  47. publicvoidsetCreateTime(DatecreateTime){
  48. this.createTime=createTime;
  49. }
  50. @Override
  51. publicStringtoString(){
  52. //TODOAuto-generatedmethodstub
  53. returnString.format("{Id:%d,Name:%s,Email:%s,CreateTime:%s}",getId(),getName(),getEmail(),
  54. newSimpleDateFormat("yyyy-MM-ddHH:mm:ss").format(getCreateTime()));
  55. }
  56. }

首先我们先新建一个获取Connection的方法:

  1. privatestaticConnectiongetConnection(){
  2. Connectionconn=null;
  3. try{
  4. Class.forName(CONNECTION_DRIVER_STR);
  5. conn=DriverManager.getConnection(CONNECTION_STR,"root","123456");
  6. }catch(Exceptione){
  7. e.printStackTrace();
  8. }
  9. returnconn;
  10. }

新建方法(对于里面的自增字段,我们可以采用变通的方法来插入,使用select last_insert_id()方法)

  1. /*
  2. *新增Visitor,ScalarHandler的demo
  3. */
  4. publicstaticvoidinsertVisitor(Visitorvisitor){
  5. Connectionconn=getConnection();
  6. QueryRunnerqr=newQueryRunner();
  7. Stringsql="insertintovisitor(Name,Email,Status,CreateTime)values(?,?,?,?)";
  8. try{
  9. intcount=qr.update(conn,sql,visitor.getName(),visitor.getEmail(),1,newDate());
  10. BigIntegernewId=(BigInteger)qr.query(conn,"selectlast_insert_id()",newScalarHandler<BigInteger>(1));
  11. visitor.setId(Integer.valueOf(String.valueOf(newId)));
  12. System.out.println("新增"+count+"条数据=>Id:"+newId);
  13. }catch(SQLExceptione){
  14. e.printStackTrace();
  15. }
  16. }

大家可以看到操作的步骤其实很简单,也是写SQL可以了,对于自增字段我们通过select last_insert_id()的方法利用ScalarHandler<BigInteger>实体类来返回达到变通效果。

删除方法

  1. publicstaticvoiddeleteVisitor(intid){
  2. Connectionconn=getConnection();
  3. QueryRunnerqr=newQueryRunner();
  4. Stringsql="deletefromvisitorwherestatus>0andid=?";
  5. try{
  6. intcount=qr.update(conn,sql,id);
  7. System.out.println("删除"+count+"条数据。");
  8. }catch(SQLExceptione){
  9. //TODO:handleexception
  10. e.printStackTrace();
  11. }
  12. }

查询方法

  1. publicstaticVisitorretrieveVisitor(intid){
  2. Connectionconn=getConnection();
  3. Visitorvisitor=null;
  4. QueryRunnerqr=newQueryRunner();
  5. Stringsql="select*fromvisitorwherestatus>0andid=?";
  6. try{
  7. visitor=(Visitor)qr.query(conn,sql,newBeanHandler<Visitor>(Visitor.class),id);
  8. System.out.println(visitor);
  9. returnvisitor;
  10. }catch(Exceptione){
  11. e.printStackTrace();
  12. }
  13. returnvisitor;
  14. }

更新操作

  1. publicstaticvoidupdateVisitor(intid){
  2. Visitorvisitor=retrieveVisitor(id);
  3. System.out.println("更新前:"+visitor);
  4. Connectionconn=getConnection();
  5. StringupdateFieldStr=visitor.getName();
  6. QueryRunnerqr=newQueryRunner();
  7. Stringsql="updatevisitorsetName=?,Email=?,Status=?,CreateTime=?wherestatus>0andId=?";
  8. if(updateFieldStr.contains("updated")){
  9. updateFieldStr=updateFieldStr.substring(0,updateFieldStr.indexOf("updated"));
  10. }else{
  11. updateFieldStr=updateFieldStr+"updated";
  12. }
  13. visitor.setName(updateFieldStr);
  14. try{
  15. intcount=qr.update(conn,sql,newObject[]{visitor.getName(),visitor.getName(),visitor.getStatus(),
  16. visitor.getCreateTime(),visitor.getId()});
  17. System.out.println("更新了"+count+"条数据");
  18. System.out.println("更新后:"+visitor);
  19. }catch(SQLExceptione){
  20. //TODO:handleexception
  21. e.printStackTrace();
  22. }
  23. }

BeanListHandler方法

  1. publicstaticvoidgetVisitorList(){
  2. Connectionconn=getConnection();
  3. QueryRunnerqr=newQueryRunner();
  4. Stringsql="select*fromvisitorwherestatus>0";
  5. try{
  6. List<Visitor>ls=qr.query(conn,sql,newBeanListHandler<Visitor>(Visitor.class));
  7. for(Visitorvisitor:ls){
  8. System.out.println(visitor);
  9. }
  10. }catch(SQLExceptione){
  11. //TODOAuto-generatedcatchblock
  12. e.printStackTrace();
  13. }
  14. }

MapHandler操作

  1. publicstaticvoidgetVisitWithMap(intid){
  2. Connectionconn=getConnection();
  3. QueryRunnerqr=newQueryRunner();
  4. Stringsql="select*fromvisitorwherestatus>0andid=?";
  5. try{
  6. Map<String,Object>map=qr.query(conn,sql,newMapHandler(),id);
  7. IntegervisitorId=Integer.valueOf(map.get("Id").toString());
  8. StringvisitorName=map.get("Name").toString();
  9. StringvisitorEmail=map.get("Email").toString();
  10. IntegervisitorStatus=Integer.valueOf(map.get("Status").toString());
  11. SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");
  12. DatevisitorCreateTime=sdf.parse(map.get("CreateTime").toString());
  13. Visitorvisitor=newVisitor(visitorName,visitorEmail);
  14. visitor.setId(visitorId);
  15. visitor.setStatus(visitorStatus);
  16. visitor.setCreateTime(visitorCreateTime);
  17. System.out.println(visitor);
  18. }catch(Exceptione){
  19. //TODO:handleexception
  20. e.printStackTrace();
  21. }
  22. }

MapListHandler方法

  1. publicstaticvoidgetVisitWithMapLs(){
  2. Connectionconn=getConnection();
  3. QueryRunnerqr=newQueryRunner();
  4. Stringsql="select*fromvisitorwherestatus>0";
  5. try{
  6. List<Map<String,Object>>mapLs=qr.query(conn,sql,newMapListHandler());
  7. for(Map<String,Object>map:mapLs){
  8. IntegervisitorId=Integer.valueOf(map.get("Id").toString());
  9. StringvisitorName=map.get("Name").toString();
  10. StringvisitorEmail=map.get("Email").toString();
  11. IntegervisitorStatus=Integer.valueOf(map.get("Status").toString());
  12. SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");
  13. DatevisitorCreateTime=sdf.parse(map.get("CreateTime").toString());
  14. Visitorvisitor=newVisitor(visitorName,visitorEmail);
  15. visitor.setId(visitorId);
  16. visitor.setStatus(visitorStatus);
  17. visitor.setCreateTime(visitorCreateTime);
  18. System.out.println(visitor);
  19. }
  20. }catch(Exceptione){
  21. //TODO:handleexception
  22. e.printStackTrace();
  23. }
  24. }

经过上面的几个示例,相信大家应该知道怎么用这个框架了吧~框架的官网地址


本文转自【http://www.blogjava.net/davidjefiny/archive/2014/01/05/apache_common_dbutils.html】

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则作者保留追究法律责任的权利

分享到:
评论

相关推荐

    Apache DBUtils使用总结

    Apache DBUtils 是一个轻量级的 Java 数据库连接(JDBC)工具,它提供了一些实用功能,简化了数据库操作。DBUtils 最主要的功能是对 JDBC 结果集进行封装,能够将查询结果直接转换为 JavaBean 对象,从而减轻开发...

    采用Apache dbutils操作数据库

    Apache DBUtils是一个基于Java的开源库,它提供了一种简单且有效的处理数据库连接的方法,减少了在应用程序中编写数据库操作代码的复杂性。DBUtils的主要设计目标是简化数据库访问,通过提供一套实用工具来处理常见...

    apache dbutils ..............................

    使用Apache DBUtils的优点包括: 1. **简化数据库访问**: 它通过处理数据库连接的生命周期、结果集的遍历以及异常处理,减少了大量重复的代码。 2. **安全性**: 预编译的PreparedStatement可以防止SQL注入攻击。 3....

    Dbutils项目实例

    org apache commons dbutils org apache commons dbutils handlers org apache commons dbutils wrappers DBUtils封装了对JDBC的操作 简化了JDBC操作 可以少写代码 org apache commons dbutils DbUtils 关闭链接等...

    DbUtils数据库查询工具包 v1.8.1.zip

    DbUtils是Apache组织提供的...在毕业设计论文或计算机案例中,使用DbUtils进行数据库操作能让你的项目看起来更专业、更规范。模板建站和系统软件工具也可以利用DbUtils简化数据库操作部分,使代码更加简洁和易于维护。

    DbUtils应用开发例子--DbUtilsExample.zip

    Apache Common DbUtils是操作数据库的组件,对传统操作数据库的类(JDBC)进行二次封装,可以把结果集转化成List。 DbUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。 应用实践小结: 一、...

    dbutils + oracle 增删改查批量插入示例

    首先,`dbutils`是Apache软件基金会提供的一个开源项目,它基于Java,提供了简单易用的API,使得开发者可以便捷地执行SQL语句,处理结果集,实现了对数据库的基本操作。它的核心组件包括QueryRunner和DBUtils,其中...

    DButils使用实例

    DButils是Apache的一个开源项目,它是Java编程语言中用于数据库操作的一个实用工具库。这个库主要是为了解决JDBC(Java Database Connectivity)编程时的一些繁琐工作,如连接管理、异常处理以及结果集的处理等,...

    Apache commons dbutils 1.4jar是JDBC的开源数据库工具包

    在实际应用中,使用Apache Commons DBUtils可以提高开发效率,减少代码量,并通过异常处理机制增强程序的健壮性。它简化了JDBC编程模型,使得开发者可以专注于业务逻辑,而不是底层的数据库操作细节。在开发基于Java...

    commons_dbutils使用说明

    口是用来处理 `ResultSet` 对象的,将数据库查询的结果转换为应用程序可以方便使用的对象。主要有以下几种常用的实现: 1. `BeanHandler`: 这个处理器将 `ResultSet` 的一行数据映射到一个 Java Bean 实例中。你...

    commons-dbutils使用简单范例--简化jdbc编程

    1. **引入依赖**:在项目中引入Apache Commons DBUtils的jar包或Maven依赖,确保项目可以使用其提供的类和方法。 2. **配置数据源**:创建一个DataSource对象,这通常是通过连接池实现的,如Apache DBCP、C3P0或...

    Apache Commons DbUtils工具包使用介绍

    ### Apache Commons DbUtils工具包使用介绍 #### 一、简介 **Apache Commons DbUtils** 是一个用于简化 Java JDBC 操作的轻量级工具包。它通过封装 JDBC 的基础功能,帮助开发者减少冗余代码,提高代码的可读性...

    Commons DbUtils源码阅读之实例及测试应用

    这篇博客将深入探讨DbUtils的源码,并通过实例来展示其在实际应用中的测试和使用。 DbUtils库主要提供了以下几个关键功能: 1. **数据查询**:DbUtils提供了QueryRunner类,可以方便地执行SQL查询,返回结果集。...

    commons-dbutils.jar.rar

    要在项目中使用DBUtils,首先需要将对应的jar包添加到项目的类路径中,然后可以通过创建QueryRunner实例,配合ResultSetHandler,轻松地执行SQL查询和更新操作。 总之,`commons-dbutils.jar.rar` 提供了不同版本...

    DBUtils数据库的使用

    2. 使用DBUtils的QueryRunner实例执行SQL语句。 3. 配置合适的ResultSetHandler来处理查询结果。 4. 在操作完成后,关闭资源(ResultSet、Statement和Connection)。 5. 如果涉及事务,需要处理事务的提交或回滚。 ...

    DBUtils-jar包.zip

    Apache DBUtils是一个开源的Java工具库,主要用于简化...总的来说,Apache DBUtils是Java开发中的得力助手,它简化了JDBC的使用,提高了代码的健壮性和可维护性,特别适合在MySQL等关系型数据库上进行数据操作的项目。

    Dbutils 的jar包

    Dbutils 是 Apache Commons DbUtils 的简称,它是一个用于简化 Java 数据库编程的开源库。Dbutils 基于 JDBC(Java Database Connectivity),提供了一套简洁、高效且易于使用的API,帮助开发者更方便地处理数据库...

    dbutils的jar包和源码

    - **ConnectionPool**: dbutils 也包含了一个简单的数据库连接池,尽管现代应用中通常会使用更复杂的连接池实现,如 C3P0 或 HikariCP,但 ConnectionPool 仍可用于学习和小型项目。 - **异常处理**: dbutils 使用...

    dbutils学习实例

    本实例将深入探讨如何使用DBUtils进行基本的底层数据应用,特别是连接池C3P0和JDBC的三种包装形式。 ### 1. DBUtils概述 DBUtils是一个实用工具库,它基于JDBC API进行了封装,提供了更友好的接口和异常处理机制。...

    C3P0和DButils

    C3P0和DBUtils是两个非常重要的库,用于简化Java应用程序中的数据库操作。以下是这两个库的详细介绍: C3P0是一个开源的JDBC连接池,它的全称是Commerical-grade Connection Pooling for JDBC。C3P0-0.9.1.2.jar是...

Global site tag (gtag.js) - Google Analytics