翠湖月色
No Buddha tree at all,And bright mirror nor.Now nothing at all,How dusts any more ?
首頁
新隨筆
聯系
聚合
管理
隨筆 - 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)
基礎編程篇(9)
所感所悟(25)
報表設計與開發(12)
數據庫(Sql server,My sql)(3)
數據結構與算法設計(9)
有關網絡(5)
雜錄(29)
經典視聽(12)
網站應用(6)
腳本語言及頁面設計(8)
軟件測試技術(8)
閱讀筆記(9)
收藏夾
開源項目(2)
編程開發(3)
網絡應用(2)
My Favorite Web Sites
CSDN Java 頻道
IBM developerWorks中國
Java開源大全
J道:Java解決之道
SpringFramwork中文論壇
中國萬維網聯盟論壇
中文Java學習網站-孫衛琴版主
中文Java技術主力站點-JR論壇
綠色軟件下載-霏凡軟件站
蝙蝠英語學習網
名Bloger
Martin Fowler's blog
No1
算法研究、C/C++
月光博客
非著名Bloger
willing的Blog
德賢Blog
放水老倌
搜索
積分與排名
積分 - 202423
排名 - 285
最新評論
1.?re: Jasperreport連續打印多個報表模板-原創
您好博主,多個jasper報表文件合并輸出pdf文件了,請問頁碼和總頁數怎么設置?謝謝!
--飛燕
2.?re: FckEditor上傳音頻視頻[未登錄]
樓主可以將此代碼共享出來呀 既然這么多人要!
--hello
3.?re: FckEditor上傳音頻視頻
能不能發一份fck支持上傳,播放視頻的給我,我急用!
--張德強
4.?re: Struts2 select標簽值從數據庫讀取,再提交給action
公司打個
--飛灑地方
5.?re: Jasperreport連續打印多個報表模板-原創
多謝,解決了我的問題
--黃曉潔
Learn Spring in spring(三)-轉貼
三、spring中的hibernate開發
Bromon原創?請尊重版權
spring中對hibernate的支持是非常強大的,從一個簡單的例子就看得出來,從這個例子中我們還將對所謂的輕量級容器做一些討論。
首先需要配置數據源,通常我們有兩種方式獲得Connection,一是自己編寫代碼獲得連接,二是從JNDI環境中得到DataSource,然后產生一個Connection。無論怎樣,既然是spring下面的對象,就應該注冊到配置文件中。假設我們需要一個連接mysql下面一個叫做examer的數據庫,手動方式的配置是:
<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數據源,那么dataSource的聲明就應該是:
<bean?id=
"dataSource"
?
class
=
"org.springframework.jndi.JndiObjectFactoryBean"
>
<property?name=
"jndiName"
>
<value>java:compenvjdbcspringExamer</value>
</property>
</bean>
你需要在JNDI環境中綁定一個名為jdbc/springExamer的東西,這段代碼才有實際意義。另外需要提醒的是,所有的bean聲明,它的id必須是唯一的。
在本系統中,數據庫操作是被hibernate封裝起來的,所以dataSource是不需要注入到具體的邏輯類中,它只會被注給hibernate的sessionFactory。
按照常規思路,我們需要在spring中注冊hibernate的sessionFactory,它應該是我們自己編寫的一個類,獲得dataSource,返回sessionFactory,其他的邏輯類通過這個sessionFactory獲得session進行數據庫操作。
但是我們有另外一種選擇,spring直接提供了對sessionFactory的封裝,你只需要注冊一個spring自己的類,給它提供必須的屬性,它會返回一個org.springframework.orm.hibernate.HibernateTemplate,這個類封裝了add、del等操作,它的封裝程度相當高,通過它來編寫hibernate應用非常簡單。但是問題出來了,我們該如何選擇?
表面上看,使用spring自己的庫無疑更加簡單,但是請注意,spring是一個輕量級的框架,所謂輕量級,一個重要特征就是無侵入性,也就是你使用這套框架,不會被它綁定,被spring管理的類,應該不需要使用它的接口和抽象類,這樣你的系統不會對spring產生依賴。但是如果你使用了spring封裝的方式去操作hibernate,就必須繼承org.springframework.orm.hibernate.support.HibernateDaoSupport類,這導致了綁定。所以做這樣的選擇是有點痛苦的,如果有一天spring框架不存在了,你的代碼怎么升級維護?具體問題只能具體分析,在我們的應用中,完全使用了spring封裝的HibernateTemplate,它太好用了,所以容易上癮。
假設我們有一張student表,結構很簡單:
id 自動增長
name varchar(40)
password varchar(32)
grade????
int
(4) 年級
sex
Boolean
性別(true為男,false為女)
設計一個Student類來映射這張表:
/*
?*?創建日期?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知道如何去關聯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文件會被全部加載。
一切都準備就緒,現在我們要加入一個StudentManager類,來進行增刪查改的操作:
/*
?*?創建日期?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);
//插入一條數據只需要這一行代碼
????}
}
該類只演示了如何增加一個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>
所有的配置都完成了,下面做單元測試:
/*
?*?創建日期?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已經將hibernate的操作簡化到了非常高的程度,最關鍵的是整個開發可以由設計來驅動,如果一個團隊對spring有足夠的熟悉,那么完全可以由設計師規劃所有的類,整理清楚類之間的關系,寫成配置文件,然后編寫hibernate映射文件,將數據表與pojo關聯,成員就可以完全在設計方案內工作,利用spring封裝好的hibernate模版,開發起來速度非常快,調試也很容易。它能夠解決如何在團隊內貫徹設計方案的問題。
由于本文不講解hibernate的使用,所以相關內容請查閱hibernate文檔。
posted on 2006-12-14 11:31
matthew
閱讀(246)
評論(0)
編輯
收藏
所屬分類:
JavaEE
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
Struts2 select標簽值從數據庫讀取,再提交給action
jbpm3插件的中文亂碼問題
FckEditor編輯器添加對話框的內容
動態載入jsp頁面到指定頁面的區域
在線編輯器FCKeditor2.6中文亂碼-解決過程
Struts的標簽使用(1)
中文漢字GB2312和UTF-8的編碼轉換程序(轉)
轉載:js技巧收集(200多個) 3
轉載:js技巧收集(200多個) 2
轉載:js技巧收集(200多個) 1
Copyright ©2025 matthew Powered by:
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
亚洲国产成人久久综合碰碰动漫3d
|
久久乐国产精品亚洲综合
|
9久久免费国产精品特黄
|
亚洲情a成黄在线观看动漫尤物
|
久草在视频免费福利
|
国产亚洲福利精品一区二区
|
亚洲VA中文字幕无码一二三区
|
亚洲国产高清在线
|
欧美好看的免费电影在线观看
|
日本一区二区在线免费观看
|
久久亚洲精精品中文字幕
|
日韩a级毛片免费观看
|
久久99毛片免费观看不卡
|
亚洲第一成年网站视频
|
亚洲精品高清国产一线久久
|
永久久久免费浮力影院
|
免费视频精品一区二区三区
|
亚洲人配人种jizz
|
久久久久一级精品亚洲国产成人综合AV区
|
18禁无遮挡无码国产免费网站
|
免费国产高清毛不卡片基地
|
亚洲精品日韩专区silk
|
亚洲日本一区二区一本一道
|
曰批全过程免费视频在线观看
|
中国一级毛片免费看视频
|
亚洲熟妇无码八V在线播放
|
亚洲色精品aⅴ一区区三区
|
青青青青青青久久久免费观看
|
97视频免费观看2区
|
WWW国产成人免费观看视频
|
亚洲色中文字幕在线播放
|
亚洲视频在线观看网站
|
在线A亚洲老鸭窝天堂
|
暖暖日本免费在线视频
|
18禁无遮挡无码国产免费网站
|
99免费在线视频
|
成人免费网站视频www
|
在线观看国产一区亚洲bd
|
亚洲性色高清完整版在线观看
|
亚洲第一AV网站
|
亚洲一区二区三区乱码A
|