1.什么是JDL
JDL是JHipster特定的领域语言,您可以在一个文件(或多个文件)中,使用简单易用的语法描述所有应用程序、部署、实体及其关系。
您可以使用我们的在线工具 JDL-Studio 或 JHipster IDE 相应的插件或扩展:
JDL是JHipster特定的领域语言。通过特定的JDL语法来创建JDL文件,通过jhipster jdl 文件名
指令来告诉JHipster应该如何创建项目、如何部署、如何定义实体与关系等。
可以在JHipster官网提供的在线工具JDL-Studio中编写JDL,并创建JDL文件。
2.编写JDL定义实体与联关系
最初在创建JHipster项目时,项目中没有任何实体,数据库中也没有表。想要在项目中添加实体,并确定实体间的联系,就可以通过编写JDL并在项目根目录中执行JDL来实现。
2.1.编写JDL定义实体
打开JDL-Studio,清空当前编辑器的内容,并重新输入:
// 学生实体
entity Student(student){ // 这个实体的类名是Student,对应的数据库表名是student(括号内容可以省略)
name String required
age Integer maxlength(3)
}
- Student 后面的括号 ( student ) 定义的是数据库表名,括号可以省略;
- 定义了String类型的name属性以及Integer类型的age属性,required 表示不允许为空。
- 不需要定义id,JDL在创建实体时会自动创建,同时数据库表中id字段的类型为bigint。
可选的属性类型有:
DL类型 | 校验规则 |
---|---|
String | required, minlength, maxlength, pattern, unique |
Integer | required, min, max, unique |
Long | required, min, max, unique |
BigDecimal | required, min, max, unique |
Float | required, min, max, unique |
Double | required, min, max, unique |
Enum | required, unique |
Boolean | required, unique |
LocalDate | required, unique |
ZonedDateTime | required, unique |
Instant(时间戳) | required, unique |
Duration | required, unique |
UUID | required, unique |
Blob | required, minbytes, maxbytes, unique |
AnyBlob | required, minbytes, maxbytes, unique |
ImageBlob | required, minbytes, maxbytes, unique |
TextBlob | required, unique |
允许在一个JDL文件中同时定义多个实体:
// 学生实体
entity Student{
name String required
age Integer maxlength(3)
sex Boolean required
createTime Instant required
updateTime Instant
isDelete Boolean required
}
// 班级实体
entity Clazz{
name String required
createTime Instant required
updateTime Instant
isDelete Boolean required
}
2.2.编写JDL定义实体间的关系
以Student(学生)和Clazz(班级)为例,学生与班级的关系是多对一。
在JDL文件中定义好实体后,可以在下面定义实体之间的关系:
// 学生实体
entity Student{
name String required
age Integer maxlength(3)
sex Boolean required
createTime Instant required
updateTime Instant
isDelete Boolean required
}
// 班级实体
entity Clazz{
name String required
createTime Instant required
updateTime Instant
isDelete Boolean required
}
// 定义实体之间的关系:多对一 (n:1)
relationship ManyToOne{
// 学生 - 班级
Student{clazz} to Clazz{student}
}
- 允许的关系有OneToOne、OneToMany、ManyToOne、ManyToMany;
- 花括号 { xxx } 中填写对方实体对应的表名即可。
允许在一个JDL文件中同时定义多个关系,也允许在一个relationship中定义多组关系:
// 用户
entity User {
name String required maxlength(12)
password String required minlength(6)
sex Boolean required
createTime Instant required
updateTime Instant required
isDelete Boolean required
}
// 商品
entity Product {
name String required maxlength(64)
price Double required
storage Integer required
createTime Instant required
updateTime Instant required
isDelete Boolean required
}
// 商品标签
entity Tag {
name String required maxlength(12)
createTime Instant required
updateTime Instant required
isDelete Boolean required
}
// 多对多
relationship ManyToMany {
User{product} to Product{user}
Product{tag} to Tag{product}
}
3.下载、上传、执行JDL文件
特别注意:在执行JDL文件加载实体和关系之前,必须要有一个现成的JHipster项目
在编写完毕后,在右上角点击按钮下载JDL文件
在服务器已配置好JHipster依赖环境的前提下,将下载好的JDL文件上传到项目根目录中,随后使用jhipster jdl JDL文件名
指令执行JDL文件即可,举例:
- 假设项目根目录是/jhipster-project/test-jhipster;
- 假设JDL文件名字是jhipster-jdl.jdl。
# 进入到项目根目录
cd /jhipster-project/test-jhipster
# 执行JDL文件
jhipster jdl jhipster-jdl.jdl
随后等待加载完毕即可。
需要特别注意的是,如果项目是中文,加载之前需要确保数据库编码为UTF-8:
如果项目最开始设定的语言是中文,JHipster在创建好数据库表后会插入假数据,其中会包括中文;
在没有配置数据库编码时,MySQL默认的编码类型不是UTF-8,插入数据就会报错;解决方案:MySQL查看与修改编码方式(mysql、数据库、表)
修改好数据库编码后,删掉数据库表并重新建表,再重新执行JDL文件即可。