JHipster | 03.编写JDL文件定义实体

1.什么是JDL

JDL是JHipster特定的领域语言,您可以在一个文件(或多个文件)中,使用简单易用的语法描述所有应用程序、部署、实体及其关系。

您可以使用我们的在线工具 JDL-StudioJHipster 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类型校验规则
Stringrequired, minlength, maxlength, pattern, unique
Integerrequired, min, max, unique
Longrequired, min, max, unique
BigDecimalrequired, min, max, unique
Floatrequired, min, max, unique
Doublerequired, min, max, unique
Enumrequired, unique
Booleanrequired, unique
LocalDaterequired, unique
ZonedDateTimerequired, unique
Instant(时间戳)required, unique
Durationrequired, unique
UUIDrequired, unique
Blobrequired, minbytes, maxbytes, unique
AnyBlobrequired, minbytes, maxbytes, unique
ImageBlobrequired, minbytes, maxbytes, unique
TextBlobrequired, 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定义实体间的关系

JHipster 领域语言 (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文件

image-20220511133935543

在服务器已配置好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文件即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是对应的JDL图: ``` // 定义实体 entity Teacher { name String required, age Integer, gender String } entity Student { name String required, age Integer, gender String } entity Admin { name String required, age Integer, gender String } entity Lab { name String required, capacity Integer, location String } entity Reservation { startTime LocalDate, endTime LocalDate, status String } entity Message { content String, createTime ZonedDateTime } // 定义实体之间的关系 relationship ManyToMany { Teacher{reserved} to Lab{reservedBy}, Student{reserved} to Lab{reservedBy} } relationship OneToMany { Admin{audit} to Reservation{auditedBy} } relationship ManyToOne { Reservation{belongsTo} to Student, Reservation{belongsTo} to Teacher } // 定义枚举类型 enum ReservationStatus { PENDING, APPROVED, REJECTED } // 定义DTO dto ReservationDTO { startTime LocalDate, endTime LocalDate, status ReservationStatus } dto LabDTO { name String, capacity Integer, location String } // 定义服务 service ReservationService { createReservation(reservationDTO: ReservationDTO) : ReservationDTO getReservation(id: Long) : ReservationDTO updateReservation(reservationDTO: ReservationDTO) : ReservationDTO deleteReservation(id: Long) } service LabService { createLab(labDTO: LabDTO) : LabDTO getLab(id: Long) : LabDTO updateLab(labDTO: LabDTO) : LabDTO deleteLab(id: Long) } // 定义过滤器 filter ReservationFilter { status String, labId Long } filter LabFilter { name String, location String } // 定义分页器 paginate Reservation, Lab with pagination ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值