设为首页 加入收藏

TOP

web应用dao层的开发经验小结
2014-11-24 02:29:21 】 浏览:4463
Tags:web 应用 dao 开发 经验 小结

框架用多了,也有些腻。虽然struts2,spring,hibernate,ibatis等等都是一些很优秀的框架。不过,发现很多框架的功能都没用到,感觉有些浪费啊!于是,想着是不是自己学习用过框架的思想,然后用传统的无框架来进行开发。

这两天利用路上两个小时的坐公车时间,思考了如何去开发dao层。总结如下:
1、使用模板模式来开发通用的jdbctemplate,简单的写了下jdbc模板类
Java代码
public class jdbctemplate { /** * 查找表对象列表 */ @suppresswarnings("unchecked") public list query(string sql, object[] args, basedao dao){ connection conn = null; preparedstatement ps = null; resultset rs = null; list list = new arraylist(); try { conn = dbutils.getconnectionbyc3p0(); ps = conn.preparestatement(sql); if(args!=null){ for(int i=0; i

在这个模板类中数据库连接没有直接关闭的原因,是为了之后的事务管理。当然,模板类肯定不能只是这两个方法,具体可以参考spring的jdbctemplate来进行模板类的开发。
basedao是个接口,完成rs到bean的映射,代码如下:
Java代码
public interface basedao { public t rowmapper(resultset rs);}

2、其它dao层类使用jdbctemplate来进行开发。下面举个简单的例子:
Java代码
public list findbysql(string sql, object[] objs) { return jt.query(sql, objs, new basedao() { public user rowmapper(resultset rs) { user user = new user (); try { user.setname(rs.getstring("name")); user.setid(rs.getint("id")); } catch (exception e) { e.printstacktrace(); } return user; } }); }

3、使用代理模式来进行事务的处理。下面是,关于业务代理类的代码,在里面进行了事务的开启,提交或者回滚。
Java代码
public class transactionproxy implements invocationhandler { private object targetobject; public object bind(object targetobject) { this.targetobject = targetobject; return proxy.newproxyinstance(targetobject.getclass().getclassloader(), targetobject.getclass().getinterfaces(), this); } public object invoke(object proxy, method method, object[] args) throws throwable { transactionmanager tm = dbutils.gettransactionmanager(); tm.begintransaction(); object result = null; try { result = method.invoke(targetobject, args); tm.committransaction(); } catch (exception e) { tm.rollbacktransaction(); } return result; }}

这种代理方式,前提是代理对象必须是相应的接口的实现。如果代理对象没有接口的话,可以利用第三方包cglib来实现对象的代理。

以上纯粹只是个人的经验之谈,作为自己的小小的记录。如有错漏,望提出。完整的代码在附件中,包含了一个数据库链接池的包和cglib包。

作者“oracle 高手,哈哈”

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java operate file or system bet.. 下一篇java同步多线程,火车票模型

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目