spring+hibernate多層web開發eclipse下的開發模板

  • 1. xdoclet生成hbm配置文件和sql語句。
    2. xdoclet生成spring的配置文件applicationContext.
    3. 容器管理事務並解決延遲加載問題.
    4. 解決國際化和中文問題.
    5. bo、dao、business service、controller、view(jstl或jsp),一共五層結構。
    6. 表單綁定、表單驗證。能綁到bo的儘量使用bo來綁定,不能綁到bo就要自己做command(類似於struts 的ActionForm)。
    7. Dao測試用例的設計技巧。Dao測試用例的設計要做到(我總結的經驗,對錯否還望指正):

    • (1) 獨立性: 測試使用的數據記錄由測試程序自己生成.
      (2) 可移植性:通過CVS check out到另外機器也能通過。--公司領導在其機器上check out 後運行測試看到綠色也開心。
      (3) 對數據庫無入侵性:測試程序生成的數據記錄最後也由自己刪除。
      (4) 測試完全性:盡力保證測完所有方法且當然希望是通過的,要做到這點有點難,特別是涉及多表查詢時,所以我只說是“盡力”。

    Service層的測試用例也應該這樣設計的,但有時需要初始化的數據量太大,最後要刪除的數據也太多,我感覺得不償失,大家可量力而行。
    8. 使用Hibernate映射解決樹形數據結構的例子--Cat.java,在這裏面也包含使用version樂觀鎖定的xdoclet tag的書寫格式。
    9. 使用繼承策略簡化Dao的編寫.這點很重要,使用繼承,有些dao接口和接口實現裏面的方法是空的。

--------------------------------
^_^以下說明寫地有點亂,我有時間再改。^_^
--------------------------------

環境說明:

spring+hibernate是輕量級的解決方案,在任何j2ee容器都能運行.
我使用的mysql4+tomcat5,配置文件也是針對mysql的.爲了讓初學者能很快上手,也建議你使用mysql4+tomcat5,這樣你就不用修改裏面配置啦!

項目說明:

  • 1. 該項目是一個hibernate+spring+xdoclet的eclipse3++myeclipse下的配置模板:
    從bo、dao interface、dao implement、daoTest、bussiness interface、bussiness implement、bussiness test、command(類似於ActionForm)、Controller(類似於Action)、Validator(類似於struts的validator)、jsp&jstl view都包含,自己慢慢看吧。2. hibernate的配置文件、sql語句生成使用xdoclet,spring bean的配置文件也用xdoclet生成,完全自動化呀,很酷!
    3. 這是一個小型寵物管理,貓下面有孩子貓,所以是一個用ibernate實現樹形的貓的數據結構,很強的hibernate啊!


運行說明:

安裝eclipse3+myeclipse(配套eclipse3的版本的myeclipse)先,在eclipse裏面建立一個名爲pet的工程,把這個工程拷貝粘貼覆蓋過去,再刷新工程絕對ok!
  • 1. 修改根目錄下的hibernate.properties文件,本人用mysql,如果你也用mysql,改userName和password就可以了--默認的配置是userName=root,password爲空,假如你安裝mysql沒有設置root的密碼,那就什麼都不用改。
    2. 下載spring、hibernate2.x、xdoclet2.1、ant、mysql_jdbc_driver(我用這個driver:mysql-connector-java-3.0.14-production-bin.jar),把它們lib目錄下所有的jar文件都放入到WebRoot/WEB-INF/lib目錄下--初學者這樣最省事,哪些jar是需要的也別管。
    3. 運行src/build.xml,然後右鍵點擊工程pet,刷新,生成src/org/ggyy/bo/*.hbm.xml文件;再運行src/build.xml,再刷新工程,生成src/sql.ddl文件(這是eclipse3.0+myeclipse下的毛病,不能自動刷新,其它ide我沒試過,我只喜歡eclipse!^_^).
    4. 運行org.ggyy.util.DataBaseTask(這是我寫的一個類),讀取src/sql.ddl文件,然後往mysql數據庫裏面(使用mysql內置的test數據庫)發送sql語句.
    5. 運行springBuild.xml(也是ant腳本,eclipse不能自動刷新,我乾脆把每個target分開!這樣運行ant,鬱悶ing),生成spring的配置文件WebRoot/WEB-INF/applicationContext.xml. 額外的bean聲明寫在src/spring-beans.xml,由spring的xdoclet將其合併到aplicationContext.xml裏面去--自己看看就明白了.
    6. 發佈到tomcat5,啓動tomcat服務器,瀏覽器鍵入:http://localhost:8080/pet/db/listCat.sf


國際化和中文問題解決說明:


  • 1. messages_zh_CN.properties文件必須使用JDK提供的轉碼工具native2ascii.exe進行轉換:
    native2ascii messages_zh_CN.properties msg.txt
    把生成的目標文件msg.txt拷貝粘貼替換掉Messages_zh_CN.properties裏面的內容,這樣就不會亂碼了.
    2. 中文問題我是這樣解決的:
    (1) src/spring-beans.xml有如下聲明(spring-beans.xml實際上經sprng的xdcolet處理最終合併到applicationContext.xml裏面):
java代碼: 


      <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
                <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
                <property name="url"><value>jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=GB2312</value></property>
                <property name="username"><value>root</value></property>
                <property name="password"><value></value></property>
           </bean>
           


這裏使用mysql裏面的test數據庫,請注意url中的useUnicode=true&characterEncoding=GB2312.這是mysql特有的,其它數據庫環境我沒試過,使用其它數據庫的朋友要注意.
(2) WebRoot/WEB-INF/web.xml有編碼的fillter聲明,也是gb2312,自己看吧.
(3) 每一個jsp頭文件, <%@ page contentType="text/html; charset=gb2312"%>,當然也gb2312也!
3.其它語言我沒試過.


用容器管理事務來解決Hibernate的延遲加載問題:


  • 1.在spring裏面解決延遲加載的問題很簡單,只要給方法配置一個事務,有事務上下文,就有HibernateSession上下文,就不存在延遲加載的問題.這個問題用AOP來解決可能好一些,可惜這樣的攔截器我不會^_^.
    2.容器管理的事務只在Dao層和Service層進行管理(在Controller層也管理事務我感覺很變態),由於沒有使用OpenSessionInView 的filtter,在view層就有延遲加載的問題.爲了避免這種現象,在Service或Dao層事先就把view層所需要的數據傳遞給Controller層,再由Controller層傳給view層;同時約定,除非Controller層已經明確地把從表的數據加載,否則在view層不要試圖取得從表類的數據!

發佈了41 篇原創文章 · 獲贊 0 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章