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開源大全
我的收藏文章
搜索
積分與排名
積分 - 149987
排名 - 415
最新評論
1.?re: VSFTP配置手冊[未登錄]
太謝謝了,學習了
--隨風逝
2.?re: 選用ibatis和hibernate的區別
充分說明了面對關系數據庫ORM也是那樣的無力
--秦磊
3.?re: 選用ibatis和hibernate的區別[未登錄]
確實寫的不錯哦!很好很強大,,如果能在總結一點SSH 框架的整合的話我就覺得更完美了。。。。
--小文
4.?re: 選用ibatis和hibernate的區別
hibernate還沒有開始學呢,唉
--王鵬飛
5.?re: js觸發彈出層
有用!
--將風度養成
閱讀排行榜
1.?Java性能調優工具(6745)
2.?glassfish與tomcat一些測試數據對比(4915)
3.?搜索引擎(compass)學習筆記(3061)
4.?oracle的char類型對空格的怪異處理(2186)
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
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
igao激情在线视频免费
|
免费国产污网站在线观看15
|
丝袜足液精子免费视频
|
成人免费看吃奶视频网站
|
国产L精品国产亚洲区久久
|
亚洲成在人线中文字幕
|
美女被爆羞羞网站在免费观看
|
日本免费高清视频
|
免费中文字幕在线
|
亚洲人成人77777在线播放
|
在线观看免费无码视频
|
又粗又大又猛又爽免费视频
|
亚洲网站在线播放
|
久久一区二区三区免费
|
亚洲av午夜成人片精品电影
|
亚洲欧美国产国产一区二区三区
|
久久久99精品免费观看
|
久久精品国产精品亚洲艾草网美妙
|
亚洲日韩精品国产3区
|
av无码久久久久不卡免费网站
|
久久精品国产亚洲AV果冻传媒
|
夜夜爽妓女8888视频免费观看
|
日日AV拍夜夜添久久免费
|
亚洲精品一区二区三区四区乱码
|
一出一进一爽一粗一大视频免费的
|
亚洲人成国产精品无码
|
美女裸免费观看网站
|
亚洲福利中文字幕在线网址
|
亚洲欧美国产日韩av野草社区
|
99久久久精品免费观看国产
|
精品国产无限资源免费观看
|
亚洲国产精品张柏芝在线观看
|
麻豆最新国产剧情AV原创免费
|
亚洲美国产亚洲AV
|
亚洲免费精彩视频在线观看
|
国产乱码免费卡1卡二卡3卡
|
曰韩无码AV片免费播放不卡
|
亚洲AV无码一区二区三区人
|
国产亚洲精品拍拍拍拍拍
|
免费视频专区一国产盗摄
|
久久久久女教师免费一区
|