szhswl
宋針還的個人空間
BlogJava
首頁
新隨筆
新文章
聯系
管理
<
2025年5月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
blog是收集資料并且作為技術交流的平臺,發布一些本人常用資料或開發經驗,希望能和大家一起討論、進步。
訪問統計
留言簿
(6)
給我留言
查看公開留言
查看私人留言
我參與的團隊
牛虻(0/0)
隨筆檔案
(8)
2008年12月 (1)
2008年7月 (1)
2007年12月 (6)
文章分類
(149)
ACEGI(6)
EXT(9)
FLEX(2)
HIBERNATE(2)
IBATIS(1)
JAVA(9)
JAVASCRIPT(28)
JQUERY(1)
ORACLE(4)
Python(2)
SOA文章(1)
SPRING(1)
SQL(13)
冷讀術
反向代理(3)
存儲過程(2)
常見問題(4)
開發測試工具(4)
搜索引擎(8)
操作系統(8)
服務器(1)
笑話(37)
經典語錄(3)
緩存技術
新聞分類
(1)
鐵血軍事(1)
相冊
上海
北京
家鄉
廣東廣州
廣東深圳
河北邢臺
浙江杭州
福建廈門
蓮花山滑雪場
長春
長春凈月潭
長春牡丹花展
黑龍江哈爾濱
收藏夾
(21)
EXT網站實例(8)
JAVA問題收藏(13)
友情鏈接
lpj的博客
三生石的博客
中文愛百科
莊陸的博客
狼的博客
我的鏈接
JAVA開源大全
我的收藏文章
搜索
積分與排名
積分 - 150066
排名 - 415
最新評論
1.?re: VSFTP配置手冊[未登錄]
太謝謝了,學習了
--隨風逝
2.?re: 選用ibatis和hibernate的區別
充分說明了面對關系數據庫ORM也是那樣的無力
--秦磊
3.?re: 選用ibatis和hibernate的區別[未登錄]
確實寫的不錯哦!很好很強大,,如果能在總結一點SSH 框架的整合的話我就覺得更完美了。。。。
--小文
4.?re: 選用ibatis和hibernate的區別
hibernate還沒有開始學呢,唉
--王鵬飛
5.?re: js觸發彈出層
有用!
--將風度養成
閱讀排行榜
1.?Java性能調優工具(6746)
2.?glassfish與tomcat一些測試數據對比(4916)
3.?搜索引擎(compass)學習筆記(3061)
4.?oracle的char類型對空格的怪異處理(2187)
5.?glassfish數據庫連接池備份日志(2011)
評論排行榜
1.?Java性能調優工具(11)
2.?glassfish與tomcat一些測試數據對比(5)
3.?搜索引擎(compass)學習筆記(4)
4.?oracle的char類型對空格的怪異處理(3)
5.?一個女程序員的男友需求說明書(1)
使用模板模式簡化DAO操作Hibernate
相信使用過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模板:
1
package
kick.hibernate;
2
3
import
net.sf.hibernate.HibernateException;
4
import
net.sf.hibernate.Session;
5
import
net.sf.hibernate.Transaction;
6
7
public
class
HibernateTemplate
{
8
public
static
Object run(HibernateCallback callback)
throws
HibernateException
{
9
Session session
=
null
;
10
Transaction tx
=
null
;
11
try
{
12
session
=
HibernateSessionutil.currentSession();
13
tx
=
session.beginTransaction();
14
Object result
=
callback.execute(session);
15
tx.commit();
16
session.flush();
17
return
result;
18
}
catch
(HibernateException e)
{
19
tx.rollback();
20
return
null
;
21
}
finally
{
22
HibernateSessionutil.closeSession();
23
}
24
}
25
這里類很簡單,就是使用一個實現HibernateCallBack接口的一個回掉類,在調用的時候根據具體的需求實現HibernateCallBack類。
2.回掉接口HibernateCallBack:
1
package
kick.hibernate;
2
3
import
net.sf.hibernate.HibernateException;
4
import
net.sf.hibernate.Session;
5
6
public
interface
HibernateCallBack
{
7
Object execute(Session session)
throws
HibernateException;
8
}
好了,到此為止我們就可以使用這個模板了,可以用如下的方式使用:
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的方法。代碼如下:
1
package
kick.hibernate;
2
3
import
java.io.Serializable;
4
5
import
net.sf.hibernate.HibernateException;
6
import
net.sf.hibernate.Session;
7
8
public
class
HibernateSupport
{
9
10
public
Object save(
final
Object object)
throws
HibernateException
{
11
return
HibernateTemplate.run(
new
HibernateCallBack()
{
12
13
public
Object execute(Session session)
throws
HibernateException
{
14
session.save(object);
15
return
null
;
16
}
17
18
}
);
19
}
20
public
Object save(
final
Object object,
final
Serializable id)
throws
HibernateException
{
21
return
HibernateTemplate.run(
new
HibernateCallBack()
{
22
23
public
Object execute()
throws
HibernateException
{
24
session.save(object,id);
25
return
null
;
26
}
27
28
}
);
29
}
30
31
public
Object saveOrUpdate(
final
Object object)
throws
HibernateException
{
32
return
HibernateTemplate.run(
new
HibernateCallBack()
{
33
34
public
Object execute(Session session)
throws
HibernateException
{
35
session.saveOrUpdate(object);
36
return
null
;
37
}
38
39
}
);
40
}
41
……………………………………………………………………………………
42
……………………………………………………………………………………
43
……………………………………………………………………………………
44
調用一些其他的session的方法。
}
4.抽象RootDao:
該類為抽象類,在實現自己的DAO類的時候繼承該類。該類的有一個HibernateSupport的對象,在子類中使用getHibernateTemplate()方法就可以得到該對象,然后調用它對應的方法。實現代碼如下:
1
package
kick.hibernate.dao;
2
3
import
net.sf.hibernate.Session;
4
import
kick.hibernate.HibernateTemplateImpl;
5
6
public
abstract
class
RootDao
{
7
private
HibernateSupport temp
=
null
;
8
9
/** */
/**
10
*
@return
Returns the temp.
11
*/
12
public
HibernateTemplateImpl getHibernateTemplate(Session session)
{
13
return
new
HibernateSupport();
14
}
15
}
5.使用例子:
定義一個自己的DAO類,實現代碼如下:
public class UserDaoImpl extends RootDao implements UserDaoInterface{
public void saveUser(User user) throws KickException {
getHibernateTemplate().saveOrUpdate(user);
}
……………………………………………………………………………………
實現其他的方法
……………………………………………………………………………………
}
---------------------------------------------------------------------------------------------------------------------------------
說人之短,乃護己之短。夸己之長,乃忌人之長。皆由存心不厚,識量太狹耳。能去此弊,可以進德,可以遠怨。
http://www.tkk7.com/szhswl
------------------------------------------------------------------------------------------------------ ----------------- ---------
posted on 2007-12-05 18:49
宋針還
閱讀(395)
評論(2)
編輯
收藏
所屬分類:
HIBERNATE
FeedBack:
#
re: 使用模板模式簡化DAO操作Hibernate
2008-12-25 11:26 |
yangtao
寫的很不錯 我轉載在我的blog上了 想來你會同意的吧
回復
更多評論
#
re: 使用模板模式簡化DAO操作Hibernate
2011-06-24 11:10 |
hoohoney
總結的太好了,不過RootDao作為主要作用是為了可以直接來調用HibernateSupport對象,那么
getHibernateTemplate(Session session) 方法就沒必要加參數,
些類中的HibernateSupport temp = null;屬性也就沒用了,不知道為什么加上,有其它目的?
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
使用模板模式簡化DAO操作Hibernate
優化hibernate性能的幾點建議
Copyright ©2025 宋針還 Powered By
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
在线成人a毛片免费播放
|
aⅴ免费在线观看
|
亚洲成a人一区二区三区
|
久久夜色精品国产噜噜亚洲a
|
无码国产精品一区二区免费
|
亚洲综合区图片小说区
|
在线观看www日本免费网站
|
亚洲电影在线免费观看
|
可以免费看黄的网站
|
中文字幕无码亚洲欧洲日韩
|
永久免费观看的毛片的网站
|
国产av无码专区亚洲av毛片搜
|
亚洲无码在线播放
|
美女被cao网站免费看在线看
|
亚洲伦另类中文字幕
|
91精品免费在线观看
|
亚洲午夜福利在线视频
|
国产精品jizz在线观看免费
|
暖暖免费中文在线日本
|
国产精品亚洲精品日韩已满
|
国产精品视频免费
|
亚洲.国产.欧美一区二区三区
|
亚洲国产成人乱码精品女人久久久不卡
|
亚洲国产人成精品
|
美女视频黄的免费视频网页
|
亚洲性猛交xx乱
|
国产高清在线精品免费软件
|
999zyz**站免费毛片
|
亚洲欧洲国产精品久久
|
日本牲交大片免费观看
|
野花香在线视频免费观看大全
|
久久精品国产亚洲77777
|
黄a大片av永久免费
|
久久99精品免费一区二区
|
亚洲手机中文字幕
|
亚洲精品成人区在线观看
|
久久精品人成免费
|
美女羞羞喷液视频免费
|
久久亚洲AV成人无码软件
|
免费a级毛片18以上观看精品
|
久久99热精品免费观看动漫
|