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

可用選項的完整清單可檢視 選項清單.

  1. 怎麼做
  2. 語法
  3. 使用use XYZ選項
  4. 範例
    1. 基本一元範例
    2. 基本二元範例
    3. all和*關鍵字範例
    4. all和 * 帶有排除項的範例(一元)
    5. all和 * 帶有排除項的範例(二元)
    6. 具有自定義值的選項
    7. 混合例子
  5. 關於service
  6. 微服務相關的選項
  7. 自定義註解
  8. 可用選項
  9. 更多

怎麼做

有兩種選擇:

  • 一元(無選項值)
  • 二元(帶值)

有三種將選項應用於實體的方法:

  • 使用選項名稱 (dtoreadOnly等),可檢視範例
  • 使用註解
  • 使用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):有時,您需要為實體甚至欄位提供自定義選項。 對於常規選項(dtopagination等),這些選項將像在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

更多

應用程式選項 在這兒