请各位高手给我详细说下DButil 。
展开全部
首先嘛,DBUTIL顾名思义就是DB的一个帮助。它的出现是因为在程序中有过多的JDBC重复代码。DBUTIL就是将这些重复代码抽取出来。简单的来说,就是对JDBC的一个简单封装。
DBUTIL的优点就是:简洁,简单;而他的缺点则是没有对事务提交进行封装。
使用时,先要重写DataSoure,继承BasicDataSource类,这个类主要是用来得到数据库连接。然后使用QueryRunner来关联。
DBUTIL中会需要实现ResultSetHandler接口,他的子类有很多,列如BeanList,Bean,List...这样就能满足客户端的不同需求。
这里用BeanListHandler来举例。
DBUTIL中使用元数据与Bean实现动态赋值。将元数据实现动态匹配。并根据所传过来的handler来对Result进行封装。例如这里用BeanList来举例,它会将Result利用反射机制封装成BeanList返回。
DBUTIL是对JDBC的一种简单的封装,他比JDBC更简洁,简单。使用起来只需要写好语句不用在意繁琐的代码实现。
从DBUTIL中你应该能体验到元数据,反射,泛型,变长参数的应用。还有代码尽量精简。
呵呵,纯手打。请采纳。
DBUTIL的优点就是:简洁,简单;而他的缺点则是没有对事务提交进行封装。
使用时,先要重写DataSoure,继承BasicDataSource类,这个类主要是用来得到数据库连接。然后使用QueryRunner来关联。
DBUTIL中会需要实现ResultSetHandler接口,他的子类有很多,列如BeanList,Bean,List...这样就能满足客户端的不同需求。
这里用BeanListHandler来举例。
DBUTIL中使用元数据与Bean实现动态赋值。将元数据实现动态匹配。并根据所传过来的handler来对Result进行封装。例如这里用BeanList来举例,它会将Result利用反射机制封装成BeanList返回。
DBUTIL是对JDBC的一种简单的封装,他比JDBC更简洁,简单。使用起来只需要写好语句不用在意繁琐的代码实现。
从DBUTIL中你应该能体验到元数据,反射,泛型,变长参数的应用。还有代码尽量精简。
呵呵,纯手打。请采纳。
展开全部
Apache 的Dbutil是一个非常好用的工具,尤其在它可以很方便的把JDBC中SELECT语句的结果集rs转化为任何我们想要的数据类型。
以下为示例:
public XsModel getByID(String xh)throws SQLException{
XsModel model=null;
ResultSet rs=null;
StringBuffer sql=new StringBuffer();
try{
//获取SQL
sql.append("select * from xsxxb where xh='");
sql.append(xh);
sql.append("'");
rs = bean.excutequery(sql.toString());
if(rs.next())
{
model=(XsModel) this.getModelBySql(sql.toString(),XsModel.class);//通过Dbutil把r
s变为Model
}
}catch(SQLException e){
e.printStackTrace();
}finally {
if(rs!=null)
rs.close();
rs=null;
}
return model;
}
/*通过Apache dbutil直接得到model
注意参数中的beanClass是你想要转换的类型名
注意query的参数中有个ResultsetHandler,ResultsetHandler是个接口,实现此接口的方法很多(详见commons DbUtils 1.2 API)在调用时用其中一种即可
在以下函数中使用了BeanHandler
在getByID函数中调用了此函数
*/
public Object getModelBySql(String sql,Class beanClass) throws SQLException
{
Object model=null;
QueryRunner qr = new QueryRunner();
model=qr.query(bean.getConnection(),sql,new BeanHandler(beanClass));
//model=qr.query(bean.getConnection(),sql,new ArrayHandler());
return model;
}
程序中全部代码:
本例中用的是oracle数据库,数据库中有表xxssb,所含字段Xmodel.java中有。
1、dbutil出现的原因:
a、大量的重复代码
b、jdbc的简单封装
c、使用策略模式可以生成不同的返回类型
2、技术要点:
a、反射
b、泛型
c、元数据
d、可变参数
3、流程:
1、客户端调用query方法,进入该方法首先使用工厂模式创建一个数据库连接对象,这样的好处是隐藏了new的关键字,
并且代码的扩展性很强,改变了具体的实现类不影响系统的构架,
2、通过适配器模式(adaper)来兼容了一些查询的功能,这样可以使客户调用起来更方便,然后又通过一个工厂模式
得到了一个预处理对象,得到对象之后把这个预处理对象填充条件(问号),如果可变参数没有值的话则直接返回,
否则把可变参数的值一一设置到预处理对象中。
3、这里又使用了策略模式来解决了返回类型,它可以取决与客户需要的是set还是list、或者是map类型,然后创建了一
个集合。通过反射技术来得到属性类的所有信息,像set、get方法和字段,之后通过结果集的元数据来得到表中的列信息,
把属性和数据库中的列一一对应,这样是防止了表中的列和属性类中的属性顺序不一样而判断的。
4、最后才创建bean,首先使用了反射机制来生成一个对象,然后处理的数据的类型,处理完之后调用了属性类中的set方
法把相应的值设置的属性中,然后把每一个对象都设置好封装成一个bean,最后把这些bean存放到集合(set、list),
或者map中返回。
它呢就相当与jquery和js的关系,这里是dbutil和的jdbc,如果要进一步了解就加Q296307031
以下为示例:
public XsModel getByID(String xh)throws SQLException{
XsModel model=null;
ResultSet rs=null;
StringBuffer sql=new StringBuffer();
try{
//获取SQL
sql.append("select * from xsxxb where xh='");
sql.append(xh);
sql.append("'");
rs = bean.excutequery(sql.toString());
if(rs.next())
{
model=(XsModel) this.getModelBySql(sql.toString(),XsModel.class);//通过Dbutil把r
s变为Model
}
}catch(SQLException e){
e.printStackTrace();
}finally {
if(rs!=null)
rs.close();
rs=null;
}
return model;
}
/*通过Apache dbutil直接得到model
注意参数中的beanClass是你想要转换的类型名
注意query的参数中有个ResultsetHandler,ResultsetHandler是个接口,实现此接口的方法很多(详见commons DbUtils 1.2 API)在调用时用其中一种即可
在以下函数中使用了BeanHandler
在getByID函数中调用了此函数
*/
public Object getModelBySql(String sql,Class beanClass) throws SQLException
{
Object model=null;
QueryRunner qr = new QueryRunner();
model=qr.query(bean.getConnection(),sql,new BeanHandler(beanClass));
//model=qr.query(bean.getConnection(),sql,new ArrayHandler());
return model;
}
程序中全部代码:
本例中用的是oracle数据库,数据库中有表xxssb,所含字段Xmodel.java中有。
1、dbutil出现的原因:
a、大量的重复代码
b、jdbc的简单封装
c、使用策略模式可以生成不同的返回类型
2、技术要点:
a、反射
b、泛型
c、元数据
d、可变参数
3、流程:
1、客户端调用query方法,进入该方法首先使用工厂模式创建一个数据库连接对象,这样的好处是隐藏了new的关键字,
并且代码的扩展性很强,改变了具体的实现类不影响系统的构架,
2、通过适配器模式(adaper)来兼容了一些查询的功能,这样可以使客户调用起来更方便,然后又通过一个工厂模式
得到了一个预处理对象,得到对象之后把这个预处理对象填充条件(问号),如果可变参数没有值的话则直接返回,
否则把可变参数的值一一设置到预处理对象中。
3、这里又使用了策略模式来解决了返回类型,它可以取决与客户需要的是set还是list、或者是map类型,然后创建了一
个集合。通过反射技术来得到属性类的所有信息,像set、get方法和字段,之后通过结果集的元数据来得到表中的列信息,
把属性和数据库中的列一一对应,这样是防止了表中的列和属性类中的属性顺序不一样而判断的。
4、最后才创建bean,首先使用了反射机制来生成一个对象,然后处理的数据的类型,处理完之后调用了属性类中的set方
法把相应的值设置的属性中,然后把每一个对象都设置好封装成一个bean,最后把这些bean存放到集合(set、list),
或者map中返回。
它呢就相当与jquery和js的关系,这里是dbutil和的jdbc,如果要进一步了解就加Q296307031
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
DBUtil是做JDBC连接数据库的时候, 开发人员为了避免重写取得和关闭 connection 等于数据库操作又关的代码,自己写的一个工具类。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是自己写的类,从名字上看应该是负责连接数据库用的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-05-05
展开全部
如果你不想用DButil的话,可以试试直接用JDBC,当你直接用JDBC后,很多时候,会有不少的重复代码,
到那个时候,你就发现DButil是有用的,相对而言,也是设计良好的。
到那个时候,你就发现DButil是有用的,相对而言,也是设计良好的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询