JHipster又称Java Hipster,是一个Java代码脚手架,hipster 的意思是时髦的
意思是最时髦的Java解决方案
他的主要核心是Spring Boot,还有Anaglar React 热门的前端框架,是Spring Boot开发的最佳实践,同时也支持Spring Cloud
单页面程序
Angular 5
orReact
Bootstrap
响应式布局HTML5
模板ie11
和现代游览器scss
Spring WebSocket
开发工具
- 支持
yarn
安装依赖
webpack
开发Jest
和 Protractor
测试框架同时也支持后端Thymeleaf
渲染
- Spring Boot 简化配置
JHipster 依赖node 的Yeoman框架,所以安装之前必须安装
nodejs
为什么Java的代码生成器要用nodejs写呢,我觉的可能是歪果仁嫌Java要写写的太多了,没有js脚本写的简洁
step 1
: 安装yeoman
npm install -g yo
step 2
:安装JHipster
npm install -g generator-jhipster
step1
:打开dos窗口
mkdir myapplication
cd myapplication/
yo jhipster
step2
:根据你的需要选择你要的选项
输入完命令后悔出现一大堆的交互问答,如下
What is the base name of your application?(jhipster)
这个是问你项目是啥 输入项目名回车进行下一步
What is your default Java package name?(com.mycompany.myapp)
项目的包名
Which type of authentication would you like to use?(Use arrow keys)
上下箭头选择 根据你的业务详情选择合适的授权方案
Which type of database would you like to use?(Use arrow keys)
选择需要的数据库类型
Which production database would you like to use?(use arrow keys)
具体的数据库产品
which development database would you like to use?
开发是用什么数据库 h2保存在磁盘中不windows下有的问题
Do you want to use Hibernate 2nd level cache?
是否开启二级缓存
Do you want to use a search engine in your application?
是否需要搜索引擎
Do you want to use clustered HTTP sessions?
是否需要使用集群session
Do you want to use WebSocket?
是否需要使用websocket
Would you like to use Maven or Gradle for building the backend?
使用maven还是gradle构建项目
Would you like to use Grunt or Gulp.js for building the frontend?
是否使用glup来构建前端应用
Would you like to use the LibSass stylesheet preprocessor for your css?
是否使用LibSass作为css样式表处理器
Would you like to enable translation support with Angular Translate?
是否使用Anaglar的翻译支持
Which testing frameworks would you like to use?
选择测试框架
所有的问题都回答完就会自动生成项目,然后使用ide导入即可
当你创建了你的应用,你就会想去创建实体,比如你想创建一个Author 和 Book实体,对于每个实体,你需要以下步骤
上面的步骤很多,大部分也都是我们日常做的东西,现在使用JHipster可以自动帮我们生成这些代码
entity
生成代码entity 子生成器可以为每一个实体生成前后台的CRUD操作
使用姿势
jhipster entity --[options]
options
上面的介绍了如何使用命令行创建实体,如果你需要重建大量实体,并且这些实体之间的关系错综复杂,这是你就需要一个图形化工具来操作
JHipster UML
使用uml编辑器生成
JDL Studio
在线生成工具 使用JHipster定义的domain-specific language JDL
.网站打不开的可以戳这里下载传送门 如果不想下载eclipse 和 vs code 的插件库中也有jhipster的插件,idea暂时没有
使用JDL Studio 导出会下载一个 xxx.jh
后缀的文件
然后就可以使用 import-jdl
子生成器生成代码
正确的打开方式
jhipster import-jdl your-jdl-file.jh --[options]
options
- –json-only 不覆盖已经生成的实体,只在
.jhipster
文件夹中生成json文件
如果你想用JHipster UML
代替 iimport-jdl 生成器 你需要 npm install -g jhipster-uml
然后运行 jhipster-uml yourFileName.jh
JHipster Domain Language (JDL)
是一种特殊的领域模型语言,这种语言让你可以在一个或多个文件中用简单友好的语法去描述你的实体和实体之间的关系
当你有一个生成的项目或者已经存在的项目(跳过jhipster生成),你可以使用 import-jdl
子生成器,通过运行在项目目录下运行 jhipster import-jdl your-jdl-file.jh
生成实体,你也能通过 JHipster UML
生成实体并导出为JDL文件
entity {
[*]
}
- 实体名
举个例子
entity A
entity B
entity C 空实体不用带{}
entity D {
name String required,
address String required maxlength(100),
age Integer required min(18)
}
//使用正则表达式校验
entity A {
myString String required minlength(1) maxlength(42) pattern(/[A-Z]+/)
}
JHipster 会默认加上id字段
relationship (OneToMany | ManyToOne | OneToOne | ManyToMany) {
[{[()]}] to [{[()]}]
}
- (OneToMany | ManyToOne| OneToOne | ManyToMany)
举个例子
entity Book
entity Author {
name String required
}
relationship OneToMany {
Author{book} to Book{writer(name) required}
}
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}
}
entity A {
name String required
}
entity B
relationship OneToOne {
A{b} to B{a(name)}
}
在JDL中创建枚举
enum Language {
FRENCH, ENGLISH, SPANISH
}
在实体中使用枚举作为字段类型
entity Book {
title String required,
description String,
language Language
}
JHipster 给出了三种二进制数据类型
AnyBlob
orBlob
适用任何二进制类型
ImageBlob
图片类型TextBlob
文本类型JDL可以定义实体的分页或DTO等操作
格式
可用的操作
- dto (mapstruct)
其他操作
可用的操作
- skipClient
entity A {
name String required
}
entity B
entity C
dto A, B with mapstruct //生成dto
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
service option
entity A
entity B
entity C
service B with serviceClass //不带service接口的
service C with serviceImpl //带service接口的
使用 *
或 all
匹配所有, *
和 all
是等价的
entity A
entity B
...
entity Z
dto * with mapstruct except A
service all with serviceImpl except A, B, C
paginate C with pagination
skip option
entity A
entity B
entity C
skipClient for A
skipServer for B
angularSuffix * with mySuperEntities 路由前缀
entity option
entity A // A 默认是表名
entity B (table_name) // table_name指定表名
/**
* Class comments.
* @author The JHipster team.
*/
entity MyEntity { // another form of comment
/** A required attribute */
myField String required,
mySecondField String // another form of comment
}
/**
* Second entity.
*/
entity MySecondEntity {}
relationship OneToMany {
/** This is possible too! */
MyEntity{mySecondEntity}
to
/**
* And this too!
*/
MySecondEntity{myEntity}
}
DEFAULT_MIN_LENGTH = 1
DEFAULT_MAX_LENGTH = 42
DEFAULT_MIN_BYTES = 20
DEFAULT_MAX_BYTES = 40
DEFAULT_MIN = 0
DEFAULT_MAX = 41
entity A {
name String minlength(DEFAULT_MIN_LENGTH) maxlength(DEFAULT_MAX_LENGTH)
content TextBlob minbytes(DEFAULT_MIN_BYTES) maxbytes(DEFAULT_MAX_BYTES)
count Integer min(DEFAULT_MIN) max(DEFAULT_MAX)
}
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 | |
Instant | Instant | Instant | required |
语法
jhipster spring-controller Foo
回答命令行的问题选择需要的方法
语法
jhipster spring-service Foo
查询懒加载需要加@Transactional注解
当一个新的JHipster 版本出来是,你可以使用子生成器 upgrade
来升级你的应用
这样就可以使用JHipster的最新功能并且能修复一些bug
语法
cd myapp/
jhipster upgrade
options
- –verbose 日志中打印升级详情
- –target-version=4.2.0 升级至指定版本
- –force 强制更新
最后推荐下我的个人博客 www.youngboy.vip