dbutils

DbUtils is a small set of classes designed to make working with JDBC easier. JDBC resource cleanup code is mundane, error prone work so these classes abstract out all of the cleanup tasks from your code leaving you with what you really wanted to do with JDBC in the first place: query and update data.

Some of the advantages of using DbUtils are:

* No possibility for resource leaks. Correct JDBC coding isn't difficult but it is time-consuming and tedious. This often leads to connection leaks that may be difficult to track down.
* Cleaner, clearer persistence code. The amount of code needed to persist data in a database is drastically reduced. The remaining code clearly expresses your intention without being cluttered with resource cleanup.
* Automatically populate JavaBean properties from ResultSets. You don't need to manually copy column values into bean instances by calling setter methods. Each row of the ResultSet can be represented by one fully populated bean instance.

DbUtils is a very small library of classes so it won't take long to go through the javadocs for each class. The core classes/interfaces in DbUtils are QueryRunner and ResultSetHandler. You don't need to know about any other DbUtils classes to benefit from using the library.

Each of the provided ResultSetHandler implementations accept a RowProcessor to do the actual conversion of rows into objects. By default the handlers use the BasicRowProcessor implementation but you can implement a custom version to plug in. Probably the most common customization is to implement the toBean() method to handle custom database datatype issues.

BasicRowProcessor uses a BeanProcessor to convert ResultSet columns into JavaBean properties.

You can do one of the following to map these columns to bean properties:

1. Alias the column names in the SQL so they match the Java names: select social_sec# as socialSecurityNumber from person
2. Subclass BeanProcessor and override the mapColumnsToProperties() method to strip out the offending characters.


Common Dbutils是操作数据库的组件,对传统操作数据库的类进行二次封装,可以把结果集转化成List。
DBUtils包括3个包:org.apache.commons.dbutilsorg.apache.commons.dbutils.handlersorg.apache.commons.dbutils.wrappersDBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。 org.apache.commons.dbutilsDbUtils 关闭链接等操作QueryRunner 进行查询的操作 org.apache.commons.dbutils.handlersArrayHandler :将ResultSet中第一行的数据转化成对象数组ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[]BeanHandler :将ResultSet中第一行的数据转化成类对象BeanListHandler :将ResultSet中所有的数据转化成List,List中存放的是类对象ColumnListHandler :将ResultSet中某一列的数据存成List,List中存放的是Object对象KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map。Map中存放的是数据MapHandler :将ResultSet中第一行的数据存成Map映射MapListHandler :将ResultSet中所有的数据存成List。List中存放的是MapScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object org.apache.commons.dbutils.wrappersSqlNullCheckedResultSet :对ResultSet进行操作,改版里面的值StringTrimmedResultSet :去除ResultSet中中字段的左右空格。Trim()
主要方法:

DbUtils类:启动类
ResultSetHandler接口:转换类型接口
MapListHandler类:实现类,把记录转化成List
BeanListHandler类:实现类,把记录转化成List,使记录为JavaBean类型的对象
Qrery Runner类:执行SQL语句的类

JDBC关于操作数据库的类,如果我们使用完毕之后就必须关闭。而且在操作数据类里面写了大量的业务逻辑(如增删查改),当一个类业务逻辑牵涉的太多,耦合度相对比较高,结果集难以处理,当我们拿到一个ResultSet结果集,用while循环一个一个读出来,再转换成JavaBean,最后形成List,太麻烦了。而且到处都抛SQLException,又要捕获异常。造成代码复杂,可读性差,繁琐,不易于维护,有影响代码的美观性,最重要的是互用性不高。DbUtils给我们解决了一系列的问题:DbUtils是一个为简化JDBC操作的小类库,轻量级封装了jdbc。会自动关闭数据库连接,从而我们不用担心数据库的资源问题 DbUtils库里很多类定义业务逻辑,如果子类直接继承它, 使类的业务逻辑简单了,也减少了JDBC代码的重复问题。使代码的可读性更强,互用性更高了!DbUtils的处理流程: 它通过DataSource得到得到一个连接, 拿到结果集, 再通过结果集得到元数据类型, 通过反射拿到我们传入进来的对象的元数据, 再通过反射对它们进行相应的转换。生成一个bean, 如果需要对象的话,直接返回,如果是其他的我们在进行相应的处理DbUtils库里面有三个最主要的类: QueryRunner:通过构造方法,得到一个数据库连接,数据库的操作都是通过这个类来完成的。 ResultSetHandler:转换类型接口(主要把我们数据的结果集通过一系列的处理转换成Java对象) ResetSetHandler 的实现类有很多种, 涉及数组,map javabean等, 所有的实现类都接受一个RowProcessor类型的参数来实现数据列向对象的转化。其中RowProcessor的默认实现类为 BasicRowProcessor, 用户也可以自己实现RowProcessor。BasicRowProcessor使用BeanProcessor来完成ResultSet中的值向JavaBean的映射。前提要求列名和 bean属性名必须一致。所有的数据库结果集转换成bean,list,map都是通过他的实现类来处理的。


util是一个非常小的类包, 无需花费太多时间去阅读它的doc, 核心类(接口)为QueryRunner 和ResetSetHandler。 ResetSetHandler 的实现类有很多种, 涉及数组, map , javabean, 等等, 所有的实现类都接受一个RowProcessor类型的参数来实现数据列向对象的转化。其中RowProcessor的默认实现类为 BasicRowProcessor, 用户也可以自己实现RowProcessor。 BasicRowProcessor使用BeanProcessor来完成ResultSet中的值向JavaBean的映射。前提要求列名和bean属性名必须一致。 但是在大部分情况下,数据库的列名中常含有一个些特殊字符,这些字符在java命名规约中又不能使用,针对上述情况,有如下2种解决办法: 1)SQL语句中使用as 。 如 select Na#me as name; 2) 继承BeanProcessor并覆盖mapColumnsToProperties()以便跳过那些违背java命名规约的字符。 BeanProcessor.java public Object toBean(ResultSet rs Class type) { //确定column要转化成的类型,并以数组形式存储。 mapColumnToProperties(); //组装bean并返回 createBean() { // 依照前面数组中存储的形式,将column进行相应的转化 processColumn() //运用反射 设值 callSetter() } }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值