Creating an entity
单个实体
对于每个实体,需要:
- 一个数据库表
- 一个 Liquibase 更改集(change set)
- 一个 JPA 实体(Entity)
- 一个 Spring Data JPA 资源库(Repository)
- 一个 Spring MVC REST 控制器(Controller), 它具有基本的 CRUD 操作
- 一个 Angular 路由器(router), 一个组件(component)以及一个服务(service)
- 一个 HTML 视图(view)
- 集成测试, 确保一切按预期运行
- 性能测试,看看一切是否流畅运行
多个实体
多个实体,您可能希望在它们之间建立关系。为此,您需要:
- 一个数据库外键(foreign key)
- 用于管理此关系的特定 JavaScript 和 HTML 代码
command-line 创建实体
jhipster entity <entityName> --[options]
来调用子生成器。可以通过键入
yo jhipster:entity --help 参考可使用的选项。
Usage:
yo jhipster:entity [options]
Options:
-h, --help # Print the generator’s options and usage
Arguments:
name # Entity name Type: String Required: true
-
通过命令 yo jhipster:entity book 创建实体book
按照提示进行操作。会涉及步骤为 实体字段及校验、实体关联关系、业务逻辑中分离service class、数据对象的转换对象DTO、数据的查询、实体的分页
-
第一步运行完在changelog目录下会生成 _added_entity_Book.xml、_added_entity_constraints_Book.xml两个文件,同时注意在master.xml文件中会自动添加这两个配置文件,这样就不用手动配置了
-
启动项目,启动时系统会自动加载执行这个配置文件更新数据库添加实体及其关系
通过jdl 图行工具创建实体
- JHipster UML, 它允许您使用UML编辑器.
- JDL Studio, 我们的在线工具,使用我们的特定领域语言创建实体和关系 JDL.
- 如果您不想重新生成实体,则在导入 JDL 时,可以使用
--json-only
标志跳过实体创建部分,并仅在.jhipster
文件夹中生成 json 文件。
jhipster import-jdl ./my-jdl-file.jdl --json-only
- 默认情况下,
import-jdl
仅重新生成已更改的实体,如果需要重新生成所有的实体,则传递--force
标志。请注意,这将覆盖对实体文件的所有本地更改。
jhipster import-jdl ./my-jdl-file.jdl --force
3.JHipster UML 工具
更新现有实体
实体配置保存在 .jhipster
目录中的特定 .json
文件中。因此,如果使用现有实体名称再次运行子生成器,则可以更新或重新生成现有实体。
通过2个命令更新现有实体。
- yo jhipster:entity 实体名称 此名称与现有名称相同 ,适合
- jhipster import-jdl ./my-jdl-file.jdl 使用默认情况,重新生成已更改的实体,适合在没有实体的情况下
第一种会提示 需要增加还是删除、重新生成、第二种直接重新生成
2.先生成changelog 文件
mvnw liquibase:diff
3.将生成的文件添加到mater.xml 文件中
4.执行更新命令
mvn liquibase:updateSQL
changelog.xml中changeSet 几种写法
添加字段
<!--注意,这个id必须为当前时间的值,格式为:yyyyMMddHHmmss,否则启动会报错-->
<changeSet id="2018041320" author="hellxz">
<addColumn tableName="clazz">
<column name="clazz_test" type="varchar(50)"/>
</addColumn>
</changeSet>
修改字段类型
<changeSet author="sunxingba (generated)" id="1565769746773-1">
<modifyDataType tableName="BLOOD_PRESSURE" columnName="weight_no" newDataType="varchar(255)" />
</changeSet>
修改字段名称
<changeSet id="201804131020" author="hellxz">
<renameColumn tableName="clazz" oldColumnName="class_no" newColumnName="class_id"/>
</changeSet>
删除字段
<changeSet author="sunxingba (generated)" id="1565760978930-3">
<dropColumn columnName="WEIGHT_2" tableName="BLOOD_PRESSURE"/>
</changeSet>
第一种修改实体字段方式
- 执行yo jhipster:entity 实体名称 添加删除实体字段 不会生成changeLog 文件,但是前端、后端代码中有关字段都会更新
- 执行 mvnw liquibase:diff 生成changelog文件
- 将生成的文件添加到master.xml文件中
- 重启服务 这样数据库和
第二种修改实体字段方式
-
修改.jhipster目录下的实体json 文件如:BloodPressure.json 将字段类型String->Integer
"fields": [ { "fieldName": "weightNo", "fieldType": "Integer" } ] 改为 "fields": [ { "fieldName": "weightNo", "fieldType": "String" } ]
-
yo jhipster:entity BloodPressure 提示选项中->选择重新生成实体
-
执行 mvnw liquibase:diff 生成changelog 文件 【执行此命令时须停止运行服务】
生成为20190814080212_changelog.xml ,前缀为时间的文件后 将前两个changeSet 注释后添加 一个刚才修改类型的changeSet
<?xml version="1.1" encoding="UTF-8" standalone="no"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> <!-- <changeSet author="sunxingba (generated)" id="1565769746773-1"> <dropUniqueConstraint constraintName="UC_JHI_USEREMAIL_COL" tableName="jhi_user"/> <addUniqueConstraint columnNames="email" constraintName="UC_JHI_USEREMAIL_COL" tableName="jhi_user"/> </changeSet> <changeSet author="sunxingba (generated)" id="1565769746773-2"> <dropUniqueConstraint constraintName="UC_JHI_USERLOGIN_COL" tableName="jhi_user"/> <addUniqueConstraint columnNames="login" constraintName="UC_JHI_USERLOGIN_COL" tableName="jhi_user"/> </changeSet> --> <!-- 此次为修改的字段类型--> <changeSet author="sunxingba (generated)" id="1565769746773-1"> <modifyDataType tableName="BLOOD_PRESSURE" columnName="weight_no" newDataType="String" /> </changeSet> </databaseChangeLog>
-
将刚才修改的changelog文件添加到liquibase下的master.xml文件中
<include file="config/liquibase/changelog/20190814080212_changelog.xml" relativeToChangelogFile="false"/>
注意:这个文件中之前用过的文件配置可以注释掉,否则在程序启动时执行会出错,因为重复执行,如表已经存在
-
重新启动服务 ,在启动服务时,程序会自动执行changelog的改变设置
第三种修改domain下实体的属性
与第二种方法类似
- 修改domain下jap实体,给实体添加字段及get/set/tostring方法
- 执行 mvnw liquibase:diff 生成changelog文件
- 将生成的changelog文件添加到master.xml 文件中
- 启动项目会自动执行更新数据库添加字段
**注意:**这种情况下修改的实体 可以修改domain 下的实体book 的字段及数据库字段 ,不会修改前端代码、后端逻辑代码、mapstruct、测试用例