|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
还有就是总有人问我到底该学习什么语言,什么语言有前途,那么我的回答是不论是C,C++,java,.net,ruby,asp或是其他语言都可以学,编程的关键不是语言,而是思想。模板 信任利用过Spring+Hibernate开辟过的人,在写DAO的时分都利用过Spring的HibernateDaoSupport类,然后在完成的时分就能够很轻松的利用getHibernateTemplate()办法以后就能够挪用save()、delete()、update()等Hibernate的Session的操纵,很复杂。好比:
getHibernateTemplate().save(user);
如许一句话在我们没有Spring的时分就必需利用以下的代码才干完成:
Sessionsession=HibernateUtil.getSession();
Transactiontx=session.beginTransaction();
session.save(user);
tx.commit();
HibernateUtil.colseSession();
这里还省往了非常处置,同时利用了HibernateUtil类来简化从SessionFactory猎取Session,和封闭Session等处置。
可是我们在利用Hibernate的时分纷歧定会利用Spring,以是我们能够仿照Spring的处置体例,做一个Hibernate的模板,利用模板形式来简化我们的开辟,其次要的目标就是为了简化开辟,使代码到达最诳言的重用。
1.我们现来完成一个Hibernate模板:
packagekick.hibernate;
importnet.sf.hibernate.HibernateException;
importnet.sf.hibernate.Session;
importnet.sf.hibernate.Transaction;
publicclassHibernateTemplate{
publicstaticObjectrun(HibernateCallbackcallback)throwsHibernateException{
Sessionsession=null;
Transactiontx=null;
try{
session=HibernateSessionutil.currentSession();
tx=session.beginTransaction();
Objectresult=callback.execute(session);
tx.commit();
session.flush();
returnresult;
}catch(HibernateExceptione){
tx.rollback();
returnnull;
}finally{
HibernateSessionutil.closeSession();
}
}
这里类很复杂,就是利用一个完成HibernateCallBack接口的一个回失落类,在挪用的时分依据详细的需务实现HibernateCallBack类。
2.回失落接口HibernateCallBack:
packagekick.hibernate;
importnet.sf.hibernate.HibernateException;
importnet.sf.hibernate.Session;
publicinterfaceHibernateCallBack{
Objectexecute(Sessionsession)throwsHibernateException;
}
好了,到此为止我们就能够利用这个模板了,能够用以下的体例利用:
HibernateTemplate.run(newHibernateCallback(){
publicObjectexecute(Sessionsession)throwsHibernateException{
session.save(user);
returnnull;
}
});
看看,是否是省往了良多代码?
不外这还没有到达想Spring内里那样复杂,不要发急,“面包会有的”,我们会到达的。
3.完成我们本人的HibernateSupport类
从下面的代码能够看出,我们要本人完成HibernateCallback接口,而每次我们完成的时分又反复代码了。因而我们再笼统,讲这些完成放到我们的HibernateSupport类内里往。看看我们下面的代码就晓得我们完成HibernateCallback接口的目标就是为了挪用session.save()办法,即session的办法。代码以下:(点击检察附件)
4.笼统RootDao:
该类为笼统类,在完成本人的DAO类的时分承继该类。该类的有一个HibernateSupport的对象,在子类中利用getHibernateTemplate()办法就能够失掉该对象,然后挪用它对应的办法。完成代码以下:
packagekick.hibernate.dao;
importnet.sf.hibernate.Session;
importkick.hibernate.HibernateTemplateImpl;
publicabstractclassRootDao{
privateHibernateSupporttemp=null;
/**
*@returnReturnsthetemp.
*/
publicHibernateTemplateImplgetHibernateTemplate(Sessionsession){
returnnewHibernateSupport();
}
}
5.利用例子:
界说一个本人的DAO类,完成代码以下:
publicclassUserDaoImplextendsRootDaoimplementsUserDaoInterface{
publicvoidsaveUser(Useruser)throwsKickException{
getHibernateTemplate().saveOrUpdate(user);
}
…………………………………………
完成其他的办法
…………………………………………
}
Java到底会发战成什么样,让我们拭目以待吧,我始终坚信着java会更好。以上都是俺个人看法,欢迎大家一起交流. |
|