java springboot后台项目用到了jpa
查询数据库,还用到了jhipster
,这个东西可以自动生成基础的Controller
、Service
、Dao
、JavaBean
等相关代码,减少重复开发。
在此总结下使用方法。
1.需要先安装node,版本与其它同事的保持一致。
2.为了确保jhipster生成的代码与项目框架的版本匹配,可以从其他人的电脑上拷贝一个压缩包,然后解压到自己的C:\Users\myname\AppData\Roaming\npm
目录下(myname是自己电脑的用户名),压缩包里包含以下文件:
//文件夹
node_modules
//文件
jhipster
//文件
jhipster.cmd
其中,node_modules文件夹中,有generator-jhipster
文件夹,这个里面就是jhipster依赖包。
3.如果不需要第2步,那就可以使用命令:
npm install -g generator-jhipster
//npm install -g [email protected]
//npm uninstall -g generator-jhipster
全局安装jhipster,最终也会下载好generator-jhipster
到相应目录。
4.打开java项目,可以在项目文件夹中新建一个.jhipster
文件夹,然后在这个文件夹中建一个Mytable.json
文件,内容样例如下:
{
"changelogDate": "20221125234248",
"databaseType": "sql",
"dto": "mapstruct",
"entityTableName": "mytable",
"fields": [{
"fieldName": "level",
"fieldValidateRules": ["required"],
"fieldType": "Integer",
"javadoc": "级别"
}, {
"fieldName": "name",
"fieldValidateRulesMaxlength": 50,
"fieldValidateRules": ["required", "maxlength"],
"fieldType": "String",
"javadoc": "名称"
}, {
"fieldName": "creator",
"fieldValidateRulesMaxlength": 20,
"fieldValidateRules": ["maxlength"],
"fieldType": "String",
"javadoc": "创建人"
}, {
"fieldName": "createTime",
"fieldType": "Instant",
"javadoc": "创建时间"
}, {
"fieldName": "updator",
"fieldValidateRulesMaxlength": 20,
"fieldValidateRules": ["maxlength"],
"fieldType": "String",
"javadoc": "修改人"
}, {
"fieldName": "updateTime",
"fieldType": "Instant",
"javadoc": "修改日期"
}, {
"fieldName": "order",
"fieldType": "Integer",
"javadoc": "排序顺序"
}, {
"fieldName": "isDel",
"fieldType": "Integer",
"javadoc": "是否删除。1是逻辑删除。"
}],
"fluentMethods": true,
"jpaMetamodelFiltering": true,
"pagination": "pagination",
"relationships": [],
"searchEngine": false,
"service": "serviceClass"
}
5.使用cmd窗口,进入.jhipster
文件夹,执行命令:
jhipster entity Mytable
然后会出现一些选项,可以选第一个,然后输入y,操作完毕后,就会在项目中自动创建好相关java文件。
6.自动创建好的java文件中,
com.my.web.rest.MytableResource.java
是Controller层的文件;
com.my.service.MytableService.java
是Service层文件;
com.my.repository.MytableRepository.java
是Dao层文件;
com.my.service.dto.MytableDTO.java
是JavaBean文件;
以及还有些其它文件。
7.项目中还用到了liquibase
,所以生成的jhipster
文件中还有:
项目名\src\main\resources\config\liquibase\master.xml
,这个会新增一行include,项目启动会用(如果不用就可以注释那行);
项目名\src\main\resources\config\liquibase\changelog\20221125234248_added_entity_Mytable.xml
,这个项目启动时也会用。
8.项目启动时,会读取20221125234248_added_entity_Mytable.xml
,然后查询数据库的databasechangelog
表(liquibase生成的),如果没有数据、就按照xml文件、新建一个数据库表Mytable
;
如果有改动没有校验通过,就会报错。(不过不影响项目启动,但是会影响其它xml文件的执行)
1.这样建的数据库表,没有默认字段default,好像是目前jhipster不支持默认字段。
2.如果数据库表改字段导致项目启动校验没有通过,可以:
(1)修改Mytable.json,然后重新自动生成java代码(注意如果覆盖了用到的代码,就自己还原下代码);
(2)备份数据库表,然后给表改个名字;
(3)从databasechangelog
中找到校验不通过的那行(项目启动报错会报MD5SUM
字段内容,按这个字段搜下),备份后、删除这行。(或者把MD5SUM
字段改对也行)
(4)操作完(3)后,启动项目,项目就会再次自动生成表Mytable
,就不会报错了。
3.注意jhipster的json里的fieldValidateRulesMaxlength
与fieldValidateRules
不能乱用:
// "fieldValidateRulesMaxlength": 11,
// "fieldValidateRules": ["maxlength"],
如果用错,会导致调用controller层传入参数时,报错:
//这个是本人的level字段用了这2个值后报的错(integer类型)
Resolved exception caused by handler execution: javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'javax.validation.constraints.Size' validating type 'java.lang.Integer'. Check configuration for 'level'
所以省事点还是不要用这2个字段即可。