

摘 要:面對龐大而又復(fù)雜的高校一卡通數(shù)據(jù),設(shè)計一套完整高效的數(shù)據(jù)查詢系統(tǒng)對于分析這些數(shù)據(jù)具有重大意義。本文從解決數(shù)據(jù)查詢編程問題出發(fā),考慮到數(shù)據(jù)安全,提出以MVC框架模式為基礎(chǔ),利用Hibernate框架優(yōu)化數(shù)據(jù)查詢結(jié)構(gòu),對數(shù)據(jù)訪問程序設(shè)計具有很高的應(yīng)用參考價值。
關(guān)鍵詞:MVC模式;數(shù)據(jù)查詢;優(yōu)化設(shè)計;Hibernate
1 MVC框架模式
MVC(Model-View-Controller)框架模式通過模型、視圖、控制器,分別對程序的輸入、處理和輸出進行控制,三者相互獨立,不會因為其中一項的改變而影響其他內(nèi)容的變化。其中,模型可以為視圖提供數(shù)據(jù),同時進行業(yè)務(wù)邏輯關(guān)系的處理;視圖用于接收命令和顯示相應(yīng)的數(shù)據(jù);控制器則專門控制用戶的輸入和輸出。如圖1所示:
2 數(shù)據(jù)查詢設(shè)計
原始的Web程序開發(fā)以服務(wù)器端開發(fā)為主,在程序設(shè)計中,以獨立編寫的SQL命令語句直接對數(shù)據(jù)庫進行查詢,這種命令語句直接編寫在頁面代碼中,甚至數(shù)據(jù)庫的賬戶密碼都暴露給程序閱讀者,很容易被他人所用,給程序的安全性造成很大的隱患。
JAVA提供的Web開發(fā)JSP+Servlet+JavaBean可以在一定程度上解決上述問題,它是用JavaBean來封裝邏輯程序、用戶參 數(shù)及賬戶密碼,以JSP顯示程序輸出結(jié)果,大大提高了程序設(shè)計的安全性。其實現(xiàn)方式及對應(yīng)的MVC模式如圖2所示:
如上圖所示,以Servlet控制用戶請求、顯示響應(yīng)結(jié)果,在接受用戶請求時,以參數(shù)作為用戶請求的載體,將參數(shù)的安全性驗證設(shè)計到業(yè)務(wù)邏輯中,即在JavaBean中內(nèi)置變量,其方法中的變量userpassWord即用戶輸入的密碼驗證程序如下:
String userpassWord;
public void setUserpassWord(String s)
{
userpassWord=s;
}
public String getUserpassWord()
{
return userpassWord;
}
sql.executeQuery(\"select * from user WHERE userpassword='\"+userpassWord+\"'\");
用戶名及其他參數(shù)類同,這種通過Servlet只調(diào)取JSP中的參數(shù),在封裝的JavaBean中進行參數(shù)處理,然后對數(shù)據(jù)庫進行查詢進而核對參數(shù)正確性的驗證方法,在很大程度上保障了程序和數(shù)據(jù)庫的安全性。
3 數(shù)據(jù)優(yōu)化設(shè)計
在對龐大的高校一卡通數(shù)據(jù)進行查詢功能設(shè)計中會面臨諸多難題:其中最為常見的就是為了數(shù)據(jù)序列的一致性,需要分析數(shù)據(jù)對象持久性;要處理好以上問題,就要借助MVC框架模式來進行程序優(yōu)化設(shè)計,同時借助Hibernate的作用,Hibernate包含6個核心接口:Session、SessionFactory、Transaction、Criteria、Query和Configuration,這6個核心接口應(yīng)用甚廣,可以把數(shù)據(jù)對象進行模型化存儲,將數(shù)據(jù)信息儲存到本地磁盤后,根據(jù)實體類進行數(shù)據(jù)關(guān)系映射,對持久化對象進行存取,從而能夠保證在處理數(shù)據(jù)對象時保證數(shù)據(jù)序列的一致性。
例如應(yīng)用程序通過Hibernate保存java.sql.Clob實例時,必須包含兩個步驟:(1)保存一個空的Clob實例在數(shù)據(jù)庫事務(wù)中,(2)鎖定此記錄,更新保存的Clob實例,把長文本數(shù)據(jù)寫入Clob實例中,其代碼如下:
…
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Customer customer = new Customer();
customer.setDescription(Hibernate.createClob(\"\")); //先保存一個空 的clob
session.save(customer);
session.flush();
//鎖定此記錄
session.refresh(customer,LockMode.UPGRADE);
oracle.sql.CLOB clob = (oracle.sql.CLOB) customer.getDescription();
java.io.Writer pw = clob.getCharacterOutStream();
pw.write(longText);//longText為長文本字符串
pw.close();
tx.commit();
session.close();
在處理數(shù)據(jù)類型的問題上,Hibernate通過內(nèi)置的映射類型和客戶化映射類型來實現(xiàn),內(nèi)置映射類型可以將一些常見的JAVA類型映射到相應(yīng)的SQL類型,用戶還可以實現(xiàn)UserType和CompositeUserType接口,從而靈活地定制客戶所需映射類型。
通過以上實例可以看出,Hibernate主要是作為數(shù)據(jù)持久性框架來使用,其對應(yīng)MVC模式中的模型,它的主要作用是處理事務(wù)流程,把數(shù)據(jù)庫中的關(guān)系表通過ORM映射為對象,將常用的數(shù)據(jù)查詢程序?qū)?yīng)到一個控制器,從而達到封裝和優(yōu)化的目的。
參考文獻:
[1]丁振凡,吳根斌.Spring 3.x MVC模型的數(shù)據(jù)校驗國際化處理[J].計算機時代,2012(08).
[2]王哲.基于MVC的系統(tǒng)架構(gòu)設(shè)計探究[J].數(shù)字技術(shù)與應(yīng)用,2012(01).