JHipster 基礎使用

認識JHipster

JHipster又稱Java Hipster,是一個Java代碼腳手架,hipster 的意思是時髦的 意思是最時髦的Java解決方案
他的主要核心是Spring Boot,還有Anaglar React 熱門的前端框架,是Spring Boot開發的最佳實踐,同時也支持Spring Cloud

JHipster 技術棧

前端

單頁面程序

  • Angular 5 or React
  • Bootstrap響應式佈局
  • HTML5 模板
  • 兼容ie11和現代遊覽器
  • 國際化支持
  • scss
  • 支持 Spring WebSocket

開發工具

  • 支持yarn 安裝依賴
  • 支持webpack 開發
  • 支持JestProtractor 測試框架

同時也支持後端Thymeleaf渲染

後端

  • Spring Boot 簡化配置
  • Maven or Gradle 構建工具, 測試並運行應用
  • spring profiles 開發環境和生產環境 (Maven and Gradle)
  • Spring Security 安全管理框架
  • Spring MVC REST + Jackson
  • 可選的 WebSocket 支持 with Spring Websocket
  • Spring Data JPA + Bean Validation
  • Liquibase 數據庫版本管理
  • Elasticsearch 搜索引擎
  • MongoDB and Couchbase no-sql 數據庫支持
  • Kafka 支持
  • 可選的微服務組件
  • ELK應用監測
  • ehcache hazelcast or Infinispan 緩存
  • logback 日誌管理
  • HikariCP 連接池(號稱最快的連接池)
  • docker 打包支持
  • 標準 war jar 打包支持
  • 主要的微服務提供AWS, Cloud Foundry, Heroku, Kubernetes, OpenShift, Docker…

安裝JHipster

JHipster 依賴node 的Yeoman框架,所以安裝之前必須安裝node

step 1: 安裝yeoman

npm install -g yo

step 2:安裝JHipster

npm install -g generator-jhipster

第一個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導入即可

命令行參數

  • –help - 答應生成器的options
  • –blueprint - 指定使用一種語言. For example jhipster –blueprint kotlin
  • –skip-cache - 不提示緩存在對話中會跳過 (Default: false)
  • –skip-git -不添加只git倉庫 (Default: false)
  • –skip-install - 不自動下載依賴(Default: false)
  • –skip-client - 跳過前端代碼生成, 只會有後端代碼生成 (Default: false)
  • –skip-server - 通過後端代碼生成(Default: false)
  • –skip-user-management - 前後臺通過用戶管理生成 (Default: false)
  • –i18n - 指定i18n的狀態 (Default: true)
  • –auth - 當取消服務端時選擇授權方式,當跳過服務端時不是必須的
  • –db - 指定數據庫,當跳過服務端時不是必須的
  • –with-entities - 覆蓋已經生成的實體 (使用 .jhipster 文件夾中的配置) (Default: false)
  • –skip-checks - 通過檢查需要的工具 (Default: false)
  • –jhi-prefix - 在服務、組件和狀態/路由名稱之前添加前綴(Default: jhi)
  • –npm - Use NPM instead of Yarn (Default: false)
  • –experimental - 啓用實驗功能,這些功能是不穩定的可能隨時崩潰

使用JHipster創建實體

當你創建了你的應用,你就會想去創建實體,比如你想創建一個Author 和 Book實體,對於每個實體,你需要以下步驟

  • 在數據庫建立表
  • Liquibase 添加一條修改記錄
  • 創建 JPA 實體
  • 創建 JPA Repository
  • 創建Spring MVC REST Controller 提供基礎的CURD 操作
  • 創建Angular路由,一個組件和一個service
  • 創建一個HTMl頁面
  • 集成測試取保各個方面都正常

上面的步驟很多,大部分也都是我們日常做的東西,現在使用JHipster可以自動幫我們生成這些代碼

使用子生成器 entity 生成代碼

entity 子生成器可以爲每一個實體生成前後臺的CRUD操作

