999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Spring和Hibernate數(shù)據(jù)訪問(wèn)技術(shù)研究與應(yīng)用

2011-02-09 01:57:52程顯生郭艷光
制造業(yè)自動(dòng)化 2011年5期
關(guān)鍵詞:數(shù)據(jù)庫(kù)系統(tǒng)

程顯生,郭艷光

(內(nèi)蒙古農(nóng)業(yè)大學(xué)職業(yè)技術(shù)學(xué)院 信息管理系,包頭 014109)

0 引言

目前,在企業(yè)應(yīng)用開(kāi)發(fā)環(huán)境中,面向?qū)ο箝_(kāi)發(fā)方法成為主流。數(shù)據(jù)持久化工作是不可或缺的部分,而且也是面向?qū)ο箝_(kāi)發(fā)方法研究的主要方面。在應(yīng)用程序開(kāi)發(fā)中,三層體系結(jié)構(gòu)模式能更靈活、更快速地開(kāi)發(fā)強(qiáng)大的網(wǎng)絡(luò)應(yīng)用程序系統(tǒng)。三層體系結(jié)構(gòu)模式主要包括表示層、中間邏輯層和數(shù)據(jù)訪問(wèn)層。表示層是提供給用戶(hù)的交互界面,便于客戶(hù)理解;中間邏輯層包括業(yè)務(wù)規(guī)則層、業(yè)務(wù)實(shí)體層和系統(tǒng)框架層。數(shù)據(jù)訪問(wèn)層是定義、維護(hù)、訪問(wèn)和更新數(shù)據(jù),也稱(chēng)該層為持久層。

在三層體系結(jié)構(gòu)模式中,業(yè)務(wù)規(guī)則層是驗(yàn)證業(yè)務(wù)實(shí)體是否對(duì)相應(yīng)的數(shù)據(jù)有訪問(wèn)權(quán)限,確保整個(gè)系統(tǒng)的底層安全。業(yè)務(wù)實(shí)體層是利用Spring 應(yīng)用接口提供對(duì)各個(gè)業(yè)務(wù)實(shí)體進(jìn)行數(shù)據(jù)訪問(wèn)功能,相當(dāng)于為數(shù)據(jù)庫(kù)的數(shù)據(jù)包裝了一層殼,增加數(shù)據(jù)庫(kù)訪問(wèn)的統(tǒng)一性,提高整個(gè)系統(tǒng)的安全性。系統(tǒng)框架層是讀取和設(shè)置整個(gè)系統(tǒng)的配置信息,記錄和管理系統(tǒng)日志,提供統(tǒng)一的底層功能。數(shù)據(jù)訪問(wèn)層是為業(yè)務(wù)層提供數(shù)據(jù)訪問(wèn)功能,作為數(shù)據(jù)庫(kù)與業(yè)務(wù)層的接口,通過(guò)Hibernate的ORM元素,把對(duì)象持久化到關(guān)系數(shù)據(jù)庫(kù)中。

1 Spring和Hibernate技術(shù)原理及特點(diǎn)

1.1 Spring 容器框架

Spring是指一個(gè)用于構(gòu)造Java應(yīng)用程序的輕量級(jí)容器框架,它的核心基于“控制反轉(zhuǎn)(Inversion of Control,IoC)”原理。IoC是一種將組件依賴(lài)關(guān)系的創(chuàng)建和管理置于程序外部的技術(shù),它有另一個(gè)含義更明確的名字稱(chēng)“依賴(lài)注入(Dependency Injection,DI)”DI帶來(lái)的最大的好處一是消除連接應(yīng)用程序的各個(gè)部件而編寫(xiě)的大量代碼;二是將依賴(lài)配置外置并重新配置你的業(yè)務(wù)對(duì)象的依賴(lài)關(guān)系;三是提高可測(cè)試性,利用DI可以為數(shù)據(jù)訪問(wèn)對(duì)象(Date Access Object,DAO)創(chuàng)建一個(gè)模擬實(shí)現(xiàn),然后指導(dǎo)它傳遞給業(yè)務(wù)對(duì)象進(jìn)行測(cè)試;四是DI中所有的主要組件都是定義為接口的,這些接口已在DI容器創(chuàng)建并糅合到一起,開(kāi)發(fā)人員將精力集中建立業(yè)務(wù)邏輯,無(wú)需考慮業(yè)務(wù)的框架。

1.2 Hibernate對(duì)象持久化框架

Hibernate是“對(duì)象—關(guān)系映射(Object—Relational Mapping,ORM)模塊實(shí)現(xiàn)數(shù)據(jù)持久層的一個(gè)優(yōu)秀的Java組件。ORM元素主要功能是實(shí)現(xiàn)實(shí)體域?qū)ο蟮某志没⒎庋b[7]數(shù)據(jù)訪問(wèn)的細(xì)節(jié)。本文的黨員數(shù)據(jù)庫(kù)管理系統(tǒng)中主要通過(guò)DAO和ORM元素實(shí)現(xiàn)數(shù)據(jù)的持久化操作,如圖1所示。

