天天看點

Liferay 6.1開發Service Builder一、什麼是Service Builder?二、Service Builder的使用三、Service Builder生成代碼的使用。四、自定義方法五、修改字段長度六、其他技巧

一、什麼是Service Builder?

Service Builder是Liferay IDE(SDK)提供的一種代碼生成方案,開發人員隻需要編輯一個資料庫的實體描述檔案,即可根據本XML檔案生成Spring層代碼、Hibernate層代碼、SQL、SQL索引建立檔案、Spring和hibernate的配置檔案等,可以大提高開發人員的效率。簡單說就是根據資料庫描述檔案,生成service層和持久化層的代碼,開發人員隻需要關注控制層即可。

二、Service Builder的使用

1、首先需要有一個Portlet的插件工程,建立方法,參考http://www.huqiwen.com/2012/09/01/liferay-6-1-development-studey-2-create-portlet-project/

2、打開Liferay IDE,點選工具欄中Liferay工具的中間按鈕,New Liferay Service Builder,彈出的向導如下,填寫相關資訊,點選完成。

Liferay 6.1開發Service Builder一、什麼是Service Builder?二、Service Builder的使用三、Service Builder生成代碼的使用。四、自定義方法五、修改字段長度六、其他技巧

Plugin Project:将用于哪個工程,如果有多個工程,請看仔細。

Service file:資料庫描述檔案的檔案名,使用向導不可更改(可以手動改,後面詳述)

Package path:包名路徑,這裡是定義基礎的包名路徑,建議一般規則為:公司域名+portlet+功能子產品名

Namespace:命名空間,如果沒有指定資料庫的表名,則會在前面添加上此命名空間。

Author:作者名,預設讀取系統變量。

Include sample entiry in new file:在自動生成的xml檔案中是否包含示例,如果是新手,建議打勾。

3、編輯service.xml檔案。在liferay IDE裡面提供了service的開視化編輯。簡單介紹一下主要屬性的含義。

Liferay 6.1開發Service Builder一、什麼是Service Builder?二、Service Builder的使用三、Service Builder生成代碼的使用。四、自定義方法五、修改字段長度六、其他技巧

Name:執行個體名稱,就是通常的JavaBean的名稱。

Local Service:本地服務,一般選中。

Remote Service:遠端服務,用于為生成Web Service做支援,如果不需要不要選中。

Human Name:人性化名稱。一般留白即可,此處的名字用于生成文檔時使用,如果留白使用Name。

Table:資料庫名稱,如果不填寫,使用Name。

Uuid:是否生成一個uuid的字段,具體的根據資料庫設計情況而定。可以使用也可以不使用。推薦使用。

Uuid accessor:是否使用uuid存取實體,根據情況而定。可以使用也可以不使用。推薦使用。

Persistence Class:持久化類的名稱,推薦留白,讓自動生成。

Data source:資料源,一般留白。。

Session Factory:資料庫會話工廠,一般留白。

TX Manager:事務管理,一般留白。

Cache enabled:開啟緩存,推薦選中。

JSON enabled:開啟JSON,生成的代碼中包含實體的JSON序列化和反序列化,根據情況而定。如果不使用JSON,請不要勾選。

4、在Columns裡面添加字段,填寫字段名稱,類型等。如果要使用特殊的資料庫名稱,或者字段有其他需求,請點開Columns,在下面逐個字段上修改。Db Name對應的為資料庫的字段名稱,其他一般留白即可。

5、Order,查詢結果根據哪個字段排序列。

6、Finders:查詢方法。service builder預設會生成基本的增删改查方法,如果有一些根據字段查詢某些資料,傳回的可以是一個實體也可以是一個List。

<finder name="userId" return-type="user">
      <finder-column name="userId" />
 </finder>      

這個的意思是生成一個方法叫findyByUserId的方法,傳入的參數是userId,傳回的類型是User。(這個例子隻是為說明,一般如果userId是主鍵,service builder生成的方法裡面,不寫此finder,已經包含此方法)

finder-column這裡可以填寫多個參數,return-type,如果是Collection則傳回類型是List。

Finders方法,可以根據實際情況進行填寫,對于使用finders仍不能滿足的方法,後面詳解。

7、點選ant裡面servicer-builder按鈕,等待Liferay進行代碼生成。或者将可視化編輯器切換到Diagram,點選右鍵,service builder。

三、Service Builder生成代碼的使用。

如果是第一次使用Service Builder,請按如下步驟操作。

1、WEB-INF目錄下面找到service目錄,點選右鍵Build Path-->Use as Source Folder。service包裡面主要包括生成的代碼裡面的接口方法,友善我們進行跨工程的代碼調用。src裡面都 實作包。

2、Service Builder的使用,一般有兩種方法。一種是擷取一個Service。

CmsArticleLocalService cmsArticleServie = CmsArticleLocalServiceUtil.getService();

然後使用此xxService調用相關方法

一種是直接使用xxLocalServiceUtil調用相關方法。大部分情況下使用xxLocalServiceUtil進行方法調用。

3、建立一個modle執行個體一般使用如,xxLocalServiceUtil.createXX()方法。

四、自定義方法

雖然liferay自動生成的代碼裡面包含了常用方法,足以應付一般場景,但是有些特殊場景需要一些特殊的方法,如何添加自定義方法呢?

1、找到src下面和此service builder相關的的xxx.service.impl包,找到xxxLocalServiceImpl的檔案,打開在此類裡添加相關的自定義方法。

2、如果是要為modle添加自定義方法,請在xxx.modle.impl包裡面的,xxImpl檔案裡面添加自定義方法。

3、修改完成後,再次執行Service Builder,會将這些方法自動的添加到其他相關接口、類裡面。Liferay的Service Builder方法一般隻允許修改上述兩個類,其他的類一般不要修改,因為修改後如果再次執行service builder會被覆寫掉。

五、修改字段長度

Liferay自動生成的代,如String字段,預設長度是75。如果有特殊的需求,可以在src/META-INF/portlet-model-hints.xml裡面修改相應的字段映射長度。找到相應的實體,字段,如下:

<field name="InfoId" type="String" >
 <hint name="max-length">300</hint>
 </field>      

這樣就可以将InfoId的資料庫字段長度定義為300。修改完成重新執行service-builder進行檔案生成。

六、其他技巧

1、一個service.xml檔案裡面可以有多個實體名。

2、如果要建立多個service.xml檔案,可以在WEB-IN目錄下面建立一個檔案夾,比如叫service-builder用來存儲service.xml檔案,不同的service.xml執行不同的命名,如User-Service.xml等。手動建立,不必使用向導。

3、如果按照步驟2操作,有多個service.xml檔案,則不能執行ant裡面的service-builder檔案,因為ant隻會尋找web-inf目錄下面的services.xml檔案。是以要在xx-service.xml檔案裡面切換到Diagram編輯模式,點選右鍵,build Service,這樣會對目前XML檔案進行建構。

4、即使使用了2、3的方法,也不要删除web-inf目錄下面的service.xml檔案,可以保留一份,不然最終部署後的web.xml描述檔案裡會少生成一些内容,導緻插件工程不能正常運作。

5、同一個插件工程中,不同的xx-services.xml檔案必須使用不同的包名,一個services.xml裡面可以有多個實體,但不同的services.xml裡面必須使用不同的包名,否則會導緻生成的的spring配置檔案出現覆寫情況。