亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Spring和Hibernate數(shù)據(jù)訪問技術(shù)研究與應用

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

        程顯生,郭艷光

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

        0 引言

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

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

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

        1.1 Spring 容器框架

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

        1.2 Hibernate對象持久化框架

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

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

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

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

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

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

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

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

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

        1)Dao.xml文件的編寫

        <!-- 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"/>

        <objectid="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>

        ……

        <object id="HibernateTransactionManager"

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

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

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

        </object>

        <object 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 -->

        …..

        <objectid="MemberINFDao" type="Fire.GXDY.Dao.NHibernate.HibernateMemberINFDao,Fire.GXDY.Dao.NHibernate">

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

        </object>

        </objects>

        2)數(shù)據(jù)訪問對象DAO接口編寫

        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ù)實體的CURD操作編寫。

        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)映射文件的編寫

        <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)實例注入編寫

        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)屬性和方法封裝并序列化給客戶端

        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ù)的原理和特點并結(jié)合實際的實例,實現(xiàn)業(yè)務實體層、數(shù)據(jù)實體層、數(shù)據(jù)訪問層及映射文件的定義、維護等操作。利用Spring的依賴注入技術(shù)創(chuàng)建和定義數(shù)據(jù)訪問對象DAO和接口,實現(xiàn)業(yè)務邏輯的編寫,提供統(tǒng)一的數(shù)據(jù)訪問功能;利用Hibernate的對象關(guān)系映射ORM將數(shù)據(jù)對象與數(shù)據(jù)實體聯(lián)系,實現(xiàn)數(shù)據(jù)持久化操作。

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

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

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

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

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

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

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

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

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

        猜你喜歡
        數(shù)據(jù)庫系統(tǒng)
        Smartflower POP 一體式光伏系統(tǒng)
        WJ-700無人機系統(tǒng)
        ZC系列無人機遙感系統(tǒng)
        北京測繪(2020年12期)2020-12-29 01:33:58
        基于PowerPC+FPGA顯示系統(tǒng)
        半沸制皂系統(tǒng)(下)
        連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
        數(shù)據(jù)庫
        財經(jīng)(2017年15期)2017-07-03 22:40:49
        數(shù)據(jù)庫
        財經(jīng)(2017年2期)2017-03-10 14:35:35
        數(shù)據(jù)庫
        財經(jīng)(2016年15期)2016-06-03 07:38:02
        數(shù)據(jù)庫
        財經(jīng)(2016年3期)2016-03-07 07:44:46
        最近日本免费观看高清视频| 日韩人妻精品视频一区二区三区| 亚洲av午夜精品无码专区| 国产特级毛片aaaaaaa高清| 午夜一级在线| 国产目拍亚洲精品二区| 手机在线观看日韩不卡av| 五月综合激情婷婷六月色窝| 91国际视频| 国产大学生自拍三级视频| 漂亮人妻被强了完整版| 亚洲综合欧美在线一区在线播放| 国产91福利在线精品剧情尤物| 日本一区二区高清视频在线| 亚洲精品在线国产精品| 50岁熟妇的呻吟声对白| 免费一区二区三区视频狠狠| 亚洲女同性恋第二区av| 无码熟妇人妻av在线影片最多| 曰本极品少妇videossexhd| www.av在线.com| 极品美女调教喷水网站| 无人区一码二码三码四码区 | 色88久久久久高潮综合影院| 色偷偷av亚洲男人的天堂| jk制服黑色丝袜喷水视频国产| 午夜免费观看国产视频| 中文字幕乱码亚洲精品一区| 一级二级中文字幕在线视频| 男女视频网站免费精品播放| 无码熟妇人妻av在线网站| 麻神在线观看免费观看| 亚洲日韩一区二区一无码| 久久久伊人影院| 国产精品又污又爽又色的网站| 国产精品天干天干| 大学生被内谢粉嫩无套| 一区二区三区蜜桃在线视频| 爆操丝袜美女在线观看| 97se亚洲国产综合自在线观看| 成人无码视频|