圖1 通過(guò)DAO和ORM組件實(shí)現(xiàn)數(shù)據(jù)的持久化

DAO采用HibernateDaoSupport類(lèi)開(kāi)發(fā)。HibernateDaoSupport類(lèi)提供相關(guān)的屬性和

方法并進(jìn)行封裝。為此直接使用HibernateTemplate進(jìn)行數(shù)據(jù)對(duì)象的訪問(wèn)和操作。通過(guò)XML序列化和反序列化實(shí)現(xiàn)持久化數(shù)據(jù)對(duì)象的方法。XML序列化是將應(yīng)用程序數(shù)據(jù)對(duì)象的公共屬性和字段轉(zhuǎn)換為XML文檔以便存儲(chǔ)或傳輸。反序列化則是從 XML 輸出中重新創(chuàng)建原始狀態(tài)的對(duì)象,最終將反序列化的數(shù)據(jù)對(duì)象轉(zhuǎn)換為應(yīng)用程序數(shù)據(jù)。

2 數(shù)據(jù)庫(kù)管理系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)過(guò)程

2.1 數(shù)據(jù)庫(kù)管理系統(tǒng)的設(shè)計(jì)

本文建立的某高校黨員信息管理系統(tǒng),是選用SQL Server2005創(chuàng)建和管理數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)中的表主要存放黨員信息的表memberINF,主要包括人員編號(hào)、姓名、性別、民族、出生日期、入黨時(shí)間、黨內(nèi)職務(wù)、申請(qǐng)時(shí)間、培養(yǎng)時(shí)間、預(yù)審?fù)ㄟ^(guò)時(shí)間、支部大會(huì)通過(guò)時(shí)間等列名,該系統(tǒng)利用映射文件定義類(lèi)和屬性,類(lèi)和類(lèi)屬性映射到數(shù)據(jù)庫(kù)的表和表字段,即通過(guò)映射來(lái)表示不同的表關(guān)聯(lián)。因此,Hibernate就可以持久化這些類(lèi)和類(lèi)屬性到數(shù)據(jù)庫(kù)中并通過(guò)Hibernate的HQL語(yǔ)言實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的CRUD(Create/Read/Update/Delete)操作即實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的增加、修改、刪除等編輯操作。

2.2 數(shù)據(jù)庫(kù)管理系統(tǒng)的開(kāi)發(fā)過(guò)程

在黨員管理系統(tǒng)的開(kāi)發(fā)過(guò)程中,采用基于.NET版本的Spring編寫(xiě)數(shù)據(jù)訪問(wèn)層配置文件Dao.xml,完成數(shù)據(jù)訪問(wèn)層填充實(shí)體數(shù)據(jù)的序列化和接收客戶(hù)端數(shù)據(jù)實(shí)體,并提供給數(shù)據(jù)訪問(wèn)層;采用基于.NET版本的Hibernate數(shù)據(jù)訪問(wèn)層實(shí)現(xiàn)對(duì)實(shí)體定義,并完成Hibernate的最終數(shù)據(jù)實(shí)體化。同時(shí),Hibernate數(shù)據(jù)訪問(wèn)層主要通過(guò)Hibernate的映射文件完成數(shù)據(jù)庫(kù)表中數(shù)據(jù)相互轉(zhuǎn)化和持久化,最后完成數(shù)據(jù)的CRUD操作。下面以表memberINF為例,實(shí)現(xiàn)數(shù)據(jù)持久化的過(guò)程,具體過(guò)程如下:

1)Dao.xml文件的編寫(xiě)

<!-- Database and NHibernate Configuration -->

<db:provider id="DbProvider"provider="SqlServer-3.0" connectionString="Data Source=.;Integrated Security=false;Data base=PermissionBase;User ID=PB_DB_USER;Password=1234567890"/>

<o(jì)bjectid="NHibernateSessionFa ctory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate12">

<property name="DbProvider"ref="DbProvider"/>

<property name="MappingAssemblies">

<list>

<value>Fire.GXDY.Dao.NHibernate</value>

</list>

</property>

<property name="HibernateProperties">

<dictionary>

<entry key="hibernate.connection.provider"

value="NHibernate.Connection.DriverConnectionProvider"/>

</property>

……

<o(jì)bject id="HibernateTransactionManager"

type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate12">

<property name="DbProvider"ref="DbProvider"/>

<property name="SessionFactory" ref="NHibern ateSessionFactory"/>

</object>

<o(jì)bject id="HibernateTemplate" type="Spring.Data.NHibernate.HibernateTemplate">

