JHipster 領域語言 (JDL) - 選項
概要
在JHipster中,您可以為實體指定選項,例如分頁或DTO。 您可以使用JDL進行相同的操作,或者使用實體上的註解,或者使用以下語法:
entity A {
name String required
}
entity B
entity C
dto A, B with mapstruct
paginate A with infinite-scroll
paginate B with pagination
paginate C with pager // pager is only available in AngularJS
service A with serviceClass
service C with serviceImpl
可用選項的完整清單可檢視 選項清單.
怎麼做
有兩種選擇:
- 一元(無選項值)
- 二元(帶值)
有三種將選項應用於實體的方法:
- 使用選項名稱 (
dto
、readOnly
等),可檢視範例 - 使用註解
- 使用
use XYZ
形式
不建議將它們混合使用,因為這會降低可讀性。
語法
對於常規形式:
<option name> <option entity list>
or
<option name> <option entity list> with <option value>
or
<option name> <option entity list> with <option value> except <option excluded entity list>
or
<option name> <option entity list> except <option excluded entity list>
- 對於一元選項:
- 選項名稱和清單是必需的
- 排除的實體是可選的,帶有
except
關鍵字(有關更多詳細訊息,請參見下文)
- 對於二元選項:
- 實體清單位於關鍵字
with
和選項值之前 - 同樣,被排除的實體最後帶有
except
關鍵字
- 實體清單位於關鍵字
對於註解:
@<option name>
entity <entity name>
or
@<option name>(<option value>)
- 與Java類似,註解可以將值放在括號中
- 根據選項的不同,值可以是或可以不是可選的
使用use XYZ
選項
使用use 選項形式,您可以在實體上指定一些選項。 它是在JHipster Code 2020期間建立的,其建立原因是:
- 解決停用選項的問題(在JHipster中有不止一種”否”的用法:
no, false, none
) - 提出一種按實體對選項進行分組的方法
entity A
entity B
entity C
use serviceClass for * except C
use mapstruct, serviceImpl, infinite-scroll for A, B
use pagination for C
use 選項值 | 說明 |
---|---|
mapstruct | 是否為您的實體建立DTO,如果實體具有DTO但沒有設定service,則將使用`serviceClass` |
serviceClass | |
serviceImpl | |
pagination | 當應用程式使用Cassandra時,禁止將分頁作為選項 |
infinite-scroll | 當應用程式使用Cassandra時,禁止將分頁作為選項 |
elasticsearch | 要求應用程式啟用searchEngine選項 |
couchbase | 要求應用程式啟用searchEngine選項 |
範例
每個範例將具有三種形式:
- 常規的
- 基於註解的
- use 形式(如適用)
基本一元範例
常規的:
entity A
readOnly A
基於註解的:
@readOnly
entity A
基本二元範例
常規的:
entity A
dto A with mapstruct
基於註解的
@dto(mapstruct)
entity A
使用 use
關鍵字:
entity A
use mapstruct, serviceImpl, pagination for A
all
和 *
關鍵字範例
all
和 *
是相同的
常規的:
entity A
entity B
dto all with mapstruct
基於註解的:
@dto(mapstruct)
entity A
@dto(mapstruct)
entity B
使用 use
關鍵字:
entity A
entity B
use mapstruct, serviceImpl, pagination for *
all
和 *
帶有排除項的範例(一元)
常規的:
entity A
entity B
skipClient * except A
基於註解的:
entity A
@skipClient
entity B
使用 use
關鍵字:
entity A
entity B
use mapstruct, serviceImpl, pagination for * except A
all
和 *
帶有排除項的範例(二元)
常規的:
entity A
entity B
dto all with mapstruct except A
基於註解的:
entity A
@dto(mapstruct)
entity B
使用 use
關鍵字:
entity A
entity B
use mapstruct, serviceImpl, pagination for all except A
具有自定義值的選項
entity A
entity B
microservice all with mySuperMS
混合例子
常規的:
entity A
entity B
entity C
readOnly B, C
dto * with mapstruct except C
service * with serviceClass except C
search A with elasticsearch
基於註解的:
@dto(mapstruct)
@search(elastisearch)
@service(serviceClass)
entity A
@readOnly
@dto(mapstruct)
@service(serviceClass)
entity B
@readOnly
entity C
關於service
指定的service
都不會建立將直接呼叫repository
介面的resource
類。 這是預設和最簡單的選項,請參閱A。
service with serviceClass
(請參見B)將使resource
呼叫service
類,後者將呼叫repository
介面。
service with serviceImpl
(請參閱C)將建立一個service
介面,該介面將由resource
類使用。
該介面由將呼叫repository
介面的具體類實現。
除非確定,否則不使用任何service
,這對CRUD來說是最簡單的選擇。 如果您將有很多業務邏輯,這些業務邏輯將使用多個repository
,因此非常適合用於service
類。
JHipster不是使用service
介面的粉絲,但是如果您喜歡它們,請使用service
的實現類。
entity A
entity B
entity C
// no service for A
service B with serviceClass
service C with serviceImpl
微服務相關的選項
從JHipster v3開始,可以建立微服務。 您可以指定一些選項以在JDL中生成您的實體: 微服務的名稱和搜尋引擎。
您可以透過以下方法指定微服務的名稱(JHipster應用程式的名稱):
entity A
entity B
entity C
microservice * with mysuperjhipsterapp except C
microservice C with myotherjhipsterapp
search * with elasticsearch except C
第一個選項用於告訴JHipster您希望微服務處理您的實體,而第二個選項指定您如何以及是否希望搜尋實體。
自定義註解
自定義註解在JDL中是可以的,例如:
@customAnnotation(customValue)
entity A
這樣做的主要目的是用於方案(blueprint):有時,您需要為實體甚至欄位提供自定義選項。
對於常規選項(dto
、pagination
等),這些選項將像在CLI中一樣在JSON中生成。
但是,對於自定義選項,它們將在轉儲的JSON中的options
鍵下生成。
可用選項
以下是JDL支援的實體選項:
不是您要找的? 檢視 應用程式選項.
JDL 選項名稱 | 選項型別 | 預設值 | 可選值 | 說明 |
---|---|---|---|---|
skipClient | unary | false | 這將使前端程式碼生成被跳過 | |
skipServer | unary | false | 這將使伺服器程式碼生成被跳過 | |
noFluentMethod | unary | false | 檢視說明 瞭解更詳細內容 | |
filter | unary | false | 檢視過濾 瞭解更多詳細內容;如果設定為true,但未設定`service`,則將使用`serviceClass` | |
readOnly | unary | false | 新增此選項將使實體變為只讀, 檢視 發布日誌 進一步瞭解。 | |
dto | binary | no | mapstruct, no | 是否為您的實體建立DTO,如果實體具有DTO但沒有`service`,則將使用`serviceClass` |
service | binary | no | serviceClass, serviceImpl, no | |
paginate | binary | no | pagination, infinite-scroll, no | 當應用程式使用Cassandra時,禁止分頁 |
search | binary | no | elasticsearch, no | 要求應用程式啟用searchEngine選項 |
microservice | binary | custom value | 將為微服務應用程式內宣告的每個實體自動新增 | |
angularSuffix | binary | custom value | ||
clientRootFolder | binary | custom value |
更多
應用程式選項 在這兒