国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

使用模板模式簡化DAO操作Hibernate

2024-07-21 02:15:10
字體:
來源:轉載
供稿:網友
  相信使用過spring + hibernate開發過的人,在寫dao的時候都使用過spring的hibernatedaosupport類,然后在實現的時候就可以很輕松的使用gethibernatetemplate()方法之后就可以調用save()、delete()、update()等hibernate的session的操作,很簡單。比如:

gethibernatetemplate().save(user);


  這樣一句話在我們沒有spring的時候就必須使用如下的代碼才能完成:

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);
}
…………………………………………
實現其他的方法
…………………………………………
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 林州市| 新建县| 安西县| 安庆市| 高青县| 开封市| 西乌| 弥勒县| 临西县| 盐亭县| 临洮县| 富顺县| 南投县| 治多县| 神农架林区| 格尔木市| 阿克苏市| 彰武县| 塔城市| 墨玉县| 洪湖市| 岚皋县| 德惠市| 湖口县| 顺平县| 启东市| 弋阳县| 嘉禾县| 白银市| 庄浪县| 山丹县| 五河县| 孝昌县| 屏南县| 漠河县| 天柱县| 宣武区| 凤阳县| 曲沃县| 中牟县| 湄潭县|