<property name="SessionFactory"ref="NHibernateSessionFactory" />

<property name="TemplateFlushMode"value="Auto" />

<property name="CacheQueries" value="true" />

</object>

<!-- Data Access Objects -->

…..

<o(jì)bjectid="MemberINFDao" type="Fire.GXDY.Dao.NHibernate.HibernateMemberINFDao,Fire.GXDY.Dao.NHibernate">

<property name="HibernateTemplate"ref="HibernateTemplate"/>

</object>

</objects>

2)數(shù)據(jù)訪問(wèn)對(duì)象DAO接口編寫(xiě)

public interface IMemberINF

{

MemberINF FindById(string Id);

IList FindAll();

IList FindByDepartmnetId(string id);

MemberINF Save(MemberINF member);

MemberINF SaveOrUpdate(MemberINF member);

void Delete(MemberINF member);

}

3)數(shù)據(jù)實(shí)體的CURD操作編寫(xiě)。

public MemberINF FindById(string Id)

{

HibernateTemplate.SessionFactory.EvictQueries("MemberINF");

HibernateTemplate.SessionFactory.Close();

HibernateTemplate.SessionFactory.OpenSession();

return HibernateTemplate.Load(typeof(MemberINF), Id) as MemberINF;

}

public IList FindAll()

{

HibernateTemplate.SessionFactory.EvictQueries("MemberINF");

HibernateTemplate.SessionFactory.Close();

HibernateTemplate.SessionFactory.OpenSession();

return HibernateTemplate.LoadAll(typeof(MemberINF));

}

……

public void Delete(MemberINF member)

{

HibernateTemplate.SessionFactory.EvictQueries("MemberINF");

HibernateTemplate.Delete(member);

}

4)映射文件的編寫(xiě)

<hibernate-mapping xmlns="urn:nhibernatemapping-3.2" namespace="Fire.GXDY.Daomain"assembly="Fire.GXDY.Dao">

<class name="MemberINF" table="MemberINF"proxy="MemberINF">

<cache usage="read-write" />

<id name="Id" column="ID" type="String"length="15">

<generator class="assigned" />

</id>

<property name="Name" type="String">

<column name="Name" length="20" notnull="false"/>

</property>

<property name="Sex" type="String">

<column name="Sex" length="2" notnull="false"/>

</property>

<property name="Nation" type="String">

<column name="Nation" length="20" notnull="false"/>

</property>

……

5)實(shí)例注入編寫(xiě)

public interface IMemberINFSrv

{

void DeleteMemberINF(string id);

System.Collections.IList GetAllMemberINF();

System.Collections.IList FindByDepartmnetId(string id);

Fire.GXDY.Daomain.MemberINF GetMemberINFById(string id);

string InsertMemberINF(Fire.GXDY.Daomain.MemberINF member);

string UpdateMemberINF(Fire.GXDY.Daomain.MemberINF member);

}

6)屬性和方法封裝并序列化給客戶(hù)端

public class MemberINFSrv:Fire.GXDY.Service.IMemberINFSrv

{

private IMemberINF memberINFDao;

public IMemberINF MemberINFDao

{

get { return memberINFDao; }

set { memberINFDao = value; }

}

……

public string InsertMemberINF(MemberINF member)

{

if (member != null)

{

MemberINF tempMember = MemberINFDao.FindById(member.Id);

if (tempMember != null&&tempMember.Id.Length>0) return "-2";

member.Id = IdGen.GetNextId(typeof(MemberINF));

member.Department = DepartmentDao.FindById(member.DepartmentId);

MemberINFDao.Save(member);

return "1";

}

return "-1";

}

3 結(jié)論

本文主要介紹了Spring和Hibernate技術(shù)的原理和特點(diǎn)并結(jié)合實(shí)際的實(shí)例,實(shí)現(xiàn)業(yè)務(wù)實(shí)體層、數(shù)據(jù)實(shí)體層、數(shù)據(jù)訪問(wèn)層及映射文件的定義、維護(hù)等操作。利用Spring的依賴(lài)注入技術(shù)創(chuàng)建和定義數(shù)據(jù)訪問(wèn)對(duì)象DAO和接口,實(shí)現(xiàn)業(yè)務(wù)邏輯的編寫(xiě),提供統(tǒng)一的數(shù)據(jù)訪問(wèn)功能;利用Hibernate的對(duì)象關(guān)系映射ORM將數(shù)據(jù)對(duì)象與數(shù)據(jù)實(shí)體聯(lián)系,實(shí)現(xiàn)數(shù)據(jù)持久化操作。

Hibernate作為當(dāng)今新興的、最受人矚目的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù),提供了一種很好的數(shù)據(jù)持久層解決方案,使得開(kāi)發(fā)人員真正從繁重的代碼編寫(xiě)工作中解脫出來(lái),極大地提高了開(kāi)發(fā)效率和項(xiàng)目質(zhì)量。Spring利用控制反轉(zhuǎn)、依賴(lài)注入特征使你能夠編寫(xiě)更干凈、更可管理、并且更易于測(cè)試的代碼。

