1. 程式人生 > >erp專案經驗總結

erp專案經驗總結

1.  關於hbm表和Action模型注入

模型注入

補充:不論多對一,一對多,都是要考慮,建立這個成員屬性到底是要給誰賦值(ID),是哪個ID就把表中對應的鍵名,寫上即可。

[1]:首先建立了xxxAction之後,屬於本Actioin的xxx model模型,以及xxxService要首先注入

[2]:然後是再考慮與這個Action有關的前端頁面有沒有用到與這個xxx模型相關聯的表模型(多對一,一對多,多對多等)中的資料,如果用到了,那麼就需要注入這個模型,來接收資料。

[3]:同[2]類似,如果後端Action中,需要用到哪個屬性來接收前端傳過來的資料,但是這個Action中的模型或者其他模型沒有能接收他的,那麼新建一個

Hbm對映

首先是資料庫建模時的模型,指明的多對一,一對多,多對多和一對一的關係。              (1)多對一:

在多的一端的模型中新建一的一端的屬性,然後加入set,get方法。多的一段對映檔案中:將原一的一端的ID去掉,然後<!--

指定多對一的關係

             name:多的一端(emp)的類中的一的類(team)的屬性名

             column:建表後多的一端(t_emp)中的外來鍵[也就是一的一端的主鍵ID]

          -->

<many-to-one name="team"column="t_id"></many-to-one

>

本模型中建立另一端的模型成員屬性,在給另一端這個模型物件賦值時,!!!!!!!!!如果是多對一這種關係,是給本模型中的外來鍵(對應另一端的主鍵)賦值。

(2)一對多:

在一的一端的模型中新建多的一端的Set集合的屬性,然後加入set,get方法。一的一端的對映檔案中:<!--

             set指定一對多的關係配置

             name:在一的一端的模型類中集合的屬性名

          -->

<set name="set">

<!--

                  key:在多的一端的表中要產生的外來鍵

                  column

:外來鍵名稱

              -->

<key column="t_id"></key>

<!--

                  one-to-many:指定多的一端的類

                 class:多的一端的類在專案中的路徑

              -->

<one-to-many class="com.dz.model.Emp"/>

</set>

本模型中建立另一端的模型成員屬性,在給另一端這個模型物件賦值時,!!!!!!!!!如果是一對多這種關係,是給另一端模型中的外來鍵(對應本模型中的主鍵)賦值

(3)一對一:

在    一張身份證對應一個人,在身份證一端加入人的屬性,然後在其對映檔案中(這個要注意!!要用外來鍵的方式生成主鍵)

<!-- 指定主鍵名稱,建議使用emp端的主鍵名稱 -->

<id name="cardId" column="emp_no">

<!-- 使用外來鍵的方式來生成主鍵 -->

<generator class="foreign">

<!-- 指定idCard這一端的emp屬性 -->

<param name="property">emp</param>

</generator>

</id>

<!--

指定一對一的關係

             name:當前端的的另一個一的一端的屬性名稱emp

             constrained:建表時帶有外來鍵約束

          -->

另一個一的一端:模型中建立身份證card模型屬性:card

<!--

雙向關聯對映的一對一,從資料庫模型的箭頭指向方向來看

             name:指定箭頭背向端的model屬性

          -->

<one-to-one name="card"></one-to-one>

<one-to-one name="emp"constrained="true"></one-to-one>

(4)多對多:在多的一端建另一個多的一端的set集合屬性,另一個多的一端同樣也是

         單端對映:

    <!--

             set:設定多對多的單端集合

             name:在emp中集合屬性名稱

             table:要產生的中間表的名稱

          -->

<set name="roles" table="emp_role">

<!--

emp表的主鍵給中間表作為外來鍵

                  column:當前emp表的主鍵名稱

              -->

<key column="emp_no"></key>

<!--

指定emp對面端的

                  class:指定多的一端的類

                  column:指定多的一端的要給中間表的欄位名稱(role表的主鍵)

              -->

<many-to-many class="Role" column="role_id"></many-to-many>

</set>

         雙向對映:與另一端配置方式一樣

<set name="emps"table="emp_role" cascade="save-update">

<key column="role_id"></key>

<many-to-many class="Emp" column="emp_no"></many-to-many>

</set>

2.  模型中何時需要建立新的屬性,然後指定對映關係。

(1)    首先兩張表A表和B表之間,如果A表需要用到B表的東西,那麼需要在模型B中建立屬性A,並在A的對映表中配置關係。如果不需要引用B的東西,但是A和B有關係,B和C有關係。A需要用到C的東西,那麼依然需要建立B然後配置對映,並在B中建立C,然後配置對映,這樣才能通過A . B . C . 屬性從而引用到C的東西

(2)    總之兩張表之間最多A→B有一個對映關係,B對A有一個對映關係。相當與他們的對映表中,兩個表各有一個配置關係,不可能再多了。

3.  自定義標籤問題

當資料庫表中需要通過數字來代表一個狀態時,必須用文字表示出來。那麼就需要在utils工具包中建立靜屬性,然後通過配置自定義標籤來輸出相對應的文字屬性。

4.  隱藏屬性

當需要用到模型表中的屬性時,但是前端表中不需要展示,那麼就用隱藏標籤來接收,如果需要傳遞回去值的話,那麼一定要配置好,用什麼來接收。

5事務管理

在一個被事務管理起來的service層,即在ApplicationContext.xml中,配置了execution(*service

 等等的)這個,以及指定了方法前戳的,這裡只要方法中獲得了持久物件。那麼對於這個持久物件的增刪改查,就會自動進行儲存修改,不需要手動。

但是如果該物件(即該張表模型),中存在另一張表的 Set 模型,即關聯對映,那麼對另一張表的增刪改查,需要手動,或者在對映檔案的 Set標籤物件中加上級聯屬性,save-update,才可以同時的執行。

5.  前端頁面中,資料的問題

A頁面與B頁面

A頁面通過連結跳轉到Action中,再通過Action中的相對應的方法跳轉到B頁面

(1):只要是本次跳轉(A→Action→B),那麼方法中context.put()加入的,以及Action中建立的用於接收資料的屬性,都可以被B頁面呼叫!!!!!!!

(2):那個彈出層的程式碼,每個彈出框的確定按鈕,都屬於他前面一個頁面的(即呼叫他的那個頁面),所以在這個確定按鈕中,可以獲得她前面那個頁面的一切屬性