一、前言
在各种ORM框架日益完善的今天,相信大家在开发时很少再去手写一些基本的类似于Entity,Controller的重复代码了,基本都使用工具生成,目前GitHub上开源的代码生成工具也比较多,看了下简单的没法完全满足使用需求,比较完善的需要占用服务器资源署成服务的形式使用,在遇到远程或者居家办公(公司没有vpn或者连不上),断网的情况下也多有不便,考虑到一般来说一旦项目架构,规范定下来的时候,代码生成都会以比较固定的形式,不需要多么丰富的定制化功能给我们去选择,便抽空将代码生成脚本封装成idea插件的格式,代码会生成到指定包下,不需二次拷贝,顺便增加了一些设计模式模版代码生成的功能,接下来介绍下此插件。
二、数据库代码生成
安装:在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即可看见生成选项
点击代码生成,进入基本信息填写框:
填写完信息后点击提交
项目会自动刷新,生成如下目录结构代码
entity里包含了
- bo:业务操作请求入参,属性包含了表所有字段,可根据实际需要增删
- enums:数据库中的枚举字段(通过截取建表时的备注实现,类似于【用户类型(1: 用户,0:管理员)】这种形式,分号和左右括号都需要中文字符
- query: 业务查询入参对象,属性包含了表所有字段,可根据实际需要增删,默认继承了自定义的PageParam,PageParam包含了当前页码和每页条数,使用校验器限制了每页数量
- vo:返回给前端作数据渲染的业务对象,属性包含了表所有字段,可根据实际需要增删
- 最后就是数据库表对应实体,默认继承了EntityBase,EntityBase包含一些基础字段,ID,创建人,创建时间,修改人,删除状态等,这些字段建表的时候按规范是需要有的。
后面就是mapper,service文件,最后来看看controller类
- 方法类别:在CRUD的基础上加了一个分页查询的方法
- 入参校验:基于Spring的Validation校验模块
- 防重复提交校验:使用自定义PreventRepeat注解,基于aop拦截标注方法,通过将用户Token+接口名+请求参数(可配置)存入Redis实现
- 方法返回值:统一Json对象,大家可以在上面的cg_config文件中配置为自己项目封装的返回对象。
- 返回code,统一ReturnCode类,可配置
- 涉及的切面类,返回值对象均已放到GitHub项目extra目录下
三、设计模式模版代码生成
使用方式和代码生成一样,目前支持以下常用几种,后续考虑将责任链、PipeLine也加进去
- 单例模式(枚举、常量、双重校验锁)
- 策略模式(枚举、函数式、工厂加模版)
- 装饰器模式
比如我们生成一个枚举策略
四、结论
感兴趣的小伙伴可以下载试用,也可以基于自己公司的情况或和自己的需求进行定制化修改,有疑问欢迎在评论区留言交流 插件源码已经放到GitHub https://github.com/jekran/code\_generate[1]
最后
① 谢谢大驾光临~
② 如果对于文中所持观点有不同的看法,欢迎大佬指点,交流~
原文:https://juejin.cn/post/7394040164178870281
作者:自由的_鱼
Reference
[1] https://github.com/jekran/code_generate: https://github.com/jekran/code_generate
Tags:idea 常用插件