侧边栏壁纸
博主头像
博主等级

  • 累计撰写 19 篇文章
  • 累计创建 34 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

一款支持CRUD和设计模式代码生成的IDEA插件

前尘一梦
2023-03-07 / 0 评论 / 0 点赞 / 54 阅读 / 6432 字

前言

在各种ORM框架日益完善的今天,相信大家在开发时很少再去手写一些基本的类似于Entity,Controller的重复代码了,基本都使用工具生成,目前GitHub上开源的代码生成工具也比较多,看了下简单的没法完全满足使用需求,比较完善的需要占用服务器资源署成服务的形式使用,在遇到远程或者居家办公(公司没有vpn或者连不上),断网的情况下也多有不便,考虑到一般来说一旦项目架构,规范定下来的时候,代码生成都会以比较固定的形式,不需要多么丰富的定制化功能给我们去选择,便抽空将代码生成脚本封装成idea插件的格式,代码会生成到指定包下,不需二次拷贝,顺便增加了一些设计模式模版代码生成的功能,接下来介绍下此插件。

CRUD代码生成

安装:在Idea插件市场里搜索: Java CG(不用区分大小写)

使用: 在当前项目resource目录下新增cg_config.properties文件,文件内容如下

# 数据库名
database=book_manager
# 数据库url
url=jdbc:mysql://localhost:3306/book_manager?useUnicode=true&characterEncoding=UTF-8
# 数据库用户名
username=root
# 数据库密码
password=root
# 生成文件包名
packageName=com.cqry
# controller层返回result对象名称
resultName=Json
# controller层返回result对象包名
resultPackage=com.cqry.utils
# controller层返回code名称
returnCodeName=ReturnCode
# controller层返回成功code名称
successCodeName=ReturnCode.OK
# controller层返回code包名
returnCodePackage=com.cqry.utils.enumeration

然后点击Idea左上角File菜单-new即可看见生成选项

9963b3baab894d30802d25ab2ab38cfb~tplv-k3u1fbpfcp-jj-mark_3024_0_0_0_q75.jpg

点击代码生成,进入基本信息填写框:

1f796e994563407b96fa58f352c54957~tplv-k3u1fbpfcp-jj-mark_3024_0_0_0_q75.jpg

填写完信息后点击提交

9860ffce0c284d718b0e973e94c659f6~tplv-k3u1fbpfcp-jj-mark_3024_0_0_0_q75.jpg

项目会自动刷新,生成如下目录结构代码

6459182ca091419a9a11cbc4cdf944b9~tplv-k3u1fbpfcp-jj-mark_3024_0_0_0_q75.jpg

entity里包含了

  • bo:业务操作请求入参,属性包含了表所有字段,可根据实际需要增删

  • enums:数据库中的枚举字段(通过截取建表时的备注实现,类似于【用户类型(1: 用户,0:管理员)】这种形式,分号和左右括号都需要中文字符

dbf660019f324788982418167a4ef2f1~tplv-k3u1fbpfcp-jj-mark_3024_0_0_0_q75.jpg

  • query: 业务查询入参对象,属性包含了表所有字段,可根据实际需要增删,默认继承了自定义的PageParam,PageParam包含了当前页码和每页条数,使用校验器限制了每页数量

5564e393a1234c6db906ee028df9c0b6~tplv-k3u1fbpfcp-jj-mark_3024_0_0_0_q75.jpg

100c4f1a8acb47b89e7cbe2d545c35cc~tplv-k3u1fbpfcp-jj-mark_3024_0_0_0_q75.jpg

  • vo:返回给前端作数据渲染的业务对象,属性包含了表所有字段,可根据实际需要增删

  • 最后就是数据库表对应实体,默认继承了EntityBase,EntityBase包含一些基础字段,ID,创建人,创建时间,修改人,删除状态等,这些字段建表的时候按规范是需要有的。

2fb7d38e85674973b79809a0fbfd69a2~tplv-k3u1fbpfcp-jj-mark_3024_0_0_0_q75.jpg

a0cbefe8c9b04f45bfc0e434746062b0~tplv-k3u1fbpfcp-jj-mark_3024_0_0_0_q75.jpg

后面就是mapper,service文件,最后来看看controller类

e62d0a7ece884b569b716ad17516eaf4~tplv-k3u1fbpfcp-jj-mark_3024_0_0_0_q75.jpg

  • 方法类别:在CRUD的基础上加了一个分页查询的方法

  • 入参校验:基于Spring的Validation校验模块

  • 防重复提交校验:使用自定义PreventRepeat注解,基于aop拦截标注方法,通过将用户Token+接口名+请求参数(可配置)存入Redis实现

  • 方法返回值:统一Json对象,大家可以在上面的cg_config文件中配置为自己项目封装的返回对象。

  • 返回code,统一ReturnCode类,可配置

  • 涉及的切面类,返回值对象均已放到GitHub项目extra目录下

设计模式模版代码生成

使用方式和代码生成一样,目前支持以下常用几种,后续考虑将责任链、PipeLine也加进去

  • 单例模式(枚举、常量、双重校验锁)

  • 策略模式(枚举、函数式、工厂加模版)

  • 装饰器模式

f1da97eb31754da9ba2d617b46e5e298~tplv-k3u1fbpfcp-jj-mark_3024_0_0_0_q75.jpg

9173d0b4f739467f9e6a4869d7916447~tplv-k3u1fbpfcp-jj-mark_3024_0_0_0_q75.jpg

比如我们生成一个枚举策略

4cde25b9643e472b93f546c62e9cab46~tplv-k3u1fbpfcp-jj-mark_3024_0_0_0_q75.jpg

最后

感兴趣的小伙伴可以下载试用,也可以基于自己公司的情况或和自己的需求进行定制化修改,有疑问欢迎在评论区留言交流 插件源码已经放到GitHub

0

评论区