jHipster JDL 教程

写于2017-02-15

JDL 是jHipster专用的生成实体的语言。(大部分翻译自JDL )

在jHipster的项目,生成实体需要的文件:

  • a database table(表中对应的表)

  • a Liquibase change set(Liquibase 的changelog,在src\main\resources\config\liquibase\changelog目录下的文件)

  • a JPA entity class(JPA实体类 src\main\java\com\ xxx\ xxx\domain目录下,应该是,错了请评论)

  • a Spring Data JpaRepository interface (src\main\java\com\binana\amas\repository 目录下)

  • a Spring MVC RestController class;

  • an AngularJS router, controller and service; -src\main\webapp\app\entities\ 目录下

  • a HTML page.-HTML文件

导入.jh文件命令:

yo jhipster:import-jdl my_file1.jh my_file2.jh

jhipster-uml my_file1.jh my_file2.jh

导入多个文件用空格隔开,需要把对应文件放在项目的根目录,不然会报错,说在根目录找不到对应jh文件。

JDL实体示例:
entity  {
    [*]
}
  • 实体名称
  • 字段名,建议使用驼峰命名,使用下划线后面会出现问题
  • 字段类型(需要jHipster支持的类型)
  • 字段的验证(是否为空,长度限制,正则等)
例子:
entity A

entity B

entity C {}

entity D {

  name String required,

  address String required maxlength(100),

  age Integer required min(18)

}

说明:A ,B,C实体不包含任何字段,对于空实体这两种定义方式都可以。

D实体包含:

名称为name,类型为string,不为空的字段。

名称为address,类型为string,不为空的字段且字符串最大长度为100的字段。

名称为age,类型为integer,不为空的字段且最小值为18的字段。

如果需要验证,那么就在验证括号内加内容。

验证 说明
required 是否为空
minlength(10): 字符串的最小长度
maxlength(100) 字符串的最大长度
pattern(*?[a-z]) 正则
min(10) 数值的最小值
max(100) 数值的最大值
minbytes(512) BLOB的最小字节
maxbytes(1024) BLOB的最大字节

JHipster会自动添加ID字段。

下面是JDL支持的各种数据库对应的数据类型,JDL网站上面有给出。

SQL MongoDB Cassandra Validations
String String String required, minlength, maxlength, pattern
Integer Integer Integer required, min, max
Long Long Long required, min, max
BigDecimal BigDecimal BigDecimal required, min, max
Float Float Float required, min, max
Double Double Double required, min, max
Enum Enum required
Boolean Boolean Boolean required
LocalDate LocalDate required
Date required
ZonedDateTime ZonedDateTime required
UUID required
Blob Blob required, minbytes, maxbytes
AnyBlob AnyBlob required, minbytes, maxbytes
ImageBlob ImageBlob required, minbytes, maxbytes
TextBlob TextBlob required, minbytes, maxbytes
关系示例:
relationship (OneToMany | ManyToOne | OneToOne | ManyToMany) {
  [{}] to [{}]
}
  • (OneToMany | ManyToOne| OneToOne | ManyToMany) 关系类型

  • 关系拥有者的实体名

  • 目标关系的实体名

  • 关联另一方的那个字段

同时可以在一个关系类型里面添加多个关系
entity A
entity B
entity C
entity D
relationship OneToOne {
  A{b} to B{a},
  B{c} to C
}
relationship ManyToMany {
  A{d} to D{a},
  C{d} to D{c}
}
默认会关联ID字段。如果需要关联其他字段,那么在实体后的括号内加,如下:
entity A {
  name String required
}
entity B
relationship OneToOne {
  A{b} to B{a(name)}
}

枚举类型定义如下:

enum Language {
    FRENCH, ENGLISH, SPANISH
  }

在另外一个实体中引用如下:

  entity Book {
    title String required,
    description String,
    language Language
  }

BLOB(byte[]):

可以存放图片或者其他二进制类型的文件。

  • AnyBlob 或者就叫Blob 存放二进制文件的字段;
  • ImageBlob 意味着存放图片的字段.
  • TextBlob 存放长文本的字段.
各种关系的前台和数据库的体现如下:

例子:

relationship ManyToMany {
 Job{task(title)} to Task{job}
}

意思是:用Task实体的title做关联外键。

JOB前台表示如下,显示的是task的title.实体中查看详细可以直接连接到对应的Task:

image

JOB数据库表现如下,并没有task_title:

image

其他可选的操作:

entity A {
  name String required
}
entity B {}
entity C {}
dto A, B with mapstruct
paginate A, C with infinite-scroll
paginate B with pager
service A with serviceClass
service C with serviceImpl

目前我只知道分页的方式其他不懂。

分页的表现
image
  • NO:对应如下,有多少数据就显示多少:


    image
  • Simple pager:


    image
  • Pagination links:


    image
  • infinite-scroll:
    类似淘宝商品那样,触发到底部就加载接下来的数据。


    image

你可能感兴趣的:(jHipster JDL 教程)