您的位置 首页 java

基于DDD模型的IDEA代码生成插件

背景:公司的一个新项目,DDD+JPA Restful风格的微服务系统。

做了一个功能后,就想着能不能做个插件,提高功效。

下面记录的是思考到实现的过程。

思考1 – ORMapping

不管是 JPA 方式还是 MyBatis ,都会有一个Table列到 Java 对象属性的映射,如图一所示。

图片一

如果Table有很多列,如图二所示,要写映射到Java对象属性很麻烦。

图二

思考2 – 调用链过程

SpringBoot的调用链过程套路基本一样。从ViewController –> Service –> DAO

如图三所示, 微服务 多一层Application Service,整合Feign的调用。

图三

思考3 – 基础功能

基础功能雷同,大都包含以下操作

  • 新增
  • 修改
  • 删除(批量删除)
  • 详情
  • 分页查询

思考4 – 请求风格统一

  • 新增 – PUT **/
  • 修改 – POST **/
  • 删除 – DELETE **/{id}
  • 批量删除 – DELETE **/ batch Delete
  • 详情 – GET **/{id}
  • 分页查询 – GET **/page/{pageNo}/{pageSize}

基于上面的思考,是不是能做成自动化的代码?

Table转Java对象,可以通过元数据

调用过程,基础功能, Restful 可以通过模板

Postgres表元数据

要实现上面的自动化功能,需要自动获取的数据如下

  • 表的名称
  • 表的备注
  • 列的名称
  • 列的数据类型
  • 列是否主键
  • 列是否非空
  • 列的备注

通过系统表可以得到

  • pg_class
  • pg_attribute
  • pg_namespac
  • pg_type
  • pg_constraint

这里有个约定,表的 ddl 采用西班牙命名,用下划线分隔。这样转Java对象的时候,属性名称可以方便的转驼峰,生成的Java代码比较友好。

模板文件

做一个功能,实现ViewController,Domain Service,Repo,Entity, DTO ,DO

其中对象转换采用的是MapStruct。然后把功能相关的都用变量替换。如图四

图四

这样模板文件也有了

然后外面再套一层,做成批量的。这样一整个库的表,瞬间就可以生成Java代码。

再进一步,能不能做成 IDEA 的插件,同事都可以用上,自动化生成代码呢

如何做成插件

开发环境

IDEA社区版 + IntelliJ Platform SDK + Gradle

需要的技能

  • 了解 Gradle

需要引入Jdbc驱动包, Freemarker 模板

  • 基础 Swing

插件需要配置界面,通过Swing画

开发步骤

  1. 创建工程:选 Intellij Platform Plugin
  2. Plugin.xml:填写在IDEA Plugin显示的信息
  3. 新建Action:确定插件入口在菜单的位置
  4. 开发配置界面
  5. 事件调用业务代码

大功告成!!

文章来源:智云一二三科技

文章标题:基于DDD模型的IDEA代码生成插件

文章地址:https://www.zhihuclub.com/180440.shtml

关于作者: 智云科技

热门文章

网站地图