JHipster-从零开始学习指南
文章目录
- 什么是JHipster
- 简单类比
- 技术组成
- 解决的问题
- 为什么要使用JHipster
- 1. 极大提升开发效率
- 2. 遵循最佳实践
- 3. 技术栈选择灵活
- 快速体验
- 步骤1:环境准备
- 步骤2:安装JHipster
- 步骤3:创建第一个项目
- 步骤4:配置选择(新手推荐)
- 步骤5:项目生成
- 步骤6:启动应用
- 核心概念解析
- 1. 项目结构一览
- 2. 关键文件说明
- 3. 数据流理解
- 4. 开发工作流
- 实战项目:博客系统
- 项目需求分析
- 步骤1:设计数据模型
- 步骤2:使用JDL定义模型
- 步骤3:生成实体
- 步骤4:查看生成的代码
- 步骤5:启动和测试
- 步骤6:自定义业务逻辑
什么是JHipster
简单类比
JHipster就像是一个"全栈应用制造机"
想象你要建一栋房子:
- 传统方式:从打地基开始,一砖一瓦地建造(手写所有代码)
- JHipster方式:选择户型(单体/微服务)→选择装修风格(Angular/React/Vue)→自动建成(生成完整项目)
技术组成
JHipster = Spring Boot (后端) + 前端框架 + 开发工具链
具体包含:
- 后端:Spring Boot(Java的Web框架)
- 前端:Angular、React或Vue(三选一)
- 数据库:MySQL、PostgreSQL等
- 工具:Maven/Gradle(构建)+ Docker(部署)
解决的问题
传统开发痛点:
# 手动搭建项目需要繁琐的操作步骤和时间
1. 创建Spring Boot项目结构
2. 配置数据库连接
3. 设置前端框架
4. 配置用户认证
5. 设置CI/CD
6. 配置部署环境
JHipster解决方案:
# 一条命令生成完整项目
jhipster # ⏰ 5分钟完成所有配置
为什么要使用JHipster
1. 极大提升开发效率
对比示例:开发一个用户管理系统
功能 | 手写代码时间 | JHipster生成 |
---|---|---|
用户注册/登录 | 2-3天 | 自动生成 ✅ |
数据库设计 | 1天 | 自动生成 ✅ |
REST API | 2天 | 自动生成 ✅ |
前端界面 | 3-4天 | 自动生成 ✅ |
单元测试 | 1-2天 | 自动生成 ✅ |
部署配置 | 1天 | 自动生成 ✅ |
总计 | 10-13天 | 30分钟 |
2. 遵循最佳实践
JHipster生成的代码自动包含:
- ✅ 安全配置(JWT认证、CORS等)
- ✅ 性能优化(缓存、连接池等)
- ✅ 测试覆盖(单元测试、集成测试)
- ✅ 生产就绪配置(日志、监控等)
3. 技术栈选择灵活
快速体验
步骤1:环境准备
# 检查Node.js版本(需要18+)
node --version# 检查Java版本(需要17+)
java -version# 如果没有安装,请先安装:
# Windows: 下载官方安装包
# macOS: brew install node openjdk@17
# Linux: apt-get install nodejs openjdk-17-jdk
步骤2:安装JHipster
# 安装Yeoman(JHipster的基础框架)
npm install -g yo# 安装JHipster
npm install -g generator-jhipster# 验证安装
jhipster --version
步骤3:创建第一个项目
# 创建项目目录
mkdir my-first-app
cd my-first-app# 启动JHipster向导
jhipster
步骤4:配置选择(新手推荐)
JHipster会问你一系列问题,新手建议这样选择:
? Which type of application would you like to create?
选择: Monolithic application (recommended for simple projects)
解释: 单体应用,适合学习和小项目? What is the base name of your application?
输入: blogApp
解释: 应用名称,会影响生成的类名和包名? What is your default Java package name?
输入: com.mycompany.blog
解释: Java包名,遵循com.公司名.项目名格式? Do you want to use Maven or Gradle?
选择: Maven
解释: Maven更常用,学习资源更多? Which Framework would you like to use for the client?
选择: Angular
解释: Angular是JHipster默认支持最好的前端框架? Do you want to use a Bootswatch theme?
选择: Default JHipster
解释: 使用默认主题,简单清爽? Which database do you want to use?
选择: SQL (H2, PostgreSQL, MySQL, MariaDB, Oracle, MSSQL)
解释: 关系数据库,最常用的类型? Which production database would you like to use?
选择: PostgreSQL
解释: 开源、性能好、功能强大? Which development database would you like to use?
选择: H2 with disk-based persistence
解释: 开发时使用内存数据库,方便测试? Which cache do you want to use?
选择: Ehcache (local cache, for a single node)
解释: 本地缓存,适合单体应用? Would you like to use Hibernate 2nd level cache?
选择: Yes
解释: 启用二级缓存,提升性能? Would you like to integrate JHipster with the JHipster Control Center?
选择: No
解释: 新手暂时不需要监控中心? Would you like to use Maven or Gradle for building the backend?
选择: Maven
解释: 与前面选择保持一致? Besides JUnit, which testing frameworks would you like to use?
选择: 直接回车(不选额外框架)
解释: JUnit已经足够? Would you like to install other generators from the JHipster Marketplace?
选择: No
解释: 新手先掌握基础功能
步骤5:项目生成
# JHipster开始生成项目,你会看到:██╗ ██╗ ██╗ ████████╗ ███████╗ ██████╗ ████████╗ ████████╗ ███████╗██║ ██║ ██║ ╚══██╔══╝ ██╔═══██╗ ██╔════╝ ╚══██╔══╝ ██╔═════╝ ██╔═══██╗██║ ████████║ ██║ ███████╔╝ ╚█████╗ ██║ ██████╗ ███████╔╝██╗ ██║ ██╔═══██║ ██║ ██╔════╝ ╚═══██╗ ██║ ██╔═══╝ ██╔══██║╚██████╔╝ ██║ ██║ ████████╗ ██║ ██████╔╝ ██║ ████████╗ ██║ ╚██╗╚═════╝ ╚═╝ ╚═╝ ╚═══════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══════╝ ╚═╝ ╚═╝Welcome to JHipster v8.0.0!# 等待几分钟,项目生成完成后:
Application successfully committed to Git.If you find JHipster useful consider sponsoring the project...
步骤6:启动应用
# 启动后端(新开一个终端窗口)
./mvnw# 启动前端(再开一个终端窗口)
npm start
🎉 成功!打开浏览器访问 http://localhost:9000
你会看到一个完整的Web应用,包括:
- 登录页面
- 用户管理
- 系统监控
- API文档
核心概念解析
1. 项目结构一览
my-first-app/
├── src/main/java/ # Java后端代码
│ └── com/mycompany/blog/
│ ├── BlogAppApplication.java # 启动类
│ ├── config/ # 配置类
│ ├── domain/ # 实体类
│ ├── repository/ # 数据访问层
│ ├── service/ # 业务逻辑层
│ └── web/rest/ # REST控制器
├── src/main/webapp/ # 前端代码
│ ├── app/ # Angular应用
│ ├── content/ # 静态资源
│ └── i18n/ # 国际化文件
├── src/test/ # 测试代码
├── pom.xml # Maven配置
└── package.json # npm配置
2. 关键文件说明
后端核心文件:
// src/main/java/com/mycompany/blog/BlogAppApplication.java
@SpringBootApplication
public class BlogAppApplication {public static void main(String[] args) {SpringApplication.run(BlogAppApplication.class, args);}
}
// 这是Spring Boot应用的启动入口
# src/main/resources/application.yml
spring:application:name: blogAppdatasource:url: jdbc:h2:file:./target/h2db/db/blogappusername: blogApppassword:
# 这里配置数据库连接、缓存等
前端核心文件:
// src/main/webapp/app/app.module.ts
@NgModule({imports: [BrowserModule,SharedModule,CoreModule,HomeModule,EntityRoutingModule,AppRoutingModule,],declarations: [MainComponent, NavbarComponent, ErrorComponent, PageRibbonComponent, ActiveMenuDirective, FooterComponent],bootstrap: [MainComponent],
})
export class AppModule {}
// Angular应用的主模块
3. 数据流理解
4. 开发工作流
典型的开发过程:
# 1. 创建实体(数据模型)
jhipster entity User# 2. JHipster会自动生成:
# - User.java (实体类)
# - UserRepository.java (数据访问)
# - UserService.java (业务逻辑)
# - UserResource.java (REST API)
# - user.component.ts (前端组件)
# - 相关测试文件# 3. 启动应用测试功能
./mvnw# 4. 如需修改,编辑生成的文件
# 5. 重复测试直到满足需求
实战项目:博客系统
项目需求分析
我们要创建一个博客系统,包含:
- 👤 用户管理(注册、登录)
- 📝 文章管理(发布、编辑、删除)
- 🏷️ 标签分类
- 💬 评论功能
步骤1:设计数据模型
实体关系图:
步骤2:使用JDL定义模型
创建文件 blog-model.jdl
:
// 实体定义
entity BlogPost {title String required maxlength(100)content TextBlob requiredpublishDate Instantpublished Boolean
}entity Tag {name String required minlength(2) maxlength(50)color String pattern(/^#[0-9a-fA-F]{6}$/)
}entity Comment {content TextBlob requiredcommentDate Instant requiredapproved Boolean
}// 关系定义
relationship OneToMany {User{posts} to BlogPost{author(login) required}BlogPost{comments} to Comment{post required}User{comments} to Comment{author(login) required}
}relationship ManyToMany {BlogPost{tags} to Tag{posts}
}// 配置选项
paginate BlogPost with pagination
paginate Comment with infinite-scroll
service all with serviceImpl
dto all with mapstruct
search BlogPost with elasticsearch
步骤3:生成实体
# 导入JDL文件
jhipster jdl blog-model.jdl# JHipster会询问是否覆盖现有文件,选择适当的选项
# 'a' = 全部覆盖
# 'y' = 逐个确认
步骤4:查看生成的代码
后端文件结构:
src/main/java/com/mycompany/blog/
├── domain/
│ ├── BlogPost.java # 博客文章实体
│ ├── Tag.java # 标签实体
│ └── Comment.java # 评论实体
├── repository/
│ ├── BlogPostRepository.java
│ ├── TagRepository.java
│ └── CommentRepository.java
├── service/
│ ├── BlogPostService.java
│ ├── TagService.java
│ └── CommentService.java
└── web/rest/├── BlogPostResource.java # REST API接口├── TagResource.java└── CommentResource.java
前端文件结构:
src/main/webapp/app/entities/
├── blog-post/
│ ├── blog-post.component.html # 列表页面
│ ├── blog-post-detail.component.html # 详情页面
│ └── blog-post-update.component.html # 编辑页面
├── tag/
└── comment/
步骤5:启动和测试
# 启动应用
./mvnw# 访问应用
# http://localhost:8080
# 默认用户名:admin
# 默认密码:admin
测试功能:
- 登录系统
- 点击菜单中的"Entities"
- 选择"Blog Post"
- 点击"Create a new Blog Post"
- 填写表单并保存
步骤6:自定义业务逻辑
示例:添加发布博客功能
// src/main/java/com/mycompany/blog/service/BlogPostService.java
@Service
@Transactional
public class BlogPostService {// ... 已有代码 .../*** 发布博客文章*/public BlogPostDTO publish(Long id) {log.debug("Request to publish BlogPost : {}", id);return blogPostRepository.findById(id).map(blogPost -> {blogPost.setPublished(true);blogPost.setPublishDate(Instant.now());return blogPost;}).map(blogPostMapper::toDto).orElseThrow(() -> new BadRequestAlertException("BlogPost not found", "blogPost", "idnotfound"));}
}
// src/main/java/com/mycompany/blog/web/rest/BlogPostResource.java
@RestController
@RequestMapping("/api")
public class BlogPostResource {// ... 已有代码 .../*** POST /blog-posts/{id}/publish : 发布博客文章*/@PostMapping("/blog-posts/{id}/publish")public ResponseEntity<BlogPostDTO> publishBlogPost(@PathVariable Long id) {log.debug("REST request to publish BlogPost : {}", id);BlogPostDTO result = blogPostService.publish(id);return ResponseEntity.ok().headers(HeaderUtil.createEntityUpdateAlert(applicationName, true, ENTITY_NAME, id.toString())).body(result);}
}