翠湖月色
No Buddha tree at all,And bright mirror nor.Now nothing at all,How dusts any more ?
首頁
新隨筆
聯(lián)系
聚合
管理
隨筆 - 251 文章 - 504 trackbacks - 0
<
2006年12月
>
日
一
二
三
四
五
六
26
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
本博客系個人收集材料及學習記錄之用,各類“大俠”勿擾!
留言簿
(14)
給我留言
查看公開留言
查看私人留言
隨筆分類
JavaEE(36)
Linux與Unix(6)
Web Services and SOA(16)
WordPress或PHP(1)
人文歷史(17)
名詞解釋(2)
品讀英語(18)
基礎(chǔ)編程篇(9)
所感所悟(25)
報表設(shè)計與開發(fā)(12)
數(shù)據(jù)庫(Sql server,My sql)(3)
數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(9)
有關(guān)網(wǎng)絡(luò)(5)
雜錄(29)
經(jīng)典視聽(12)
網(wǎng)站應(yīng)用(6)
腳本語言及頁面設(shè)計(8)
軟件測試技術(shù)(8)
閱讀筆記(9)
收藏夾
開源項目(2)
編程開發(fā)(3)
網(wǎng)絡(luò)應(yīng)用(2)
My Favorite Web Sites
CSDN Java 頻道
IBM developerWorks中國
Java開源大全
J道:Java解決之道
SpringFramwork中文論壇
中國萬維網(wǎng)聯(lián)盟論壇
中文Java學習網(wǎng)站-孫衛(wèi)琴版主
中文Java技術(shù)主力站點-JR論壇
綠色軟件下載-霏凡軟件站
蝙蝠英語學習網(wǎng)
名Bloger
Martin Fowler's blog
No1
算法研究、C/C++
月光博客
非著名Bloger
willing的Blog
德賢Blog
放水老倌
搜索
積分與排名
積分 - 202396
排名 - 285
最新評論
1.?re: Jasperreport連續(xù)打印多個報表模板-原創(chuàng)
您好博主,多個jasper報表文件合并輸出pdf文件了,請問頁碼和總頁數(shù)怎么設(shè)置?謝謝!
--飛燕
2.?re: FckEditor上傳音頻視頻[未登錄]
樓主可以將此代碼共享出來呀 既然這么多人要!
--hello
3.?re: FckEditor上傳音頻視頻
能不能發(fā)一份fck支持上傳,播放視頻的給我,我急用!
--張德強
4.?re: Struts2 select標簽值從數(shù)據(jù)庫讀取,再提交給action
公司打個
--飛灑地方
5.?re: Jasperreport連續(xù)打印多個報表模板-原創(chuàng)
多謝,解決了我的問題
--黃曉潔
Learn Spring in spring(三)-轉(zhuǎn)貼
三、spring中的hibernate開發(fā)
Bromon原創(chuàng)?請尊重版權(quán)
spring中對hibernate的支持是非常強大的,從一個簡單的例子就看得出來,從這個例子中我們還將對所謂的輕量級容器做一些討論。
首先需要配置數(shù)據(jù)源,通常我們有兩種方式獲得Connection,一是自己編寫代碼獲得連接,二是從JNDI環(huán)境中得到DataSource,然后產(chǎn)生一個Connection。無論怎樣,既然是spring下面的對象,就應(yīng)該注冊到配置文件中。假設(shè)我們需要一個連接mysql下面一個叫做examer的數(shù)據(jù)庫,手動方式的配置是:
<bean?id=
"dataSource"
?
class
=
"org.apache.commons.dbcp.BasicDataSource"
?destroy-method=
"close"
>
<property?name=
"driverClassName"
>
<value>com.mysql.jdbc.
Driver
</value>
</property>
<property?name=
"url"
>
<value>jdbc:mysql:
//localhost/examer</value>
</property>
<property?name=
"username"
>
<value>root</value>
</property>
<property?name=
"password"
>
<value></value>
</property>
</bean>
很好讀是不是?假如我們使用JNDI數(shù)據(jù)源,那么dataSource的聲明就應(yīng)該是:
<bean?id=
"dataSource"
?
class
=
"org.springframework.jndi.JndiObjectFactoryBean"
>
<property?name=
"jndiName"
>
<value>java:compenvjdbcspringExamer</value>
</property>
</bean>
你需要在JNDI環(huán)境中綁定一個名為jdbc/springExamer的東西,這段代碼才有實際意義。另外需要提醒的是,所有的bean聲明,它的id必須是唯一的。
在本系統(tǒng)中,數(shù)據(jù)庫操作是被hibernate封裝起來的,所以dataSource是不需要注入到具體的邏輯類中,它只會被注給hibernate的sessionFactory。
按照常規(guī)思路,我們需要在spring中注冊hibernate的sessionFactory,它應(yīng)該是我們自己編寫的一個類,獲得dataSource,返回sessionFactory,其他的邏輯類通過這個sessionFactory獲得session進行數(shù)據(jù)庫操作。
但是我們有另外一種選擇,spring直接提供了對sessionFactory的封裝,你只需要注冊一個spring自己的類,給它提供必須的屬性,它會返回一個org.springframework.orm.hibernate.HibernateTemplate,這個類封裝了add、del等操作,它的封裝程度相當高,通過它來編寫hibernate應(yīng)用非常簡單。但是問題出來了,我們該如何選擇?
表面上看,使用spring自己的庫無疑更加簡單,但是請注意,spring是一個輕量級的框架,所謂輕量級,一個重要特征就是無侵入性,也就是你使用這套框架,不會被它綁定,被spring管理的類,應(yīng)該不需要使用它的接口和抽象類,這樣你的系統(tǒng)不會對spring產(chǎn)生依賴。但是如果你使用了spring封裝的方式去操作hibernate,就必須繼承org.springframework.orm.hibernate.support.HibernateDaoSupport類,這導致了綁定。所以做這樣的選擇是有點痛苦的,如果有一天spring框架不存在了,你的代碼怎么升級維護?具體問題只能具體分析,在我們的應(yīng)用中,完全使用了spring封裝的HibernateTemplate,它太好用了,所以容易上癮。
假設(shè)我們有一張student表,結(jié)構(gòu)很簡單:
id 自動增長
name varchar(40)
password varchar(32)
grade????
int
(4) 年級
sex
Boolean
性別(true為男,false為女)
設(shè)計一個Student類來映射這張表:
/*
?*?創(chuàng)建日期?2005-3-17
?*/
package
?net.bromon.spring.examer.pojo;
/**
?*?@author?Bromon
?*/
public
?
class
?Student?
{
????
private
?
int
?id;
????
private
?
String
?name;
????
private
?
String
?password;
????
private
?
int
?grade;
//年級
????
private
?
boolean
?sex;
????
????getset方法……….
}
編寫Student.hbm.xml,讓hibernate知道如何去關(guān)聯(lián)student表和Student類,該文件和Student.java在同一目錄:
<hibernate-mapping>
<
class
?name=
"net.bromon.spring.examer.pojo.Student"
?table=
"student"
>
<id?name=
"id"
?column=
"id"
>
<generator?
class
=
"identity"
/>
</id>
????????
<property?name=
"name"
?column=
"name"
?/>
<property?name=
"password"
?column=
"password"
?/>
<property?name=
"grade"
?column=
"grade"
?/>
<property?name=
"sex"
?column=
"sex"
?/>
</
class
>
</hibernate-mapping>
然后我們可以在spring中配置sessionFactory:
<bean?id=
"sessionFactory"
class
=
"org.springframework.orm.hibernate.LocalSessionFactoryBean"
>
<property?name=
"dataSource"
>
<ref?bean=
"dataSource"
/>
</property>
????????
<property?name=
"hibernateProperties"
>
<props>
<prop?key=
"hibernate.dialect"
>net.sf.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
????????
<property?name=
"mappingDirectoryLocations"
>
<list>
<value>classpath:/netbromonspringexamerpojo</value>
</list>
</property>
</bean>
其中引用了我們之前注冊過的dataSource,mappingDirectoryLocations屬性指明了.hbm.xml文件在哪里路徑,該文件夾下面的.hbm.xml文件會被全部加載。
一切都準備就緒,現(xiàn)在我們要加入一個StudentManager類,來進行增刪查改的操作:
/*
?*?創(chuàng)建日期?2005-3-17
?*/
package
?net.bromon.spring.examer.student;
import
?net.bromon.spring.examer.pojo.Student;
import
?org.springframework.orm.hibernate.HibernateTemplate;
import
?org.springframework.orm.hibernate.LocalSessionFactoryBean;
import
?org.springframework.orm.hibernate.support.HibernateDaoSupport;
/**
?*?@author?Bromon
?*/
public
?
class
?StudentManager?
extends
?HibernateDaoSupport
{
????
private
?LocalSessionFactoryBean?sessionFactory;
????
private
?HibernateTemplate?ht;
????
public
?StudentManager()
????{
????????
this
.ht=
super
.getHibernateTemplate();
????}
????
????
public
?
void
?add(Student?s)
????{???
????????ht.save(s);
//插入一條數(shù)據(jù)只需要這一行代碼
????}
}
該類只演示了如何增加一個Student,HibernateTemplate還封裝了很多有用的方法,請查閱spring文檔。StudentManager中的sessionFactory是由spring注入的,但是StudentManager并沒有對sessionFactory做任何的處理,這是因為所有的處理都被HibernateDaoSupport.getHibernateTemplate()封裝。整個StudentManager中也看不到任何的異常處理,他們也都被基類封裝了。
最后一個步驟就是在spring中注冊StudentManger,然后向它注入sessionFactory:
<bean?id=
"studentManager"
?
class
=
"net.bromon.spring.examer.student.StudentManager"
>
<property?name=
"sessionFactory"
>
<ref?bean=
"sessionFactory"
/>
</property>
</bean>
所有的配置都完成了,下面做單元測試:
/*
?*?創(chuàng)建日期?2005-3-17
?*/
package
?net.bromon.spring.examer.student.test;
import
?java.io.
FileInputStream
;
import
?org.springframework.beans.factory.xml.XmlBeanFactory;
import
?org.springframework.context.ApplicationContext;
import
?org.springframework.context.support.ClassPathXmlApplicationContext;
import
?net.bromon.spring.examer.pojo.Student;
import
?net.bromon.spring.examer.student.StudentManager;
import
?junit.framework.
TestCase
;
/**
?*?@author?Bromon
?*/
public
?
class
?TestStudentManager?
extends
?
TestCase
?{
????
public
?
void
?testAdd()?
????{
????????
try
????????{
????????????ApplicationContext?context?=
new
?ClassPathXmlApplicationContext(
"springConfig.xml"
);
????????????
????????????Student?s=
new
?Student();
????????????s.setName(
"bromon"
);
????????????s.setPassword(
"123"
);
????????????s.setGrade(3);
????????????s.setSex(
true
);
????????????
????????????((StudentManager)context.getBean(
"studentManager"
)).add(s);
????????}
catch
(
Exception
?e)
????????{
????????????e.printStackTrace();
????????}
????}
}
Spring已經(jīng)將hibernate的操作簡化到了非常高的程度,最關(guān)鍵的是整個開發(fā)可以由設(shè)計來驅(qū)動,如果一個團隊對spring有足夠的熟悉,那么完全可以由設(shè)計師規(guī)劃所有的類,整理清楚類之間的關(guān)系,寫成配置文件,然后編寫hibernate映射文件,將數(shù)據(jù)表與pojo關(guān)聯(lián),成員就可以完全在設(shè)計方案內(nèi)工作,利用spring封裝好的hibernate模版,開發(fā)起來速度非常快,調(diào)試也很容易。它能夠解決如何在團隊內(nèi)貫徹設(shè)計方案的問題。
由于本文不講解hibernate的使用,所以相關(guān)內(nèi)容請查閱hibernate文檔。
posted on 2006-12-14 11:31
matthew
閱讀(246)
評論(0)
編輯
收藏
所屬分類:
JavaEE
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(guān)文章:
Struts2 select標簽值從數(shù)據(jù)庫讀取,再提交給action
jbpm3插件的中文亂碼問題
FckEditor編輯器添加對話框的內(nèi)容
動態(tài)載入jsp頁面到指定頁面的區(qū)域
在線編輯器FCKeditor2.6中文亂碼-解決過程
Struts的標簽使用(1)
中文漢字GB2312和UTF-8的編碼轉(zhuǎn)換程序(轉(zhuǎn))
轉(zhuǎn)載:js技巧收集(200多個) 3
轉(zhuǎn)載:js技巧收集(200多個) 2
轉(zhuǎn)載:js技巧收集(200多個) 1
Copyright ©2025 matthew Powered by:
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
免费一级不卡毛片
|
免费一级毛suv好看的国产网站
|
亚洲av无码专区青青草原
|
国产精品美女午夜爽爽爽免费
|
亚洲精品国产福利在线观看
|
小草在线看片免费人成视久网
|
亚洲夜夜欢A∨一区二区三区
|
香蕉免费看一区二区三区
|
精品亚洲成α人无码成α在线观看
|
美女视频黄频a免费观看
|
免费国产成人高清视频网站
|
国产成人精品亚洲一区
|
免费观看亚洲人成网站
|
一级视频在线免费观看
|
亚洲色偷拍另类无码专区
|
大地影院MV在线观看视频免费
|
自拍偷自拍亚洲精品被多人伦好爽
|
国产日韩AV免费无码一区二区三区
|
亚洲精品亚洲人成在线观看
|
国内精品一级毛片免费看
|
亚洲精品美女视频
|
最近中文字幕无吗高清免费视频
|
亚洲AⅤ男人的天堂在线观看
|
亚洲精选在线观看
|
99国产精品永久免费视频
|
亚洲国产成人无码AV在线
|
亚洲成a人一区二区三区
|
国产高潮久久免费观看
|
亚洲精品一级无码鲁丝片
|
h视频在线观看免费
|
久久亚洲中文字幕精品有坂深雪
|
国产亚洲精品xxx
|
97性无码区免费
|
国产精品亚洲一区二区三区
|
91麻豆国产自产在线观看亚洲
|
玖玖在线免费视频
|
亚洲国产熟亚洲女视频
|
综合久久久久久中文字幕亚洲国产国产综合一区首
|
99久久免费观看
|
国产亚洲欧美在线观看
|
欧洲亚洲国产清在高
|