Jhipster开发平台笔记
🎨

Jhipster开发平台笔记

Created
Mar 7, 2023 12:04 PM
Tags

简介

Jhipster是一个全栈的快速开发平台, 后端为Springboot项目, 前端可选择Angular, VUE或者React

安装基础环境

1. 安装 Java、 Git 和 Node.js
Java好像必须要jdk11以上, 可以直接下载jdk17
2. 安装JHipster npm install -g generator-jhipster

初始化项目

3. 创建一个新目录并进入 mkdir myApp && cd myApp
4. 运行Jhipster并根据屏幕指示操作 jhipster
notion image
Q: 想创建哪种类型的项目
A: 普通Java项目, 网关项目, 微服务项目, 这边就先选择第一个普通的项目。
notion image
Q: 项目名称
A: 随便
notion image
Q: 是否要创建响应式的Spring WebFlus项目?
A: 老老实实用SpringMVC吧, webflux还不太成熟, 与其他异步IO框架整合不是太好
notion image
Q: java的package包名
A: 按实际填写
notion image
Q: 使用什么认证授权技术?
A: JWT, OAUTH或者普通的Cookie/Session, 按实际选择
notion image
Q: 喜欢用什么数据库?
A: 感觉像调研问题一样, 按实际选择
notion image
Q: 在生产环境中使用的数据库类型
A: 按实际选择
notion image
Q: 在开发环境中使用的数据库类型
A: 按实际选择
notion image
Q: 使用什么缓存框架
A: 按实际选择
notion image
Q: 是否要开启hibernate二级缓存
A: 按实际选择
notion image
Q: 使用maven还是grandle管理项目
A: 按喜好选择
notion image
Q: 使用jhipster注册中心什么东西的没看明白
A: 默认no
notion image
Q: 还想使用什么别的技术吗
A: 按实际选择
notion image
Q: 使用什么前端框架
A: 按实际选择
notion image
Q: 是否生成admin管理端的代码
A: y
notion image
Q: 选择一个前端项目的风格
A: 可以参考那个网站
notion image
Q: 是否开启国际化支持
A: 按实际选择
notion image
Q: 选择你的家乡话
A: 按实际选择
notion image
Q: 除了那俩玩意你还想用什么测试框架
A: 那俩玩意也不想用 全删了最好
notion image
Q: 你还想用别的生成框架吗
A: 下次吧

JDL文件设计

使用 JDL Studio 设计您的实体类后, 下载jhipster-jdl.jh文件 (jdl文件和jh文件是一样的)
JDL所有语法参考这里: https://www.jhipster.tech/cn/jdl/
示例配置可以参考JDL Studio里的默认配置, 这边给出一个我喜欢的CURD的简单的配置
entity SysCom(SYS_COM) { /** 主键 */ id Long /** 头像 */ avatar String /** 姓名 */ name String required } // 设置无限滚动 // paginate xxx with infinite-scroll // 所有实体类全都生成分页 paginate * with pagination // 所有controller全部直接调用Service类 service * with serviceClass

生成实体类代码/按个人喜好修改配置

生成实体类代码 jhipster jdl jhipster-jdl.jh
 
application-dev.yml修改数据库连接配置
 
关闭liquibase, 开启jpa自动更新表结构:
application.yml中dev这个group增加一个配置 --no-liquibase
application.yml中ddl-auto改为update
notion image
 
增加jackson序列化反序列化相关配置:
jackson: locale: zh time-zone: GMT+8 date-format: yyyy-MM-dd HH:mm:ss deserialization: # json字符串中有不存在的属性时失败 fail_on_unknown_properties: false parser: # 允许出现特殊字符和转义符 allow_unquoted_control_chars: true # 允许出现单引号 allow_single_quotes: true
更改JPA时区配置:
hibernate.jdbc.time_zone: GMT+8
 
