⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 juejin.cn/post/7394040164178870281 「自由的_鱼」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

前言

在各种 ORM 框架日益完善的今天,相信大家在开发时很少再去手写一些基本的类似于Entity,Controller的重复代码了,基本都使用工具生成,目前 GitHub 上开源的代码生成工具也比较多,看了下简单的没法完全满足使用需求,比较完善的需要占用服务器资源署成服务的形式使用,在遇到远程或者居家办公,断网的情况下也多有不便,考虑到一般来说一旦项目架构,规范定下来的时候,代码生成都会以比较固定的形式,不需要多么丰富的定制化功能给我们去选择,便抽空将代码生成脚本封装成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。

这个插件整体上来说,是比较简单的。功能不多,上手较快。主要是学会 idea 的插件机制,以及开发过程。感兴趣的网友,可以制作一款自己的插件,哪怕是 hello world 也是可以的。简历上,可以宣称,做过 idea 插件开发并上线到应用市场。这样的经验,遥遥领先于其他网友🤣

文章目录
  1. 1. 前言
  2. 2. 数据库代码生成
  3. 3. 设计模式模版代码生成
  4. 4. 结论