周末和 MIKE 吃饭的时候,他询问,上次提说的问题,什么时候能写出来。“对Session和Transaction的处理,最好单独实现一个模板类来统一做”
温故 居于常规的Hibernate的DAO代码。例子做一个Create操作
这段代码怎么样? 假如这样的代码会出现在你的每一个DAO的每一个方法里面(除了SessionFactory建议写成一个方法,因为你只需要一个实例)你能接受吗?只说try catch 就够你写的。
如果代码在每个地方都出现。那么我想就可以抽离出来。做成一个模板。具体该怎么做呢?今天我打算谈三种比较成熟的做法。
① 采用Spring提供的模板功能
② 自己实现一个功能相当的模板
③ 其他可借鉴的实现
采用Spring提供的模板功能
看代码:
比起上面的代码,现在简单多了吧?其实该做的事情都做了,只不过是被Spring封装起来了。大致跟踪一下Spring的SourceCode的实现。
1) 在抽象类HibernateDaoSupport中有一个方法getHibernateTemplate()。通过getHibernateTemplate()得到一个HibernateTemplate对象。
2) 在HibernateDaoSupport中有两个方法。通过他们来的到这个 HibernateTemplate对象
3)
4)
到这里,感觉还不错吧? 要是你没有打算使用Spring呢?这种优势不就没有了吗?那到未必,既然都有得“抄袭”拉!就自己弄一个吧!
自己实现一个功能相当的模板
不容易描述清楚,就用简单的代码来说明吧。
上面的DAO实现还有代码风格都不推荐大家学习。实现一个优秀的DAO框架没这么简单。这种做法我没有在真实项目中检验过,不确定,会不会有其他问题。因为这里我只是为了简单的表述HibernateTemplate思想的实现。只要理解了这种思想,相信你能写出更好更完美的实现。如果有更好的主意或者建议请Email告诉我。
其他可借鉴的实现
《深入浅出Hibernate》采用hibernatesynchronizer生成基础代码的方式,架构自己的持久层。作者自己实现了一个相似功能的HibernateTemplate和HibernateCallback接口。有兴趣的话可以去研究一下。
这种能直接生成基础代码的方式很不错。比起Spring我还是觉得麻烦了很多。而且我也还没时间去全面玩这个插件(据说,有提供一些成熟的模板方式生成,我只玩过默认的生成方式)。
2005-12-6 SCSCHINA New Office
Powered by: BlogJava Copyright © Goingmm