前段时间使用了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。
-
/*创建Visitor*/
-
CREATETABLEVisitor
-
(
-
IdINT(11)NOTNULLAUTO_INCREMENT,
-
NameVARCHAR(1000)NOTNULL,
-
EmailVARCHAR(1000)NOTNULL,
-
StatusINTNOTNULLDEFAULT1,
-
CreateTimeDateTime,
-
PRIMARYKEY(Id)
-
)
建完表结构,我们就可以学习怎么利用框架中的Utils类帮助我们完成CRUD-DEMO,其实对于这个框架主要操作的是ResultSetHandler接口的实现类与QueryRunner类
创建对应的JavaBean实体类如下:
-
packagedavid.apache.model;
-
-
importjava.text.SimpleDateFormat;
-
importjava.util.Date;
-
-
publicclassVisitor{
-
-
privateintid;
-
privateStringname;
-
privateStringemail;
-
privateintstatus;
-
privateDatecreateTime;
-
-
publicVisitor(){
-
-
setCreateTime(newDate());
-
}
-
-
publicVisitor(Stringname,Stringemail){
-
this.setName(name);
-
this.setEmail(email);
-
this.setStatus(1);
-
this.setCreateTime(newDate());
-
}
-
-
publicintgetId(){
-
returnid;
-
}
-
-
publicvoidsetId(intid){
-
this.id=id;
-
}
-
-
publicStringgetName(){
-
returnname;
-
}
-
-
publicvoidsetName(Stringname){
-
this.name=name;
-
}
-
-
publicStringgetEmail(){
-
returnemail;
-
}
-
-
publicvoidsetEmail(Stringemail){
-
this.email=email;
-
}
-
-
publicintgetStatus(){
-
returnstatus;
-
}
-
-
publicvoidsetStatus(intstatus){
-
this.status=status;
-
}
-
-
publicDategetCreateTime(){
-
returncreateTime;
-
}
-
-
publicvoidsetCreateTime(DatecreateTime){
-
this.createTime=createTime;
-
}
-
-
@Override
-
publicStringtoString(){
-
-
returnString.format("{Id:%d,Name:%s,Email:%s,CreateTime:%s}",getId(),getName(),getEmail(),
-
newSimpleDateFormat("yyyy-MM-ddHH:mm:ss").format(getCreateTime()));
-
}
-
}
首先我们先新建一个获取Connection的方法:
-
privatestaticConnectiongetConnection(){
-
Connectionconn=null;
-
try{
-
Class.forName(CONNECTION_DRIVER_STR);
-
conn=DriverManager.getConnection(CONNECTION_STR,"root","123456");
-
}catch(Exceptione){
-
e.printStackTrace();
-
}
-
returnconn;
-
}
新建方法(对于里面的自增字段,我们可以采用变通的方法来插入,使用select last_insert_id()方法)
-
-
-
-
publicstaticvoidinsertVisitor(Visitorvisitor){
-
Connectionconn=getConnection();
-
QueryRunnerqr=newQueryRunner();
-
Stringsql="insertintovisitor(Name,Email,Status,CreateTime)values(?,?,?,?)";
-
try{
-
intcount=qr.update(conn,sql,visitor.getName(),visitor.getEmail(),1,newDate());
-
BigIntegernewId=(BigInteger)qr.query(conn,"selectlast_insert_id()",newScalarHandler<BigInteger>(1));
-
visitor.setId(Integer.valueOf(String.valueOf(newId)));
-
System.out.println("新增"+count+"条数据=>Id:"+newId);
-
}catch(SQLExceptione){
-
e.printStackTrace();
-
}
-
}
大家可以看到操作的步骤其实很简单,也是写SQL可以了,对于自增字段我们通过select last_insert_id()的方法利用ScalarHandler<BigInteger>实体类来返回达到变通效果。
删除方法
-
publicstaticvoiddeleteVisitor(intid){
-
Connectionconn=getConnection();
-
QueryRunnerqr=newQueryRunner();
-
Stringsql="deletefromvisitorwherestatus>0andid=?";
-
try{
-
intcount=qr.update(conn,sql,id);
-
System.out.println("删除"+count+"条数据。");
-
}catch(SQLExceptione){
-
-
e.printStackTrace();
-
}
-
}
查询方法
-
publicstaticVisitorretrieveVisitor(intid){
-
Connectionconn=getConnection();
-
Visitorvisitor=null;
-
QueryRunnerqr=newQueryRunner();
-
Stringsql="select*fromvisitorwherestatus>0andid=?";
-
try{
-
visitor=(Visitor)qr.query(conn,sql,newBeanHandler<Visitor>(Visitor.class),id);
-
System.out.println(visitor);
-
returnvisitor;
-
}catch(Exceptione){
-
e.printStackTrace();
-
}
-
returnvisitor;
-
}
更新操作
-
publicstaticvoidupdateVisitor(intid){
-
Visitorvisitor=retrieveVisitor(id);
-
System.out.println("更新前:"+visitor);
-
Connectionconn=getConnection();
-
StringupdateFieldStr=visitor.getName();
-
QueryRunnerqr=newQueryRunner();
-
Stringsql="updatevisitorsetName=?,Email=?,Status=?,CreateTime=?wherestatus>0andId=?";
-
if(updateFieldStr.contains("updated")){
-
updateFieldStr=updateFieldStr.substring(0,updateFieldStr.indexOf("updated"));
-
}else{
-
updateFieldStr=updateFieldStr+"updated";
-
}
-
visitor.setName(updateFieldStr);
-
try{
-
intcount=qr.update(conn,sql,newObject[]{visitor.getName(),visitor.getName(),visitor.getStatus(),
-
visitor.getCreateTime(),visitor.getId()});
-
System.out.println("更新了"+count+"条数据");
-
System.out.println("更新后:"+visitor);
-
}catch(SQLExceptione){
-
-
e.printStackTrace();
-
}
-
}
BeanListHandler方法
-
publicstaticvoidgetVisitorList(){
-
Connectionconn=getConnection();
-
QueryRunnerqr=newQueryRunner();
-
Stringsql="select*fromvisitorwherestatus>0";
-
try{
-
List<Visitor>ls=qr.query(conn,sql,newBeanListHandler<Visitor>(Visitor.class));
-
for(Visitorvisitor:ls){
-
System.out.println(visitor);
-
}
-
}catch(SQLExceptione){
-
-
e.printStackTrace();
-
}
-
}
MapHandler操作
-
publicstaticvoidgetVisitWithMap(intid){
-
Connectionconn=getConnection();
-
QueryRunnerqr=newQueryRunner();
-
Stringsql="select*fromvisitorwherestatus>0andid=?";
-
try{
-
Map<String,Object>map=qr.query(conn,sql,newMapHandler(),id);
-
IntegervisitorId=Integer.valueOf(map.get("Id").toString());
-
StringvisitorName=map.get("Name").toString();
-
StringvisitorEmail=map.get("Email").toString();
-
IntegervisitorStatus=Integer.valueOf(map.get("Status").toString());
-
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");
-
DatevisitorCreateTime=sdf.parse(map.get("CreateTime").toString());
-
Visitorvisitor=newVisitor(visitorName,visitorEmail);
-
visitor.setId(visitorId);
-
visitor.setStatus(visitorStatus);
-
visitor.setCreateTime(visitorCreateTime);
-
System.out.println(visitor);
-
}catch(Exceptione){
-
-
e.printStackTrace();
-
}
-
}
MapListHandler方法
-
publicstaticvoidgetVisitWithMapLs(){
-
Connectionconn=getConnection();
-
QueryRunnerqr=newQueryRunner();
-
Stringsql="select*fromvisitorwherestatus>0";
-
try{
-
List<Map<String,Object>>mapLs=qr.query(conn,sql,newMapListHandler());
-
for(Map<String,Object>map:mapLs){
-
IntegervisitorId=Integer.valueOf(map.get("Id").toString());
-
StringvisitorName=map.get("Name").toString();
-
StringvisitorEmail=map.get("Email").toString();
-
IntegervisitorStatus=Integer.valueOf(map.get("Status").toString());
-
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");
-
DatevisitorCreateTime=sdf.parse(map.get("CreateTime").toString());
-
Visitorvisitor=newVisitor(visitorName,visitorEmail);
-
visitor.setId(visitorId);
-
visitor.setStatus(visitorStatus);
-
visitor.setCreateTime(visitorCreateTime);
-
System.out.println(visitor);
-
}
-
}catch(Exceptione){
-
-
e.printStackTrace();
-
}
-
}
经过上面的几个示例,相信大家应该知道怎么用这个框架了吧~框架的官网地址
本文转自【http://www.blogjava.net/davidjefiny/archive/2014/01/05/apache_common_dbutils.html】
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则作者保留追究法律责任的权利
分享到:
相关推荐
Apache DBUtils 是一个轻量级的 Java 数据库连接(JDBC)工具,它提供了一些实用功能,简化了数据库操作。DBUtils 最主要的功能是对 JDBC 结果集进行封装,能够将查询结果直接转换为 JavaBean 对象,从而减轻开发...
Apache DBUtils是一个基于Java的开源库,它提供了一种简单且有效的处理数据库连接的方法,减少了在应用程序中编写数据库操作代码的复杂性。DBUtils的主要设计目标是简化数据库访问,通过提供一套实用工具来处理常见...
使用Apache DBUtils的优点包括: 1. **简化数据库访问**: 它通过处理数据库连接的生命周期、结果集的遍历以及异常处理,减少了大量重复的代码。 2. **安全性**: 预编译的PreparedStatement可以防止SQL注入攻击。 3....
org apache commons dbutils org apache commons dbutils handlers org apache commons dbutils wrappers DBUtils封装了对JDBC的操作 简化了JDBC操作 可以少写代码 org apache commons dbutils DbUtils 关闭链接等...
DbUtils是Apache组织提供的...在毕业设计论文或计算机案例中,使用DbUtils进行数据库操作能让你的项目看起来更专业、更规范。模板建站和系统软件工具也可以利用DbUtils简化数据库操作部分,使代码更加简洁和易于维护。
Apache Common DbUtils是操作数据库的组件,对传统操作数据库的类(JDBC)进行二次封装,可以把结果集转化成List。 DbUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。 应用实践小结: 一、...
首先,`dbutils`是Apache软件基金会提供的一个开源项目,它基于Java,提供了简单易用的API,使得开发者可以便捷地执行SQL语句,处理结果集,实现了对数据库的基本操作。它的核心组件包括QueryRunner和DBUtils,其中...
DButils是Apache的一个开源项目,它是Java编程语言中用于数据库操作的一个实用工具库。这个库主要是为了解决JDBC(Java Database Connectivity)编程时的一些繁琐工作,如连接管理、异常处理以及结果集的处理等,...
在实际应用中,使用Apache Commons DBUtils可以提高开发效率,减少代码量,并通过异常处理机制增强程序的健壮性。它简化了JDBC编程模型,使得开发者可以专注于业务逻辑,而不是底层的数据库操作细节。在开发基于Java...
口是用来处理 `ResultSet` 对象的,将数据库查询的结果转换为应用程序可以方便使用的对象。主要有以下几种常用的实现: 1. `BeanHandler`: 这个处理器将 `ResultSet` 的一行数据映射到一个 Java Bean 实例中。你...
1. **引入依赖**:在项目中引入Apache Commons DBUtils的jar包或Maven依赖,确保项目可以使用其提供的类和方法。 2. **配置数据源**:创建一个DataSource对象,这通常是通过连接池实现的,如Apache DBCP、C3P0或...
### Apache Commons DbUtils工具包使用介绍 #### 一、简介 **Apache Commons DbUtils** 是一个用于简化 Java JDBC 操作的轻量级工具包。它通过封装 JDBC 的基础功能,帮助开发者减少冗余代码,提高代码的可读性...
这篇博客将深入探讨DbUtils的源码,并通过实例来展示其在实际应用中的测试和使用。 DbUtils库主要提供了以下几个关键功能: 1. **数据查询**:DbUtils提供了QueryRunner类,可以方便地执行SQL查询,返回结果集。...
要在项目中使用DBUtils,首先需要将对应的jar包添加到项目的类路径中,然后可以通过创建QueryRunner实例,配合ResultSetHandler,轻松地执行SQL查询和更新操作。 总之,`commons-dbutils.jar.rar` 提供了不同版本...
2. 使用DBUtils的QueryRunner实例执行SQL语句。 3. 配置合适的ResultSetHandler来处理查询结果。 4. 在操作完成后,关闭资源(ResultSet、Statement和Connection)。 5. 如果涉及事务,需要处理事务的提交或回滚。 ...
Apache DBUtils是一个开源的Java工具库,主要用于简化...总的来说,Apache DBUtils是Java开发中的得力助手,它简化了JDBC的使用,提高了代码的健壮性和可维护性,特别适合在MySQL等关系型数据库上进行数据操作的项目。
Dbutils 是 Apache Commons DbUtils 的简称,它是一个用于简化 Java 数据库编程的开源库。Dbutils 基于 JDBC(Java Database Connectivity),提供了一套简洁、高效且易于使用的API,帮助开发者更方便地处理数据库...
- **ConnectionPool**: dbutils 也包含了一个简单的数据库连接池,尽管现代应用中通常会使用更复杂的连接池实现,如 C3P0 或 HikariCP,但 ConnectionPool 仍可用于学习和小型项目。 - **异常处理**: dbutils 使用...
本实例将深入探讨如何使用DBUtils进行基本的底层数据应用,特别是连接池C3P0和JDBC的三种包装形式。 ### 1. DBUtils概述 DBUtils是一个实用工具库,它基于JDBC API进行了封装,提供了更友好的接口和异常处理机制。...
C3P0和DBUtils是两个非常重要的库,用于简化Java应用程序中的数据库操作。以下是这两个库的详细介绍: C3P0是一个开源的JDBC连接池,它的全称是Commerical-grade Connection Pooling for JDBC。C3P0-0.9.1.2.jar是...