使用姿勢

jhipster entity <entityName> --[options]

options
- –table-name - JHipster默認會根據你的實體名去創建表, 如果你的表名和你的實體名不一樣可以使用這個參數
- –angular-suffix - 設置anaglar路由前綴
- –regenerate - 無提示覆蓋已經生成的實體
- –skip-server - 跳過服務端代碼生成
- –skip-client - 跳過前端代碼生成
- –db - 指定數據庫

JHipster UML and JDL Studio

上面的介紹瞭如何使用命令行創建實體,如果你需要重建大量實體,並且這些實體之間的關係錯綜複雜,這是你就需要一個圖形化工具來操作

  • JHipster UML 使用uml編輯器生成
  • JDL Studio 在線生成工具 使用JHipster定義的domain-specific language JDL.

使用JDL Studio 生成實體

網站打不開的可以戳這裏下載傳送門 如果不想下載eclipse 和 vs code 的插件庫中也有jhipster的插件,idea暫時沒有

使用JDL Studio 導出會下載一個 xxx.jh 後綴的文件
然後就可以使用 import-jdl 子生成器生成代碼

正確的打開方式

jhipster import-jdl your-jdl-file.jh --[options]

options

  • –json-only 不覆蓋已經生成的實體,只在.jhipster 文件夾中生成json文件
  • –force 覆蓋已經生成的實體

如果你想用JHipster UML代替 iimport-jdl 生成器 你需要 npm install -g jhipster-uml 然後運行 jhipster-uml yourFileName.jh

JDL介紹

JHipster Domain Language (JDL) 是一種特殊的領域模型語言,這種語言讓你可以在一個或多個文件中用簡單友好的語法去描述你的實體和實體之間的關係

當你有一個生成的項目或者已經存在的項目(跳過jhipster生成),你可以使用 import-jdl子生成器,通過運行在項目目錄下運行 jhipster import-jdl your-jdl-file.jh生成實體,你也能通過 JHipster UML 生成實體並導出爲JDL文件

定義實體

entity <entity name> {
  <field name> <type> [<validation>*]
}
  • 實體名
  • 字段名
  • 字段類型
  • 字段的檢驗

舉個例子

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) {
  <from entity>[{<relationship name>[(<display field>)]}] to <to entity>[{<relationship name>[(<display field>)]}]
}
  • (OneToMany | ManyToOne| OneToOne | ManyToMany)
  • 關係的出發點 source
  • 關係的目的地 target
  • 外鍵字段
  • 顯示字段(default: id),
  • required 是否需要注入的字段

舉個例子

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 or Blob 適用任何二進制類型
  • ImageBlob 圖片類型
  • TextBlob 文本類型

定義操作

JDL可以定義實體的分頁或DTO等操作
格式
<option> <ENTITIES | * | all> with <option>

可用的操作

  • dto (mapstruct)
  • service (serviceClass, serviceImpl)
  • paginate (pager, pagination, infinite-scroll)
  • search (elasticsearch)
  • microservice (custom value)
  • angularSuffix (custom value)

其他操作
<OPTION> <ENTITIES | * | all> except? <ENTITIES>

可用的操作

  • skipClient
  • skipServer
  • noFluentMethod
  • filter
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指定表名

註釋 & Javadoc

/**
 * 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}
}

Constants 常量

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

創建Spring 控制器

語法

jhipster spring-controller Foo

回答命令行的問題選擇需要的方法

創建Spring service

語法

jhipster spring-service Foo

查詢懶加載需要加@Transactional註解

升級應用

當一個新的JHipster 版本出來是,你可以使用子生成器 upgrade 來升級你的應用
這樣就可以使用JHipster的最新功能並且能修復一些bug

語法

cd myapp/
jhipster upgrade

options

  • –verbose 日誌中打印升級詳情
  • –target-version=4.2.0 升級至指定版本
  • –force 強制更新
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章