[1] 張千,王華東.基于三層結(jié)構(gòu)的船舶辦公自動(dòng)化系統(tǒng)的設(shè)計(jì)梁鴻[J].微計(jì)算機(jī)應(yīng)用,2006,6.

[2] 郭鋒.Spring 從入門(mén)到精通[M].北京:清華大學(xué)出版社,2007:230-260.

[2] 榮林.基于Hibernate性能優(yōu)化研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(7):1739-1744.

[3] 陶勇.Hibernate ORM最佳實(shí)踐[M].北京:清華大學(xué)出版,2010:156-160.

[4] 嚴(yán)海.基于Struts Spring Hibernate框架構(gòu)建WEB應(yīng)用的設(shè)計(jì)與實(shí)現(xiàn)[D].西安科技大學(xué),2010:10-84.

[5] 劉壯.基于Spring+Hibernate的開(kāi)發(fā)方法研究及實(shí)例[D].吉林大學(xué),2005:32-38.

[6] 宮曌.基于開(kāi)源框架的CRM系統(tǒng)研究及開(kāi)發(fā)[D].中南大學(xué),2007:16-17.

[7] 高昂,衛(wèi)文學(xué).基于Hibernate與Struts框架的數(shù)據(jù)持久化應(yīng)用研究[J].計(jì)算機(jī)應(yīng)用,2005,25(12):2818-2819.

猜你喜歡
數(shù)據(jù)庫(kù)系統(tǒng)
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無(wú)人機(jī)系統(tǒng)
ZC系列無(wú)人機(jī)遙感系統(tǒng)
基于PowerPC+FPGA顯示系統(tǒng)
半沸制皂系統(tǒng)(下)
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)
主站蜘蛛池模板: 亚洲国产成人久久77| 欧美a网站| 无遮挡一级毛片呦女视频| 色欲国产一区二区日韩欧美| 亚洲一区无码在线| 天天综合色网| 在线国产三级| 色婷婷在线播放| 国产一区二区三区在线无码| 亚洲日本在线免费观看| 巨熟乳波霸若妻中文观看免费| 99热这里只有精品免费| 国产精品va| 国产精品亚洲va在线观看| 欧美精品aⅴ在线视频| 99久久精品免费看国产电影| 一区二区三区国产精品视频| 欧美日韩一区二区在线免费观看| 日韩欧美国产精品| 91福利片| 婷婷色婷婷| 色哟哟国产精品一区二区| 在线观看国产黄色| 亚洲天堂日韩av电影| 四虎永久免费网站| 日韩欧美国产区| 国产精品内射视频| 国产日韩欧美视频| 国产凹凸一区在线观看视频| 亚洲国产中文精品va在线播放 | 欧美精品v日韩精品v国产精品| 亚洲国产精品无码久久一线| 亚洲浓毛av| av无码久久精品| 伊人久热这里只有精品视频99| 国产精品亚洲欧美日韩久久| 国产v精品成人免费视频71pao| 99草精品视频| 18黑白丝水手服自慰喷水网站| 欧美日在线观看| 欧美va亚洲va香蕉在线| 国产精品成人AⅤ在线一二三四| 久久青青草原亚洲av无码| 欧美特级AAAAAA视频免费观看| 伦精品一区二区三区视频| 青青草久久伊人| 2024av在线无码中文最新| 国产一级毛片高清完整视频版| 高清免费毛片| 一级片一区| 亚洲第一黄色网| 草逼视频国产| 一级一级一片免费| 爱爱影院18禁免费| 国产老女人精品免费视频| 国产成人欧美| 人妻熟妇日韩AV在线播放| 在线高清亚洲精品二区| 午夜爽爽视频| 日本人妻一区二区三区不卡影院| 玖玖精品视频在线观看| 国产成在线观看免费视频 | 99久久亚洲综合精品TS| 国产综合欧美| 亚洲国产成人久久精品软件| 99re视频在线| 国产区免费| 毛片免费在线视频| 久99久热只有精品国产15| 鲁鲁鲁爽爽爽在线视频观看 | 欧美人与性动交a欧美精品| 免费大黄网站在线观看| 亚洲国模精品一区| 国产成人无码久久久久毛片| 日本成人在线不卡视频| 亚洲午夜天堂| 国产乱子精品一区二区在线观看| 综合人妻久久一区二区精品 | 成人午夜视频网站| 国产三级成人| 91极品美女高潮叫床在线观看| 国产精品三级av及在线观看|