pom.xml中profile配置默认开启了两个, 一个是dev, 一个是webapp, (activeByDefault标签, 打包的时候按需求开启
notion image
 
然后就可以按普通springboot项目一样启动了~
 

附录1: JDL相关说明

关于实体:
声明语法如下:
[<entity javadoc>] [<entity annotation>*] entity <entity name> [(<table name>)] { [<field javadoc>] [<field annotation>*] <field name> <field type> [<validation>*] } 必选项: <entity name> 实体名称, <field name> 实体属性名称, <field type> JHipster支持的属性类型, 可选项: <entity javadoc> 实体描述, <entity annotation> 实体的选项(有关可用选项的完整列表,请参见选项), <table name> 数据库表名称(如果要指定与实体名称自动转换不同的名称), <field javadoc> 属性描述, <field annotation> 属性的选项, <validation> 属性的校验规则。 简单栗子: /** * 这是关于实体类的注释 * @author 作者名称 */ @dto(mapstruct) // 使用mapstruct生成dto @search(elastisearch) // 使用es进行搜索 @service(serviceClass) // 直接生成service类 不使用service接口 entity SysUser(SYS_USER) { // entity是用来声明实体的关键字 SysUser是实体类的名称 SYS_USER是表名称 /** * This comment will also be used! * @type... */ id UUID required // id字段每个实体类都会默认添加, 默认为Long类型, 如果想改变id的类型, 必须要显式声明一下 age Integer min(32) max(32) }
以下是JDL支持的所有字段类型和校验规则
JDL类型
校验规则
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支持的所有实体选项
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
关于关联关系:
声明语法如下:
relationship (OneToMany | ManyToOne | OneToOne | ManyToMany) { <from entity>[{<relationship name>[(<display field>)]}] to <to entity>[{<relationship name>[(<display field>)]}]+ } 选项: (OneToMany | ManyToOne| OneToOne | ManyToMany) 是你的关系类型 <from entity> 是关系的实体所有者的名称:源实体, <to entity> 是关系要到达的实体的名称:目的实体, <relationship name> 是具有另一端类型的属性名称, <display field> 是应显示在选择框中的字段名称(默认值:id), required 引入的关系属性是否不能为空。 with jpaDerivedIdentifier 或 @MapsId 用于关联关系 (仅适用于一对一(one-to-one) 简单栗子: relationship ManyToMany { SysJob{sysTask(name) required} to SysTask{sysJob(title)} } 上面关系的意思为, 一个SysJob实体对应着多个SysTask实体, required 表示每个SysJob必须最少有一个SysTask, 在SysJob实体类中SysTask集合的字段名为sysTask(会自动处理复数名称), 在前端选项列表里展示的SysTask的字段名称为name, 同时另一端SysTask也对应着多个SysJob实体, 在SysTask实体类中的SysJob集合的字段名为sysTask(会自动处理复数名称), 在前端选项列表里展示的SysJob的字段名称为title,
看中文官方文档不要相信这段鬼话:
notion image
英文文档中根本没有这一段话, 应该是翻译的时候自己加上去的, 这里理解有误, 小括号中的name只是前端选项列表里展示的字段, 并不是指定与哪一列连接, 连接列默认就是id, 并且好像不可更改
notion image
 
 

附录2: 关于关联关系生成的代码

OneToMany:
@ManyToOne @JsonIgnoreProperties(value = { "sysStudents" }, allowSetters = true) private SysClass sysClass; @OneToMany(mappedBy = "sysClass") @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) @JsonIgnoreProperties(value = { "sysClass" }, allowSetters = true) private Set<SysStudent> sysStudents = new HashSet<>();
关于 一对多/多对一 关系的说明(@JoinColumn and mappedBy):
上面这个例子中没有使用@JoinColumn注解, 不使用 @JoinColumn,Hibernate 会自动在表中生成关联字段,字段默认的命名规则为 “附属类名_附属主键”,如:password_id
mappedBy表示根据另一方的哪个字段来获取关联实体集合.
@JsonIgnoreProperties的value表示在字段所属的实体类里面忽略掉哪几个属性
@JsonIgnoreProperties的allowSetters = true表示允许反序列化
 
OneToOne和ManyToOne默认立即加载, OneToMany和ManyToMany默认懒加载, 可以使用
open-in-view: false简单来说就是在Controller层里面获取不到懒加载的字段, 所以要获取懒加载字段要在service层获取.
 
后记: 还有很多东西以后慢慢研究…