# Plumecode **Repository Path**: pickmetech/plume-code ## Basic Information - **Project Name**: Plumecode - **Description**: 一个简单易用且功能强大的代码生成工具 (a simple and powerful code generator) - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 33 - **Created**: 2022-06-05 - **Last Updated**: 2022-06-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
一个简单易用且功能强大的代码生成器(Java & ElementUI),熟练使用你就是CURD代码挖掘机!!!
⭐⭐⭐新项目,需要大家的支持,欢迎Star、PR、Issue⭐⭐⭐ PlumeCode 不仅简单、而且强大 - 支持多数据库Mysql、H2、SqlServer、Oracle、PostgreSQL、MariaDB - 支持多种持久层框架MybatisPlus、Mybatis、Jpa、tk-Mybatis、Hibernate - 一键下载拥有portal、controller、service、repository、mapper、dto、entity、vo、query、mapper.xml等前后端代码 - 良好的项目结构,让二次开发变得像喝水一样简单 ## quick start with cli  ## quick start with web ### jar包运行 - 发行版[下载](https://gitee.com/plumeorg/plume-code/releases) - 启动项目 `java -jar plume-code-web-0.0.3.jar`  ### docker运行 `docker pull yinyansheng/plumecode:v0.0.3`  `docker run -d yinyansheng/plumecode:v0.0.3`  ## 功能简介 - 打开网页 http://localhost:8844/web/index.html - 数据库配置   - 生成代码  - 代码预览  ## 生成代码示例 [plume-code-sample](https://gitee.com/plumeorg/plume-code-sample) ## 联系交流 - QQ群:691455148 ## 测试地址 - DEMO演示:[http://code.plumelog.com/web/index.html](http://code.plumelog.com/web/index.html) ## 生成代码结构 ### 后端框架 对于java后端项目框架设计,目前主要有两种: - 面向领域(DDD) - 面向数据(三层框架) 一般而言互联网后端C端业务并不复杂(相对B端或企业级项目),且通常也做了微服务,业务边界划分良好的话,DDD并不是一个好的选择,所以本项目基于三层框架生成后端代码 - controller层(controller、vo、query) - servicer层(service、serviceImpl、dto) - repository层(repository/mapper/dao、repositoryImpl/daoImpl、entity) 下面是我常用的系统分层设计(参考自阿里巴巴代码规约)  以及我常用的包结构设计  **以上都是个人理解,对于系统设计,没有银弹,适合的,符合场景的实践才是好的** ### 前端框架 由于前端代码公司间差异比较大,这里只是做了ElementUI的示例,如有需要,可根据实际前端技术选型,做二次开发集成 - [d2admin](https://d2.pub/zh/) - [element-ui](https://element.eleme.cn/2.15/#/zh-CN) ## 项目结构  ## 二开说明 ### 新增数据库 项目本身是基于JDBC获取数据库信息,数据库需要有JDBC实现 获取数据信息有两种方式 - 通过JDBC Connection 获取DatabaseMetaData,从而获取数据库、表、字段、主键信息(推荐),只需要继承MetaDataDatabaseBehavior,且提供一个获取数据库名称的SQL即可 - 通过JDBC执行Raw SQL获取数据库、表、字段、主键信息  Sample:新增PostgreSQL ```java @Component @Scope(value = "prototype") public class PostgreSQLDatabaseBehavior extends MetaDataDatabaseBehavior { @Override protected String getDatabaseNameSql() { return "SELECT current_database();"; } } ``` ### 新增模板  默认使用Velocity模板引擎、FreeMarker可选 新增模板文件  新增后端java、xml模板实现类,继承JavaGeneratorBehavior类 ```java @Component @Scope("prototype") class JpaControllerGeneratorBehavior extends JavaGeneratorBehavior { //获取模板文件名 @Override protected String getTemplateName() { return "Jpa-Controller.java.tpl"; } //获取文件包名(也是文件相对路径) @Override protected String getPackageName() { return settingModel.getBasePackageName().concat(".admin.controller"); } //获取文件名 @Override protected String getFileName() { return String.format("%sController.java", upperFirstCase(classModel.getName())); } } ``` 新增前端js、vue模板实现类,继承VueGeneratorBehavior类 ```java @Component @Scope("prototype") public class ElementUiTableGeneratorBehavior extends VueGeneratorBehavior { //文件路径在基类中已经实现,如有调整需要重写父类getFilePath方法 //获取文件名 @Override protected String getFileName() { return "Table.vue"; } //获取模板文件名 @Override protected String getTemplateName() { return "ElementUi-Table.vue.tpl"; } } ``` ### 模板上下文变量 ```java protected Map