`
donyee
  • 浏览: 32593 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

我实现的一个dao助手类

阅读更多

 

这个类蛮实用的,我在几个项目中都使用。接口如下:

public interface DaoHelper {

    boolean add(String sql, Object... args);

    boolean add(String sql, Connection conn, Object... args);

    int update(String sql, Object... args);

    int update(String sql, Connection conn, Object... args);

    boolean delete(String sql, Object... args);

    boolean delete(String sql, Connection conn, Object... args);

    Object getObject(String sql, Class obj, Object... args);

    Object getObject(String sql, Connection conn, Class obj, Object... args);

    List<Object> getList(String sql, Class obj, Object... args);

    String queryForString(String sql, Object... args);

    Long queryForLong(String sql, Object... args);

    Boolean queryForBoolean(String sql, Object... args);

    Connection getConn ();

    void returnConnection(Connection conn);

    void rollBack(Connection conn);

}

<!---->(1)       <!---->第一个 add 方法用来执行 insert 语句,并且提交事务; sql 为数据库语句, args 为数据库参数,要和数据库语句里的“?”对应。

<!---->(2)       <!---->第二个 add 方法多了一个 Connetion 参数,该方法将使用这个 Conn 来创建 PreparedStatement ,但是执行结束后不提交,需要手动提交。

<!---->(3)       <!---->其他 update delete 同上

<!---->(4)       <!---->  getObject 方法返回一个 bean ,把 ResultSet 转化为 Bean bean 的属性必须和数据库列名称相同。

<!---->(5)       <!---->  getList 方法返回一个 List ,将 ResultSet 处理为一个 List 返回

<!---->(6)       <!---->  queryForString queryForLong queryForBoolean 将分别返回 String Long Boolean 结果。

实现我使用了 apache common 里的 dbutils 包,另外由 DataSource 提供数据库 Connection ,我使用的是 c3p0 的实现,用 spring bean set 注入的。代码参考附件。

 

PS: 抛砖引玉,大家要是有更好的方法的话,可以拿出来共享一下,提高代码质量、加快开发速度。

 

  • daohelper.rar (1.8 KB)
  • 描述: DaoHelper.java,DaoHelperImpl.java
  • 下载次数: 405
分享到:
评论
14 楼 tongjian 2008-10-08  
用spring提供的jdbc支持就好了阿。感觉比你写的这个工具类使用还简单呢!
13 楼 donyee 2008-10-07  
yuxianghong 写道

以前看过这个类似的结构。

这个轮子蛮实用的。
我这有一半是原创的
有个关键功能就是jdbc参数设置是从apache的dbutil源码学来的
ResultSet--Bean反射是用org.apache.commons.dbutils.BeanProcessor处理的

12 楼 yuxianghong 2008-10-07  
以前看过这个类似的结构。
11 楼 donyee 2008-10-06  
Ethan 写道

donyee 写道Ethan 写道
个人认为写这样的Util类,意义不大。很显然然你只是能够运行,却没有对资源的管理,资源管理居然和操作行为耦合在一起了!建议还是先把Java EE的层次结构弄清楚,这样设计出来的东西不会出现这么低级的失误!

竟然没有看懂,管理什么资源啊,缓存查询结果吗?这些没有

服了你了!难道你使用数据库仅仅是连上就用的吗?不考虑Connection资源的管理?怎么获取,怎么管理,什么时候释放?还有就是事务的管理,这都需要一个系统的而且严谨的架构来管理,并不是随便写个Util类就能够搞定的。其次,Util类也是一个程序中最难以管控的东西,谁知道你写了这个类?是不是你写一个Util类就要广播一次啊!没有听到的同事想实现这么一个功能的话很有可能自己又一拍大腿写一个重复的出来啊!
所以建议,在Framework的选择上多花功夫,不是能用就行了!


实现中用DataSource来获取连接的,我是用c3po来做的
事务有两者方式:参数有Connection的是调用者自己控制;参数无Connection的话,操作结束就提交事务
这些我都说明了啊!
10 楼 Ethan 2008-10-06  
donyee 写道
Ethan 写道

个人认为写这样的Util类,意义不大。很显然然你只是能够运行,却没有对资源的管理,资源管理居然和操作行为耦合在一起了!建议还是先把Java EE的层次结构弄清楚,这样设计出来的东西不会出现这么低级的失误!

竟然没有看懂,管理什么资源啊,缓存查询结果吗?这些没有


服了你了!难道你使用数据库仅仅是连上就用的吗?不考虑Connection资源的管理?怎么获取,怎么管理,什么时候释放?还有就是事务的管理,这都需要一个系统的而且严谨的架构来管理,并不是随便写个Util类就能够搞定的。其次,Util类也是一个程序中最难以管控的东西,谁知道你写了这个类?是不是你写一个Util类就要广播一次啊!没有听到的同事想实现这么一个功能的话很有可能自己又一拍大腿写一个重复的出来啊!
所以建议,在Framework的选择上多花功夫,不是能用就行了!
9 楼 donyee 2008-09-28  
Ethan 写道

个人认为写这样的Util类,意义不大。很显然然你只是能够运行,却没有对资源的管理,资源管理居然和操作行为耦合在一起了!建议还是先把Java EE的层次结构弄清楚,这样设计出来的东西不会出现这么低级的失误!

竟然没有看懂,管理什么资源啊,缓存查询结果吗?这些没有
8 楼 Ethan 2008-09-14  
个人认为写这样的Util类,意义不大。很显然然你只是能够运行,却没有对资源的管理,资源管理居然和操作行为耦合在一起了!建议还是先把Java EE的层次结构弄清楚,这样设计出来的东西不会出现这么低级的失误!
7 楼 mycybyb 2008-09-12  
自己也实现了个类似的东东
6 楼 aninfeel 2008-09-08  
org.apache.commons.dbutils.BeanProcessor,真是好东西。我还一直用beanutil
5 楼 stworthy 2008-09-08  
异常都给你拦截了,只是简单的printStackTrace,对调用者不负责任。
4 楼 donyee 2008-09-08  
没有IBATIS那么复杂的,
max什么的没有考虑到。
3 楼 rainerWJY 2008-09-07  
你不设skip和max..
数据量稍微上去点你就得破产了。。
2 楼 readythink 2008-09-07  
下载来看看,支持交流~!
1 楼 tenderghost 2008-09-07  
这个不是和iBATIS很像?SQL Map

相关推荐

    Android代码-基于安卓平台的114生活助手系统的设计与实现

    我想此刻你大概也能猜到了,这是一个软件工程专业本科狗的毕设项目。因此从某种意义上来说这个项目没有任何价值和意义,至少对大部分人来说是这样的。但是作为一个历经学校繁琐复杂毕设过程的本科狗来说,我清楚的...

    Android_RelatedEntities:在Room中使用关系的助手类(Android)

    大型项目的另一个优点是,您无需为每个不同的相关表创建单独的POJO,即:UserWithPet,UserWithDetails,UserWithHouse,UserWithHouseWithDoors等。相反,在User表中包括所有必需的相关实体,每个实体都带有@...

    vc++ 应用源码包_1

    电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...

    vc++ 应用源码包_2

    电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...

    vc++ 应用源码包_6

    电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...

    vc++ 应用源码包_3

    电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...

    vc++ 应用源码包_5

    电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...

    vc++ 开发实例源码包

    电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...

    Visual C++ 编程资源大全(英文源码 ActiveX)

    class with string manipulation members 一个串处理的类--CBstr(7KB)&lt;END&gt;&lt;br&gt;19,19.zip Displaying System Interfaces in ClassView 在ClassView中显示系统界面(4KB)&lt;END&gt;&lt;br&gt;20,20.zip Dialog frame ...

    图书馆管理系统

    一个现代化的图书馆在正常运营中总是面对大量的读者信息,书籍信息以及两者相互作用产生的借书信息,还书信息。面对图书馆数以万几计的图书,纷繁复杂的读者信息,频繁更替的借还书信息,传统的直接方法不但管理...

    Access+2000中文版高级编程

    10.2.3 使用联合查询以显示一个或所有记录 263 10.2.4 在子窗体中使用SQL的UNION语句查询所有记录 266 10.2.5 在组合框控件外显示组合框的列 268 10.2.6 根据用户的输入添加新的组合框选项 271 10.3 使用本...

    Access 2000中文版高级编程(part1)

    10.2.3 使用联合查询以显示一个或所有记录 263 10.2.4 在子窗体中使用SQL的UNION语句查询所有记录 266 10.2.5 在组合框控件外显示组合框的列 268 10.2.6 根据用户的输入添加新的组合框选项 271 10.3 使用本机的...

    Access 2000数据库系统设计(PDF)---001

    814.6.2 选择显示格式 834.6.3 使用输入掩码 874.7 使用Northwind Traders示例数据库 884.8 向现有的数据库添加一个新表 904.8.1 设计Personnel Actions表 914.8.2 创建Personnel Actions表 934.8.3 在数据表视图中...

    Access 2000数据库系统设计(PDF)---018

    23610.8.3 基于表中被选定的记录进行计算 23810.9 设计参数查询 24010.9.1 向月销售量查询添加一个参数 24010.9.2 指定参数的数据类型 24110.10 创建交叉表查询 24210.10.1 使用向导生成一个季度产品销售交叉表查询 ...

    Access 2000数据库系统设计(PDF)---011

    23610.8.3 基于表中被选定的记录进行计算 23810.9 设计参数查询 24010.9.1 向月销售量查询添加一个参数 24010.9.2 指定参数的数据类型 24110.10 创建交叉表查询 24210.10.1 使用向导生成一个季度产品销售交叉表查询 ...

    Access 2000数据库系统设计(PDF)---002

    814.6.2 选择显示格式 834.6.3 使用输入掩码 874.7 使用Northwind Traders示例数据库 884.8 向现有的数据库添加一个新表 904.8.1 设计Personnel Actions表 914.8.2 创建Personnel Actions表 934.8.3 在数据表视图中...

    Access 2000数据库系统设计(PDF)---020

    23610.8.3 基于表中被选定的记录进行计算 23810.9 设计参数查询 24010.9.1 向月销售量查询添加一个参数 24010.9.2 指定参数的数据类型 24110.10 创建交叉表查询 24210.10.1 使用向导生成一个季度产品销售交叉表查询 ...

    Access 2000数据库系统设计(PDF)---003

    814.6.2 选择显示格式 834.6.3 使用输入掩码 874.7 使用Northwind Traders示例数据库 884.8 向现有的数据库添加一个新表 904.8.1 设计Personnel Actions表 914.8.2 创建Personnel Actions表 934.8.3 在数据表视图中...

    Access 2000数据库系统设计(PDF)---009

    814.6.2 选择显示格式 834.6.3 使用输入掩码 874.7 使用Northwind Traders示例数据库 884.8 向现有的数据库添加一个新表 904.8.1 设计Personnel Actions表 914.8.2 创建Personnel Actions表 934.8.3 在数据表视图中...

    Access 2000数据库系统设计(PDF)---012

    23610.8.3 基于表中被选定的记录进行计算 23810.9 设计参数查询 24010.9.1 向月销售量查询添加一个参数 24010.9.2 指定参数的数据类型 24110.10 创建交叉表查询 24210.10.1 使用向导生成一个季度产品销售交叉表查询 ...

Global site tag (gtag.js) - Google Analytics