]]>关于Spring中利用Hibernate作ؓDAO的简?/title>http://www.aygfsteel.com/anticlockwise/archive/2006/03/09/34429.html举止优雅的猪举止优雅的猪Thu, 09 Mar 2006 02:36:00 GMThttp://www.aygfsteel.com/anticlockwise/archive/2006/03/09/34429.htmlhttp://www.aygfsteel.com/anticlockwise/comments/34429.htmlhttp://www.aygfsteel.com/anticlockwise/archive/2006/03/09/34429.html#Feedback2http://www.aygfsteel.com/anticlockwise/comments/commentRss/34429.htmlhttp://www.aygfsteel.com/anticlockwise/services/trackbacks/34429.html在暑假里看了“Refactoring to Patterns”这本书Q觉得很不错。里边讲C很多在优化编码时可以用到的设计模式以及它们的用法?BR> 我在~程Ӟ一般都是用Spring作ؓ中间层管理资源,而用Hibernate作ؓORM。用qSpring的h都知道Spring对Hibernate的支持方法较多,我常用的是直接承HibernateDaoSupportcR我们先来看一个类图: 在是我在应用中常用到的类l构。因为对于一个域模型来说Q最基本的就是CRUD操作Q所以将其放在Dao接口中,但是对于每个不同的域模型又有其特有的ҎQ则其攑֜域模型对应的接口QSomeSpecificDaoQ中?BR> q样Q对于最基本的CRUD操作可以只需在BaseHibernateDao中实玎ͼq一点利用了Template Method设计模式。对于create(), delete()和modify()三个Ҏ都可以简单实玎ͼ卌用HibernateTemplate中相应的Ҏ。对于findAll和findByIdQ则可以借住Java的反来实现。这里如果要利用反射且达到通用的目的,需要将所有的域模型放在一个包中,q且有相同的命名规则Q比如说如果域模型叫做UserQ那么相应的Dao应该以User开_不过q也是常用的Ҏ。下面给Z段代码
/** * A convenience and generic method for retrieving all models from the database * @throws DataAccessException */ public List findAll() throws DataAccessException { // TODO Auto-generated method stub List models =new ArrayList(); try{ models = getHibernateTemplate().loadAll( Class.forName(getClass().getName().replaceAll( "HibernateDao", "").replaceAll("dao.hibernate", "model"))); }catch (ClassNotFoundException exception) { // TODO Auto-generated catch block exception.printStackTrace(); } return models; }