gethibernatetemplate().save(user);
session session = hibernateutil.getsession();
transaction tx = session.begintransaction();
session.save(user);
tx.commit();
hibernateutil.colsesession();
  這里還省去了異常處理,同時使用了hibernateutil類來簡化從sessionfactory獲取session,以及關閉session等處理。
  但是我們在使用hibernate的時候不一定會使用spring,所以我們可以模仿spring的處理方式,做一個hibernate的模板,使用模板模式來簡化我們的開發,其主要的目的就是為了簡化開發,使代碼達到最大話的重用。
  1. 我們現來實現一個hibernate模板:
package kick.hibernate;
import net.sf.hibernate.hibernateexception;
import net.sf.hibernate.session;
import net.sf.hibernate.transaction;
public class hibernatetemplate{
public static object run(hibernatecallback callback) throws hibernateexception{
session session = null;
transaction tx = null;
try {
session = hibernatesessionutil.currentsession();
tx = session.begintransaction();
object result = callback.execute(session);
tx.commit();
session.flush();
return result;
} catch (hibernateexception e) {
tx.rollback();
return null;
} finally {
hibernatesessionutil.closesession();
}
}
  這里類很簡單,就是使用一個實現hibernatecallback接口的一個回掉類,在調用的時候根據具體的需求實現hibernatecallback類。
  2. 回掉接口hibernatecallback:
package kick.hibernate;
import net.sf.hibernate.hibernateexception;
import net.sf.hibernate.session;
public interface hibernatecallback {
object execute(session session)throws hibernateexception;
}
  好了,到此為止我們就可以使用這個模板了,可以用如下的方式使用:
hibernatetemplate.run(new hibernatecallback() {
public object execute(session session) throws hibernateexception {
session.save(user);
return null;
}
});
  看看,是不是省去了很多代碼?
  不過這還沒有達到想spring里面那樣簡單,不要著急,“面包會有的”,我們會達到的。
  3. 實現我們自己的hibernatesupport類
  從上面的代碼可以看出,我們要自己實現hibernatecallback接口,而每次我們實現的時候又重復代碼了。因此我們再抽象,講這些實現放到我們的hibernatesupport類里面去。看看我們上面的代碼就知道我們實現hibernatecallback接口的目的就是為了調用session.save()方法,即session的方法。代碼如下:(點擊查看附件)
  4. 抽象rootdao:
  該類為抽象類,在實現自己的dao類的時候繼承該類。該類的有一個hibernatesupport的對象,在子類中使用gethibernatetemplate()方法就可以得到該對象,然后調用它對應的方法。實現代碼如下:
package kick.hibernate.dao;
import net.sf.hibernate.session;
import kick.hibernate.hibernatetemplateimpl;
public abstract class rootdao {
private hibernatesupport temp = null;
/**
* @return returns the temp.
*/
public hibernatetemplateimpl gethibernatetemplate(session session) {
return new hibernatesupport();
}
}
  5. 使用例子:
  定義一個自己的dao類,實現代碼如下:
public class userdaoimpl extends rootdao implements userdaointerface{
public void saveuser(user user) throws kickexception {
gethibernatetemplate().saveorupdate(user); 
}
…………………………………………
實現其他的方法
…………………………………………
}
新聞熱點
疑難解答