步骤一: 最小框架 - (Spring Boot + ORM)
目标:建立一个可用的Restful 后台应用
技术点
- Spring Boot
起步依赖
自动化装配
约定大于配置
注解
启动
- ORM框架
- DTO
- 代码生成机制
步骤
1.1 创建应用,引入Mybatis
1.2 使用ZLT的基础module构建框架
新工程里面加入zlt-common, zlt-config
为了方便直接把zlt-common, zlt-config 拷贝到新的工程中去,
注意: 顶级目录中的pom文件也要覆盖,pom里面定义了version和依赖关系。这个比较复杂,没弄清楚,但是如果不覆盖,会出现部分的依赖在某版本号下面没有版本的问题
加入Code generator工程,启动服务
生成代码
修改dev config的配置和code generator工程的配置,生成代码
http://localhost:7300/generator/code?tables=pf_project
http://localhost:7300/generator/list?page=1&limit=100
zlt使用的ROM 框架是mybatis + baomidou/mybatisplus
https://mybatis.plus/guide/page.html
1.3 多表操作和DTO的集成
多表操作
基本是一样的,只是需要自己写实现代码。
<select id="findProjectList" resultType="demo.generator.model.ProjectFull">
select * from pf_project pp left join pf_project_operation_type ppot on pp.OperationType = ppot.Id
</select>
引入Dozer.Mapper
注意ZLT里面版本是统一在顶层的pom里面配置
5.5.1
建立DTO机制
目标是建立DTO机制,这个在nodejs和dotnet里面都有类似的,java我不清楚
如: nodejs,typescript
export class PrintingController implements CrudController<ItemTag> {
constructor(public service: PrintingService) {}
get base(): CrudController<ItemTag> {
return this;
}
@Override()
createOne(
@ParsedRequest() req: CrudRequest,
@ParsedBody() dto: CreateTagDto,
) {
return this.service.createTag(dto);
}
}
如C#
public class ProjectAppService : CrudAppService<Project, ProjectDto, Guid, PagedProjectResultRequestDto, CreatProjectDto, ProjectDto>
{
public ProjectAppService(IRepository<Project, Guid> repository)
: base(repository)
{
}
}
使用范型实现DTO Controller的基类,实现基本功能
/**
* DtoBaseController, controller 父类, 主要实现DTO
*
* 泛型的类型依次对应: Service, PO, primary key type, 保存DTO, Get DTO, Get List DTO
* PO和各类DTO可以是同一种类型,不推荐
*
* 注意: 1. 多表联合查询时需要在map中写sql, 同时根据情况重写部分方法
* 2. 子类需要处理dto字段时,可以修改dozer的mapping, 或者重写整个方法
*
*/
public class DtoBaseController<S extends ISuperService<PO>, KeyType extends Serializable,
PO extends SuperEntity,
SaveDto, QueryDto, QueryListDto> {
@Resource
private S service;
1.4 关于代码生成
ZLT里面有个代码生成器,直接使用即可。实际就是字符串的匹配和替换。技术上比较成熟,没啥痛点。
但是注意:
和代码生成器配合时,还是尽量使用低代码的方式,比如泛型的方式实现基本功能,而不能用代码生成器去生成重复代码。
代码生成器最主要的工作还是生成一个代码的框架,比如说DTO对象文件,Service文件,PO文件,重复性的代码应该实现在基类里。