我实现的一个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:抛砖引玉,大家要是有更好的方法的话,可以拿出来共享一下,提高代码质量、加快开发速度。
?
5 楼 stworthy 2008-09-08 异常都给你拦截了,只是简单的printStackTrace,对调用者不负责任。 6 楼 aninfeel 2008-09-08 org.apache.commons.dbutils.BeanProcessor,真是好东西。我还一直用beanutil 7 楼 mycybyb 2008-09-12 自己也实现了个类似的东东 8 楼 Ethan 2008-09-14 个人认为写这样的Util类,意义不大。很显然然你只是能够运行,却没有对资源的管理,资源管理居然和操作行为耦合在一起了!建议还是先把Java EE的层次结构弄清楚,这样设计出来的东西不会出现这么低级的失误! 9 楼 donyee 2008-09-28 Ethan 写道个人认为写这样的Util类,意义不大。很显然然你只是能够运行,却没有对资源的管理,资源管理居然和操作行为耦合在一起了!建议还是先把Java EE的层次结构弄清楚,这样设计出来的东西不会出现这么低级的失误!
竟然没有看懂,管理什么资源啊,缓存查询结果吗?这些没有 10 楼 Ethan 2008-10-06 donyee 写道Ethan 写道
个人认为写这样的Util类,意义不大。很显然然你只是能够运行,却没有对资源的管理,资源管理居然和操作行为耦合在一起了!建议还是先把Java EE的层次结构弄清楚,这样设计出来的东西不会出现这么低级的失误!
竟然没有看懂,管理什么资源啊,缓存查询结果吗?这些没有
服了你了!难道你使用数据库仅仅是连上就用的吗?不考虑Connection资源的管理?怎么获取,怎么管理,什么时候释放?还有就是事务的管理,这都需要一个系统的而且严谨的架构来管理,并不是随便写个Util类就能够搞定的。其次,Util类也是一个程序中最难以管控的东西,谁知道你写了这个类?是不是你写一个Util类就要广播一次啊!没有听到的同事想实现这么一个功能的话很有可能自己又一拍大腿写一个重复的出来啊!
所以建议,在Framework的选择上多花功夫,不是能用就行了! 11 楼 donyee 2008-10-06 Ethan 写道
donyee 写道Ethan 写道
个人认为写这样的Util类,意义不大。很显然然你只是能够运行,却没有对资源的管理,资源管理居然和操作行为耦合在一起了!建议还是先把Java EE的层次结构弄清楚,这样设计出来的东西不会出现这么低级的失误!
竟然没有看懂,管理什么资源啊,缓存查询结果吗?这些没有
服了你了!难道你使用数据库仅仅是连上就用的吗?不考虑Connection资源的管理?怎么获取,怎么管理,什么时候释放?还有就是事务的管理,这都需要一个系统的而且严谨的架构来管理,并不是随便写个Util类就能够搞定的。其次,Util类也是一个程序中最难以管控的东西,谁知道你写了这个类?是不是你写一个Util类就要广播一次啊!没有听到的同事想实现这么一个功能的话很有可能自己又一拍大腿写一个重复的出来啊!
所以建议,在Framework的选择上多花功夫,不是能用就行了!
实现中用DataSource来获取连接的,我是用c3po来做的
事务有两者方式:参数有Connection的是调用者自己控制;参数无Connection的话,操作结束就提交事务
这些我都说明了啊!
12 楼 yuxianghong 2008-10-07 以前看过这个类似的结构。 13 楼 donyee 2008-10-07 yuxianghong 写道
以前看过这个类似的结构。
这个轮子蛮实用的。
我这有一半是原创的
有个关键功能就是jdbc参数设置是从apache的dbutil源码学来的
ResultSet--Bean反射是用org.apache.commons.dbutils.BeanProcessor处理的
14 楼 tongjian 2008-10-08 用spring提供的jdbc支持就好了阿。感觉比你写的这个工具类使用还简单呢!