




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
單元7
購物網站用戶留言模塊設計(JSP+Servlet+Hibernate)
面向對象是Java編程語言的特點,但在數據庫的編程中,操作對象為關系型數據庫,并不能對實體對象直接持久化,Hibernate通過ORM技術解決了這一問題。 Hibernate是Java應用和關系數據庫之間的橋梁,它負責Java對象和關系數據庫之間的映射。 Hibernate內部封裝了通過JDBC訪問數據庫的操作,向上層應用提供了面向對象的數據庫訪問API。
在基于MVC設計模式的JavaWeb應用程序中,Hibernate可以作為應用程序的數據訪問層或持久層。 Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC做了輕量級的封裝,使得Java程序員可以使用面向對象編程思想來操作數據庫。 Hibernate既可以在Java的客戶端程序中使用,也可以在JSP/Servlet的Web應用程序中使用,Hibernate可以在JavaEE中取代CMP(Container-ManagedPersistence),完成數據持久化的重任。
使用Hibernate對數據庫進行操作時,不必再編寫繁瑣的JDBC代碼,而是完全以面向對象的思想模式,通過Session接口對數據進行查、改、增、刪操作。【知識梳理】1.Hibernate簡介 Hibernate是一個開源的持久層框架,它就是位于數據庫和應用程序之間的各種ORM中間件,通過映射關系來協調持久對象與關系數據庫的交互,使開發者不必關心持久方面的問題,而專注于業務的開發。 Hibernate作為一個對象關系映射框架,本身對JDBC進行了簡單的對象封裝,開發人員便可以運用面向對象的編程思想來實現對數據庫的操作。 Hibernate具有以下優點。
①Hibernate可以大大提高開發效率。它封裝了數據庫的訪問細節,程序員可以免去編寫繁瑣的SQL語句,可以專注于業務邏輯的實現。只需要在映射文件中對關系進行定義,然后編寫少量的代碼,便可實現將實體與關系的維護,對象與關系的轉換工作由Hibernate實現。
②Hibernate使應用程序具有良好的移植性。Hibernate框架是輕量級、低侵入性的框架,對實體對象實現了透明持久化。當持久層框架發生改變時,例如,不再使用Hibernate框架,改為使用其他框架,那么不需要更改業務邏輯。
③Hibernate可以跨數據庫平臺,支持多種常用數據庫,如SQLServer、Oracle、MySQL等。使用Hibernate不必擔心底層數據庫的類型,當更換底層數據庫時,只需更改Hibernate的配置文件即可,而不需要更改程序的代碼。2.對象-關系映射
對象-關系映射(ObjectRelationalMapping,ORM)是一種為了解決面向對象與關系數據庫的相互匹配的技術,是隨著面向對象的軟件開發方法發展而產生的。3.數據持久化
(1)什么叫持久化?
持久化(Persistence),即把數據(如內存中的對象)保存到可永久保存的存儲設備中(如磁盤)。
持久化的主要應用是將內存中的數據存儲在關系型的數據庫中,當然也可以存儲在磁盤文件、XML數據文件中等。
(2)什么叫持久層?
持久化層(PersistenceLayer),即專注于實現數據持久化應用領域的某個特定系統的一個邏輯層面,將數據使用者和數據實體相關聯。
(3)為什么要持久化?增加持久層的作用是什么?
數據庫的讀寫是一個很耗費時間和資源的操作,當大量用戶同時直接訪問數據庫的時候,效率將非常低,如果將數據持久化就不需要每次從數據庫讀取數據,直接在內存中對數據進行操作,這樣就節約了數據庫資源,而且加快了系統的反應速度。
增加持久化層提高了開發的效率,使軟件的體系結構更加清晰,在代碼編寫和系統維護方面變得更容易。
特別是在大型的應用項目中會更有利。
同時,持久化層作為單獨的一層,人們可以為這一層獨立地開發一個軟件包,讓其實現將各種應用數據的持久化,并為上層提供服務。
從而使得各個企業里做應用開發的開發人員,不必再來做數據持久化的底層實現工作,而是可以直接調用持久化層提供的API。
數據持久化可以減少訪問數據庫的次數,增加應用程序執行速度;使代碼重用度提高,能夠完成大部分數據庫操作;使持久化不依賴于底層數據庫和上層業務邏輯實現。
更換數據庫時只需修改配置文件,而不需要修改業務邏輯代碼。4.Hibernate的常用接口 Hibernate的常用接口主要有Configuration接口、SessionFactory接口、Session接口、Transaction接口、Query接口和Criteria接口。
這6個核心接口在Hibernate框架中發揮著重要作用,使用這6個接口不僅可以獲取數據庫連接,對數據進行持久化操作,HQL查詢等,而且還可以對事務進行控制。(1)Configuration接口(2)SessionFactory接口(3)Session接口(4)Transaction接口(5)Query接口(6)Criteria接口5.Hibernate的運行原理
①Java應用程序首先調用Configuration類,該類讀取Hibernate配置文件和映射文件中的信息。
②Configuration類利用配置信息和映射信息生成一個SessionFactory對象。
③SessionFactory對象生成一個Session對象。
④Session對象生成一個Transaction對象。
⑤Session對象通過get()、load()、save()、update()、delete()和savaOrUpdate()等方
法對PO(PersistentObjects,持久化對象)進行加載、保存、更新、刪除等操作。圖7-1
Hibernate的運行原理圖6.Hibernate實例的3種狀態(1)臨時狀態(Transient)(2)持久化狀態(Persistent)(3)脫管狀態(Detached)7.Hibernate的映射文件
(1)Hibernate映射文件的基本概念 Hibernate映射文件是Hibernate的核心文件,用來把持久化對象與數據庫中的表、持久化對象之間的關系與數據庫表之間的關系、持久化對象的屬性與數據表字段一一映射起來。
(2)Hibernate映射文件應遵循的規則 Hibernate映射文件應遵循以下規則:
①映射文件名稱和對應的實體類名稱一致;
②映射文件和對應的實體類保存在同一個位置;
③映射文件必須在hibernate.cfg.xml文件中加載,通過<mapping>標簽的resource標簽可以實現加載。
(3)Hibernate映射文件的元素 Hibernate映射文件的根元素為<hibernate-mapping>,其他元素嵌入在該根元素中,其常用屬性主要有package屬性,用于指定包名。
通常情況下只有一個<class>元素,每個<class>元素可以有多個<property>子元素。
(4)<id>元素的主要屬性 <id>元素的主要屬性如下所示。
①name屬性:指定持久化類中的屬性名稱。
②column屬性:指定數據表中的字段名稱。
③type屬性:用于指定字段的類型,如integer、double、string等。
(5)常用內置主鍵生成策略 <id>元素的子元素<generator>用于配置數據表主鍵的生成策略,通過class屬性進行設置。常用內置主鍵生成策略如下所示。
①increment:由Hibernate以自增的方式生成,增量為1。
②identity:由底層數據庫生成,其前提是底層數據庫支持自增字段類型。
③sequence:Hibernate根據底層數據庫的序列生成,其前提條件是底層數據庫支持序列。
④hilo:Hibernate根據high/low算法生成。
⑤native:根據底層數據庫對自動生成標識符的支持能力,選擇identity、sequence或hilo作為內置主鍵。
⑥uuid:Hibernate采用128位的UUID(UniversalUniqueIdentitication)算法生成,該算法能夠在網絡環境生成唯一的字符串標識符,不推薦使用,因為字符串類型要比整型占用更多的數據庫空間。
⑦assigned:由Java應用程序負責生成,此時不能把setID()方法聲明為private類型,不推薦使用。
(6)<property>元素的常用配置屬性 <property>元素用于配置數據表中字段的屬性信息,通過該元素能夠詳細地對數據表的字段進行描述,其常用配置屬性如下所示。
①name:指定持久化類中的屬性名稱。
②column:指定數據表中的字段名稱。
③type:指定數據表中的字段類型。
④not-null:指定數據表字段的非空屬性,它是一個布爾值。
⑤length:指定數據表中的字段長度。
⑥unique:指定數據表字段值是否唯一,它是一個布爾值。
⑦lazy:設置延遲加載。8.Hibernate的配置文件 Hibernate的配置文件主要用來配置數據庫連接參數,如數據庫的驅動程序、URL、用戶名和密碼等。9.ThreadLocal簡介
在Hibernate框架的應用中,Session對象的管理非常重要,由于Session對象并非線程安全,稍有不慎將可能導致臟數據的產生。 ThreadLocal對象的以下3個方法可以對非線程安全的Session對象進行管理,從而解決了多線程間Session對象的共享沖突問題。(1)set()方法 set()方法用于將對象裝載到ThreadLocal對象中。其語法格式如下: publicvoidset(Tvalue)(2)get()方法 get()方法用于從ThreadLocal對象中獲取已裝載的對象。其語法格式如下: publicTget()(3)remove()方法 remove()方法用于移除ThreadLocal對象中裝載的對象。其語法格式如下: publicvoidremove()10.SessionFactory對象的創建過程
①Hibernate通過Configuration類加載Hibernate
的配置信息,主要是通過調用Configuration對象
的configure()方法來實現,默認情況下,Hibernate加載hibernate.cfg.xml文件。
②Hibernate的配置信息加載完畢后通過Configuration對象的buildSessionFactory()方法創建SessionFactory對象。11.Hibernate持久化對象對數據操作的流程
Hibernate持久化對象對數據操作的流程如圖7-2所示。圖7-2
Hibernate持久化對象對數據操作的流程12.Hibernate框架的Session接口加載
數據的方法 Hibernate框架的Session接口提供了兩個加載數據的方法,分別為get()和load(),它們都用于加載數據,兩者的區別如下所示。
①get()方法返回實際對象,當調用Session的get()方法時,Hibernate框架就會發出SQL語句進行查詢。
②load()方法返回對象的代理,當調用Session的load()方法時,Hibernate框架并不會立刻發出SQL語句進行查詢,只有在引用對象時,Hibernate框架才會發出SQL語句去查詢對象。13.HQL查詢語言 HQL(HibernateQueryLanguage)查詢語言是面向對象的查詢語言,其語法和SQL語法有些相似,功能十分強大。 SQL的操作對象是數據列、數據表等數據庫對象,而HQL的操作對象是類、實例、屬性等。(1)實現HQL查詢的步驟 HQL查詢依賴于Query類,每個Query實例對應一個查詢對象,使用HQL查詢按如下步驟進行:
①獲取HibernateSession對象;
②編寫HQL語句;
③以HQL語句作為參數,調用Session的createQuery方法創建查詢對象;
④如果HQL語句包含參數,則調用Query的setXxx()方法為參數賦;
⑤調用Query獨享的list()或uniqueResult()方法返回查詢結果列表。(2)HQL查詢的常用子句 HQL查詢的常用子句如下所示。
①HQL查詢的from子句。 from是最簡單的HQL語句,也是最基本的HQL語句,from關鍵字后緊跟持久化類的類名。
②HQL查詢的select子句。 select子句用于選擇指定的屬性或直接選擇某個實體,當然select選擇的屬性必須是from后持久化類包含的屬性。
③HQL查詢的where子句。 where子句主要用于篩選選中的結果,縮小選擇的范圍,例如:fromGoodsInfoasinfowhereinfo.goodsId<5。
④HQL查詢的orderby子句。 HQL查詢語言通過orderby子句實現對查詢結果集進行排序操作,還可以使用ASC或DESC關鍵字指定升序或者降序,例如:fromGoodsInfoasinfoorderbyinfo.goodsCodeDESC。
⑤HQL查詢的groupby子句。
在HQL查詢語言中,通常使用groupby子句進行分組操作,其使用方法與SQL語言相似,它也可以使用having關鍵字設置分組的條件。
⑥HQL查詢的聚集函數。
在HQL查詢語言中,支持常用聚合函數的使用,如avg(計算屬性的平均值)、count(統計選擇對象的數量)、max(統計屬性值的最大值)、min(統計屬性值的最小值)、sum(計算屬性值的總和)等,其使用方法與SQL基本相同。查詢數據表中的記錄數據,使用count(*)即可,例如:selectcount(*)fromGoodsInfoasinfo。14.Query接口 Query是Hibernate的一個面向對象的查詢接口,通過調用session.createQuery()生成Query的實例對象。
調用query.list()執行查詢,返回的查詢結果作為List對象存放,如果每一個查詢結果每行包含多個字段,則存放在Object[]數組中?!緫眉记伞?/p>
本單元的應用技巧如下所示。
①Hibernate框架中的多對一關聯關系映射、一對一關聯關系映射、繼承映射的正確使用。
②HQL查詢語句的正確使用。
③通過ThreadLocal對象解決Session對象的線程安全問題。
④通過Query對象的setParameter()方法對HQL語句進行動態賦值。
⑤同一個JSP頁面中包含兩個不同的表單,根據用戶登錄狀態顯示不同的表單內容。
⑥分頁查看留言信息。
⑦日期數據的格式化方法。
⑧在Servlet類中根據請求參數method值的不同,判斷業務請求類型并對其進行處理,分別執行不同的代碼。
⑨使用級聯更新的方法對回復信息進行持久化。
⑩將多個子類通過類繼承樹映射成一張表,然后配置鑒別器與子類的鑒別值?!经h境創設】
①下載與配置Hibernate。 Hibernate官方網站的網址是http://www.,在該網站上可以獲取Hibernate的最新版本的jar包及幫助文檔,本書所使用的Hibernate開發包為Hibernate4.1.8版本。圖7-3
Hibernate的支持類庫
②下載并安裝好數據庫管理系統SQLServer2008。
③在MicrosoftSQLServer2008的數據庫eshop
中創建本單元所需的多個數據表,“用戶表”
已在前面的單元中創建完成了,本單元只創建
“留言表”、“留言回復表”和“留言頭像”。字段名數據類型字段名數據類型留言IDint留言標題nvarchar(255)留言內容text留言時間date用戶IDint回復IDint表7-1“留言表”的結構信息字段名數據類型字段名數據類型回復IDint回復內容text回復時間date表7-2“留言回復表”的結構信息字段名數據類型字段名數據類型頭像IDint頭像地址nvarchar(50)表7-3“留言頭像”數據表的結構信息
④下載Servlet支持類庫servlet-api.jar和JDBC支持類庫sqljdbc4.jar。
⑤準備開發Web應用程序所需的圖片文件和JavaScript文件。
⑥在計算機的【資源管理器】中創建文件夾unit07。
⑦啟動Eclipse,設置工作空間為unit07,然后進入Eclipse的開發環境。
⑧在Eclipse集成開發環境中配置與啟動Tomcat服務器。
⑨新建動態Web項目,命名為project07。在
該Web項目中創建4個包,分別命名為“dao”、“model”、“servlet”和“util”。
⑩將Jar包文件servlet-api.jar和sqljdbc4.jar
復制到Web項目的文件夾“WebContent\
WEB-INF\lib”下,并在Eclipse集成開發環
境的“項目資源管理器”刷新各個Web項目?!救蝿彰枋觥俊救蝿?-1】綜合運用JSP、Servlet和Hibernate技術設計購物網站的留言模塊
購物網站中設置留言模塊,為用戶與網站之間的架起溝通橋梁,通過留言模塊,用戶可以反饋購物過程中出現的問題或者網站中存在的問題,提出自己的建議或意見,促使購物網進一步提高服務質量和效率。
設計購物網站的留言模塊,實現以下功能:(1)用戶注冊(2)用戶登錄(3)發表留言信息(4)回復留言(5)修改回復留言(6)刪除回復留言圖7-4購物網站中留言模塊的實現流程
留言模塊由4層結構組成,分別為表示層、業務邏輯層、持久層和數據庫層。
留言模塊主要有4個實體對象,分別為用戶實體、留言實體、回復信息實體和頭像實體,這些實體對象之間的關系如圖7-5所示。圖7-5實體對象及其關系
留言實體是4個實體對象的核心對象,其中留言與用戶之間是多對一的關系,一個用戶可以發表多條留言,留言與回復之間是一對一的關系,一條留言信息只能對應一條回復信息,用戶與頭像是一對一的關系,一個用戶只能對應一個頭像?!救蝿諏嵤俊揪W頁結構設計】
本單元的應用程序中主要包括用戶留言、回復留言和修改留言等頁面?!揪W頁CSS設計】
在DreamweaverCS6開發環境中創建6個CSS文件:common.css、style.cssbasecss、view.css、module.css、member.css。
這6個CSS文件具體的代碼見本書提供的電子資源?!眷o態網頁設計】 1.創建發表留言信息的靜態網頁message07.html
在DreamweaverCS6中創建靜態網頁message07.html,該網頁的初始HTML代碼如表1-5所示。
在網頁message07.html中<head>和</head>之間編寫如下所示的代碼,引入所需的CSS樣式文件。圖7-6網頁message07.html的瀏覽效果 2.創建回復留言的靜態網頁managerRevert07.html
在DreamweaverCS6中創建靜態網頁managerRevert07.html,該網頁的初始HTML代碼如表1-5所示。
在網頁managerRevert07.html中<head>和</head>之間編寫如下所示的代碼,引入所需的CSS樣式文件。
網頁managerRevert07.html的瀏覽效果如圖7-7所示。圖7-7網頁managerRevert07.html的瀏覽效果 3.創建靜態網頁viewMessage07.html
在DreamweaverCS6中創建靜態網頁viewMessage07.html,該網頁的初始HTML代碼如表1-5所示。
在網頁viewMessage07.html中<head>和</head>之間編寫如下所示的代碼,引入所需的CSS樣式文件。圖7-8網頁viewMessage07.html的瀏覽效果【網頁功能實現】 1.編寫perties配置文件 perties配置文件用于指定連接數據庫所需的配置信息,包括數據庫驅動、連接URL、用戶名、密碼和Hibernate方言等。 2.編寫hibernate.cfg.xml映射文件
在Eclipse的【項目資源管理器】的子文件夾“src”中創建一個映射文件hibernate.cfg.xml。 3.創建Hibernate的初始化類HibernateUtil.java Hibernate的運行離不開Session對象,對于數據的新增、修改、刪除和查詢都要用到Session,而Session對象依賴于SessionFactory對象,它需要通過SessionFactory進行獲取。 Hibernate通過Configuration類加載Hibernate的配置信息,主要是通過調用Configuration對象的configure()方法來實現。 4.創建實體類及其映射
購物網站的留言模塊主要相關的實體類包括留言信息實體類Message、回復信息實體類Revert、用戶信息實體類User和頭像實體類FaceImage,這些實體類存在著關聯關系。 User類擁有兩個子類,分別為管理員用戶類Administrator和普通用戶類Guest。
(1)創建留言信息實體類Message
在包model中創建留言信息實體類,將該實體命名為Message,該類封裝了留言信息。(2)創建Message類的映射文件Message.hbm.xml(3)創建回復信息實體類Revert(4)創建Revert類的映射文件Revert.hbm.xml(5)創建用戶信息實體類User(6)創建User類的映射文件User.hbm.xml(7)創建頭像實體類FaceImage(8)創建FaceImage類的映射文件FaceImage.hbm.xml 5.創建UserDao類
在項目project07的包dao中,創建名為“UserDao.java”的類,該類是與用戶操作相
關的數據庫操作類,在該類需要定義多個方法,
這些方法將在各個功能模塊實現中逐步添加,
這里只定義3個方法,方法名稱分別為saveUser()、findUserByName()、getAllFace()。 6.用戶注冊功能的實現
用戶注冊實質上是一個對用戶信息持久化的過程,所以需要對數據庫進行操作。(1)創建JSP頁面user_register07.jsp(2)創建JSP頁面top07.jsp(3)創建JSP頁面bottom07.jsp(4)創建JSP頁面listFace07.jsp 7.創建UserServlet類
在項目project07的包servlet中,創建名為“UserServlet”的類,該類繼承HttpServlet類,在此類中重寫doGet()和doPost()方法,在doGet()方法中調用doPost()方法。 8.創建JSP頁面error07.jsp
在項目project07中創建JSP頁面error07.jsp,該頁面為留言模塊中公用的錯誤處理頁面。
例如,用戶注冊過程中,程序首先通過UserDao類的findUserByName()方法判斷用戶名是否已經被注冊,如果用戶名已被注冊,則轉移到error.jsp頁面進行錯誤信息提示,否則進行持久化用戶注冊信息。 9.創建配置文件web.xml并編寫配置代碼
打開項目project07的文件夾“WebContent\WEB-INF”中的web.xml文件,然后編寫配置代
碼。 10.用戶登錄功能的實現
(1)創建JSP頁面user_login07.jsp
(2)在UserDao類中定義findUser()方法
(3)在UserServlet類中編寫用戶登錄請求代碼 11.創建MessageDao類
在項目project07的包dao中,創建名為“MessageDao”的類,該類是與用戶留言相關的數據庫操作類,在該類需要定義多個方法,這些方法將在各個功能模塊實現中逐步添加,這里暫定義1個方法,方法名稱為saveMessage(),該方法主要用于保存或修改留言信息。 12.創建MessageServlet類
在項目project07的包servlet中,創建名為“MessageServlet”的類,該類繼承HttpServlet類,該類是與留言信息相關的請求處理類。在此類中重寫doGet()和doPost()方法,在doGet()方法中調用doPost()方法。 13.用戶留言功能的實現
程序中只有成功登錄的用戶才能留言,所以在用戶留言之前需要判斷用戶是否登錄,如果沒有成功登錄,將不能提交留言信息。 14.分頁查看留言信息功能的實現 Hibernate為數據分頁查詢提供了便捷的方法,通過Query接口進行實現,同時為了增加程序的可擴展性和靈活性,在分頁查詢中使用自定義的分頁組件,該頁面組件可以讓程序變得更加靈活,而且其代碼可重用性非常高。(1)創建JSP頁面messageList07.jsp(2)創建自定義分頁組件PageModel類(3)在MessageDao類中定義getTotalRecords()方法和getPaging()方法(4)在MessageServlet類中編寫處理查看留言請求代碼 15.創建ManagerServlet類
在項目project07的包servlet中,創建名為“ManagerServlet”的類,該類繼承HttpServlet類,該類是將管理員操作的相關業務請求封裝
在該類中。
在此類中重寫doGet()和doPost(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 賣芒果合同樣本
- 代辦汽車報廢合同樣本
- 勞動合同樣本表
- 人工費合同樣本簡易
- 辦公室裝修設計合同樣本
- 賣米機合同樣本
- 賣賣車合同標準文本
- 農村林子出售合同樣本
- 協助拆卸設備合同樣本
- 2025年小學教育教學反思的意義試題及答案
- 2025年消防設施操作員(監控類)考試復習重點題(附答案)
- 湖南省部分校2024-2025學年高二下學期期中考試地理試題(原卷版+解析版)
- (二模)2025年深圳市高三年級第二次調研考試政治試卷(含答案)
- 2025年山東省應急管理普法知識競賽參考試題庫大全-上(單選題)
- 2025年鄉村醫生考試題庫:農村常見傳染病防治傳染病防治監測試題
- 玻璃產業實施方案
- 鄰水國有資產經營管理集團有限公司2025年公開考試招聘工作人員(8人)筆試參考題庫附帶答案詳解
- 2025-2030銅金屬行業市場深度調研及前景趨勢與投資研究報告
- 2025年遼寧省大連市甘井子區中考一模語文試題(原卷版)
- 配電房防火安全施工技術措施
- 地鐵乘客滿意度影響因素組態效應分析:出行鏈視角研究
評論
0/150
提交評論