熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

話說Hibernate和ADO.NET —練習隨筆小記

2013-11-23 20:20:13  來源: Java開源技術 
    最近在做一個JavaWeb程序用MyEclipse開發用Struts(*do)做開發框架Hibernate做數據庫代理類負責對數據庫的操作維持數據持久和數據訪問Spring用來整和注入還用了Ajax在Java中實現真他媽的讓人煩什麼Ajax根本就是寫JS腳本嘛(不過本來也是就是最原始的那種拉)自己手寫了JS腳本好久沒寫過這麼多了也當練習一下XMLHTTPRequest拉 
    要是中那就方便多了直接就拖AjaxControlToolkit控件個AJAX Extensions核心組件還有幾十個ajax Toolkit控件有兩邊對聯做廣告的有做像Google智能提示的(說到這個我做每回有一個問題就是在指定了返回記錄的Item每一行Css樣式之後當用鍵盤上下的方向鍵移動所選條的時候它就出現了腳本錯誤也不能用方向鍵移動所選條了我試過了只要不設置class他就沒一點問題能正常移動選擇和智能提示但是不設置樣式那哪看得?他默認都是黑字白背景不過不曉得是不是DIV層做的我以前用返回<span style=color:red>Jonllen</span>做測試他卻沒能返回Jonllen然後我對他進行Html編碼和反編碼都試過了也不行在頁面裡面要是能得到顯示Html的效果(說到這裡我呀有要叉開話題了等後面講考試在說了)要是這樣能行的話那也能設置它的Css style了但是就是不行不知道大家有沒有碰到我這種情況過還請知道的大蝦指點)還有做瑣定凍結頁面做實現的還有談出的等等要什麼有什麼看你要實現什麼功能了但我覺得就是MS這些Ajax控件調用WebServer的太多了就有時要新寫個WebMethod不習慣感覺麻煩了不過這倒是順了Ajax的本質咯就是要回調WebServer的Xml不過我覺得以前做的Ajax還可以他沒有做成控件只是要引用dll回調的是一個Ajax方法我以前在VS裡用AjaxProdll感覺還可以雖然此方法有很多局限性但用起來感覺挺方便的MS真是夠人性化Sun也要學著點就好了不過當前Sun還是做好它的JEE規范在說吧
    剛開始還可以就是JS不好怎麼調試就只能做死了alert看執行到了那一步不一會兒JS搞定了我在JS裡面調用的open url是一個servlet類然後在這裡調用Hibernate對數據庫操作以達到Ajax的異步處理因為我這個項目以前是連SQL Server 不過現在我要用MYSQL數據庫了呵呵免費的那種我就把以前工程裡面的Hibernate要連SQL Server 的三個驅動包給刪了接著選擇DB Browser(數據庫浏覽器)重新設置了Hibernate的數據連接Edit更改端口輸入數據庫口令還要添加一個MQSQL數據庫連接驅動連接包(jar文件)找啊找在E盤選擇配置OKNextFinish完成Open Connection一長串進度條到結尾後OK連接成功了一帆風順點開一看幾個database下面幾個table都對數我刪掉了以前的工程底下hibr包下的一些數據映射對象和相應的DAO數據訪問然後Hibernate Reverse Engineering重新添加刪除的那些Hibernate數據庫映射對象用assigned(有主鍵)的用assigned用native(自動增長主鍵)用nativeOKHibernate代理類搞定現在只要看servlet裡面DAO dao = new DAO()…對數據庫操作完成!現在就看Ajax的了它是如何的偉大在不刷新的情況下異步的CallBack服務器配置一下WebLogicRedeploy重新部署Run運行打開Brower鍵如URL看效果咯滿懷期待想著:onclick提交addshow()調用JS一個函數回發到服務器結果···返回的是一個alert(你所請求的頁面有異常)呵呵~哎為什麼類?我關閉一下調試在重新啟動一下還是提示有異常為什麼為什麼為什麼呢?我認真的檢查了我一下JS代碼認真的過了一遍JS裡面的function一個個檢查定義XMLHttpRequest對象sendRequest(url)發送函數請求processResponse()處理返回信息的函數等等sendRequest(url)發送函數請求對URL應該是這個問題我的url是servlet/FindServlet?sn= +ss;FindServlet是我工程ss包下面的FindServletjava的servlet類ss是在JS裡面var的一個變量在細想了一下servlet/FindServlet?sn=+ss不是ss/FindServlet?sn=+ss嗎?不是後來也用ss也測試了一下確實不是那是什麼問題呢?難道問題不是出在URL上面url沒錯想了一陣了靈機一動測試一下不就知道了嗎!我連忙打開FindServlet這個類一時間還很狠啪著自己的後老勺:你真笨啊!進入FindServlet在doGet方法裡邊String shen = requestgetParameter(sn);Systemoutprintln(shen);獲取sn查詢字符串(呵呵Net學多了)然後再在控制台輸出保存運行真的輸出了控制台裡面輸出了湖南我sn查詢字符串的值那這麼來說URL確實沒有問題它已經把請求發送到我的這個FindServlet類裡面來了這裡我已經能接受到了接著在FindServlet類往下看在一些關鍵性的代碼後加上Systemoutprintln(變量值);我習慣性調試Java的方法調試運行果然還沒有執行完就報異常了控制台在輸出了DAO前面的變量值後後面的就都沒有輸出了一定就是DAO的問題了!我把目光轉到DAO第一行AddrtableDAO dao = new AddrtableDAO();就實例化絕對沒問題List list = daofindAll(shen);應該問題Systemoutprint(listsize());此行在控制台沒有輸出結果List list = daofindAll(shen)findAll(shen)是按指定條件shen對數據庫執行查詢返回List集合的方法就是這句對數據庫查詢有問題了(一時間感覺自己真的了不起我這個人比容易較驕傲自滿我自己都受不了自己了)馬上寫了一個static void main()方法測試果然是Hibernate代理數據庫操作類出現了問提提示Can not Connection不能連接為什麼類?連不上我明明在DB Browser裡配置好了連MySQl的設置在那裡連上了啊還可以看到數據庫和表啊怎麼建的Hibernate數據庫代理類就連不上了類我馬上轉到了hibernatecfgxml Hibernate配置文件一看暈了怎麼在配置文件裡面用的還是以前的那個的配置設置我不是改成MySql了嗎我知道了你在DB Browser選擇好數據庫連接對象並未更改Hibernate數據庫連接配置暈了這MyEclipse怎麼這麼蠢啊不知道自動更改Hibernate配置文件唉癡哦手動更改後調試運行心想這次應該能OK了吧但結果總是出現意外老和所想的背道而馳的有出西西了一長串異常:什麼Error Creating SessionFactory等一大片英文搞得我頭都大了點異常進去看就是到了那些Hibernate那些砸七砸八的那些包的原類型裡了一個個類N多代碼看得真叫人煩拉想起就郁悶這MyEclipse調試可真JB麻煩又全英文版的(想起Net中調試哎```個人覺得Java中就是jar包太繁多了而一些重要的設置都保存在Xml的配置文件裡面感覺喜歡拿xml配置文件出氣!如頁面導航等但內容多了就顯得繁雜了就只能手動修改Source了)心裡直罵Java垃圾不禁雙手抱著後老勺往後仰看這天花板郁悶ING回下頭來看到了這MyEclipse工具蔑視了工程一下回到電腦面前看啊看順眼看了這些砸七砸八的包似乎少了什麼東西憑直覺我又過了那些jar包文件一便細想了一翻又仔細看了那些包一遍我的MySql數據庫驅動jar包文件類!怎麼沒有呢?我再Refresh一下還是沒有看到啊!拐了我雖然刪除了以前連Sql Server 個包但是怎麼MySql的包怎麼沒有導進來呢?第一時間問為什麼?難道又是DB Browser的問題你在那裡選擇Add JARS選擇是驅動包文件是用的磁盤物理路徑也就是說他沒有自動把你所選擇的包自動加在到你的工程裡面進來了該死的DB Browser害得我Hibernate老是連不上這個問題好象只在你以前用一個數據源現在又換掉一個新的數據庫連接時才有我打工程文件所在目錄進入WebRoot\WEBINF\lib目錄手動將我E盤底下個那個MySQL數據庫連接驅動Jar包Copy到這個目錄下再在工程裡面Refresh一下MySql包就出來了運行WebLogic打開浏覽器onclick啊````終於出來了通過JS查詢到數據庫服務器裡面的數據了我在Java中實現Ajax就這樣成功了!你們看了我寫了這麼多覺得好不好笑啊是不是感覺我是垃圾啊菜鳥一個我的確也是菜鳥本來就是要是高手的話可能一看就知道錯誤出在那裡了就不會想我這樣折騰了吧!是不是我說了一些Java很低級的常識類?而我自己卻不清白類!希望大家莫見笑我了第一次寫這些Hibernate知識我犯的一些錯誤應該大家有些Java的朋友在些Hibernate的時候沒出現過我這樣的問題吧其實我對Java是比較感興趣的但是由於我所學的Java的知識太少對有一點難的就不知道做了那是因為我個人學的Java太膚淺的原因我知道其實中實現在在Java裡基本上可以實現的只不過可能比中實現難一點而已吧 在網上看到有很多朋友有拿過JAVA的Hibernate和NET中的ADONET進行比較也有很多人說兩著不能進行相比就像SQL語句不能和存儲過程進行相比一樣只要能在恰當的時候用就是好的我都很認同的他們的觀點和看法而我個人認為呢只要有自己的對事物認識的觀點就是好的我是一個比較愛說的人我覺得你只要能認真的去思考分析一件事物不管你得到的結論是怎麼樣的旨在在這個過程你從中是否學到了一些東西我不喜歡那些平時不愛說話的因為那時候我們不知道他對這個事物的看法是怎樣的也難以猜測他心裡到底在想什麼既然上面有說到Hibernate和ADONet所以我又加上了這一段羅嗦起來了呵呵就我這皮毛也當回顧我以前一些知識談不上總結也算小記一翻希望高手們別笑話我們這些新手了下面就我所了解的Hibernate和ADONET比較如下:在Hibernate中首先我們需要在JAVA工程裡面添加Hibernate標簽庫(我用的是Hibernate Core Libraries)的引用Net中我覺得就是usingimport名稱空間SqlClientOleDb添加程序集的過程然後我們需要打開DB Brower建立數據庫連接字符串就是打服務器名用戶名密碼等然後Hibernate會這些數據庫連接信息保存在hibernatecfgxml(默認缺省)這一個xml文件中在連接數據庫的時候值得一提的是需要數據庫連接驅動包不同的數據庫有不同的驅動包個人覺得不同的驅動包作用在與由於不同數據庫用的可能的是不同連接操作方式如Oracle是表空間的形式存在數據庫等而其他的可能略有不同正確配置好連接成功後我們就能在DB Brower裡看到數據庫和數據庫對應的表了在你連接數據庫前添加Hibernate時它會叫你選擇包添加後包下面就會多個類了IBaseHibernateDAOBaseHibernateDAOHibernateSessionfactory從名字就可以看出來就是一個接口一個接口實現類(implements)一個工廠具體裡面是如何實現的以及其原理機制我此小輩能講清楚的我還是有自知知明的等下甭被我的這點Java皮毛知識給歪曲了那就不好了不過我看裡面的代碼也很少簡單要理解起來也不難反正就創建了這個類然後我就需要在DB Brower裡面選擇相應的表Hibernate Reverse Engineering添加對應DAO和ModelModel就是數據庫表對象映射實例數據庫表的每一列充當Model類的屬性字段並添加有getset規則的屬性訪問器而DAO類裡面則封裝的是對該表的一些常見的數據訪問操作(insertdeleteupdateselect)它有自己的HibernateSQL語句(不是一般的sql語句)這一塊我手動寫得很少不過和一般的sql語句語法還是很相似 如有按屬性名查詢返回Model強類型化List集合等除此之外每添加一個表還會自動添加表名hbmxml文件這個xml文件保存數據庫映射到Hibernate表字段的具體信息如主鍵信息列長度相應的Java類型等要注意的是在添加的時候它會叫你選擇ID Generator表的信息這裡常見的是assigned(有表主鍵)和native(自動增長主鍵)因為在呆後創建的時候它會根據你所選擇的信息創建不同的DAO和Model如在構造函數和一些數據訪問的方法裡面就可能有需要ID主鍵的而對於自動增長的則無須輸入ID主鍵即可你可以對多個可能用的到表執行上述Hibernate Reverse Engineering映射操作你可以在不寫一局代碼的情況下完成對數據庫的大多數的一般操作在其他地方很方便的調用我覺得這就是Hibernate的最大的好處優點;而在Net中類相對Hibernate來說我想是一步一個腳印什麼DAO方法等代碼一行行寫不過我覺得這樣也沒什麼不好的我們一般在項目中就用一個SqlHelper類裡面寫上對數據庫的一些增刪改查方法等根據傳來的SQL語句和參數組或存儲過程等動態的返回數據集合(List)或記錄數等用起來也挺好的頂多還對不同的實例添加對應的DAL這些基本上能滿足我們對數據庫的基本操作了不過我覺得在Java中這樣實現也可以啊我以前就在Java裡面寫了一個SqlHelper類代替了Hibernate用的是JdbcOdbc數據庫連接感覺也很實用簡單明了但是Hibernate在一些性能等方面的優勢我們上不容忽視的
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28323.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.