博客
关于我
若依管理系统RuoYi-Vue(三):代码生成器原理和实战
阅读量:443 次
发布时间:2019-03-06

本文共 4006 字,大约阅读时间需要 13 分钟。

ruoyi-vue代码生成器使用与原理分析

ruoyi-vue代码生成器是一款强大的工具,能够根据数据库表结构自动生成前后端代码。本文将从使用、配置、原理分析以及高级使用等多个方面详细介绍这一工具。


一、代码生成器的使用

在ruoyi-vue系统中,代码生成器主要用于快速开发,通过简单的配置即可生成完整的业务代码。以下是使用流程:

1. 新建maven模块

原则上,我们的业务代码和若依系统本身的系统代码需要做隔离,这样方便后续升级,同时也更具合理性。在ruoyi-admin中新建一个ruoyi-business模块,并添加ruoyi-framework依赖。POM文件如下:

ruoyi
com.ruoyi
3.4.0
4.0.0
com.kdyzm
ruoyi-business
1.0.0-SNAPSHOT
com.ruoyi
ruoyi-framework

之后,在ruoyi-admin中添加ruoyi-business模块的依赖。


2. 准备代码生成器配置

ruoyi-vue系统中的代码生成器配置文件在resources/generator.yml中。由于我们在ruoyi-business模块中开发,需要自定义包名为com.kdyzm.business。配置文件内容如下:

# 代码生成gen:  author: kdyzm  packageName: com.kdyzm.business  autoRemovePre: false  tablePrefix: sys_

此外,还需要对mybatis进行配置:

  • 修改mybatis的别名配置,增加对com.kdyzm包名的识别:

    com.ruoyi.**.domain,com.kdyzm.**.domain
  • 修改mybatis的mapper扫描包路径:

    @MapperScan({"com.ruoyi.**.mapper", "com.kdyzm.**.mapper"})
  • 最后,在ruoyi-admin中新增一个Config类,扫描com.kdyzm包:

    package com.ruoyi.config;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;@Configuration@ComponentScan(basePackages = "com.kdyzm")public class Config {}

    3. 准备表

    新建一个商品表作为示例(表注释需添加):

    CREATE TABLE `goods` (    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',    `GOODS_NAME` varchar(255) DEFAULT NULL COMMENT '商品名字',    `put_way_flag` tinyint(1) DEFAULT NULL COMMENT '商品是否上架,0:下架,1:上架',    `create_time` datetime DEFAULT NULL COMMENT '创建时间',    `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',    `update_time` datetime DEFAULT NULL COMMENT '更新时间',    `update_by` varchar(64) DEFAULT NULL COMMENT '更新人',    PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';

    二、将生成的代码应用到项目

    1. 后端代码

    将生成代码中的main目录直接拷贝到ruoyi-business模块下的src目录。生成的代码采用三层架构,controllermapperservice都已生成。

    2. 前端代码

    将生成目录中的vue目录中的内容拷贝到ruoyi-ui项目中:

    • vue/api目录拷贝到ruoyi-ui/src/api
    • vue/views目录拷贝到ruoyi-ui/src/views

    3. SQL代码

    生成的SQL文件包含菜单和按钮权限SQL。将goodsMenu.sql文件中的内容直接执行到ruoyi数据库中。


    三、测试

    重新运行前后端代码后,打开系统工具菜单中的商品菜单。前端菜单和权限等功能均已生成,可以直接使用。


    四、代码生成器高级使用

    在测试过程中发现,商品是否上架字段前端显示为文本输入框,但实际应为下拉列表或单选按钮。代码生成器支持自定义字段显示类型和字典类型。


    1. 编辑代码生成选项

    点击编辑按钮,跳转至修改生成配置页面。在页面中:

    • 修改字段显示类型为“单选框”
    • 设置字典类型为“业务是否(0表示下架,1表示上架)”

    提交后,生成的代码样式会更新为下拉列表和单选框。


    2. 数据格式模板

    ruoyi代码生成器支持三种数据格式模板:单表、树表、主子表。默认使用单表模板。


    五、代码生成器原理

    1. Velocity模板引擎

    ruoyi-vue代码生成器基于Velocity技术实现源代码生成。生成逻辑分为三步:

  • 创建模板文件
  • 准备上下文(变量值)
  • 渲染模板文件
  • 以下是index.vue模板文件的一部分代码:

    #foreach($column in $columns)#if($column.query)#set($dictType=$column.dictType)#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})#set($parentheseIndex=$column.columnComment.indexOf("("))#if($parentheseIndex != -1)#set($comment=$column.columnComment.substring(0, $parentheseIndex))#else#set($comment=$column.columnComment)#end#if($column.htmlType == "input")

    2. information_schema数据库

    代码生成器以mysql的information_schema数据库中的TABLESCOLUMNS表信息为核心实现。


    3. ruoyi-vue代码生成器源码分析

    ruoyi-vue代码生成器相关代码位于ruoyi-generator模块中。主要接口包括:

    • com.ruoyi.generator.controller.GenController#importTableSave
    • com.ruoyi.generator.controller.GenController#batchGenCode

    六、扩展篇:封装独立版ruoyi-vue代码生成器

    1. 为什么要做这个

    作为普通研发人员,常常需要完成CRUD操作。如果有一款代码生成器能够根据表结构自动生成后端代码,岂不是能大大节省时间?ruoyi系统提供了这样的工具,但其依赖于特定的前端页面权限。

    2. 抽离ruoyi-vue代码生成器逻辑

    将ruoyi-generator模块的功能独立于spring-boot框架,作为一个普通的spring程序运行。具体实现包括:

    • 删除spring-boot相关功能
    • 保留spring、mybatis、druid等基础组件
    • 通过main方法调用相关模块

    3. 独立版代码生成器使用方法

    3.1 配置application.properties文件

    配置文件内容如下:

    mysql.username=${dbUserName}mysql.password=${dbPassword}mysql.connectionUrl=${dbUrl}mysql.driverClass=${dbDriverClassName}gen.author=kdyzmgen.packageName=com.kdyzm.businessgen.autoRemovePre=falsegen.tableName=newsgen.tablePrefix=sys_

    3.2 打包和运行

    在项目根目录运行命令:

    mvn clean package

    打包完成后,切换到target目录并运行:

    java -jar ruoyi-vue-gen-1.0-SNAPSHOT.jar

    生成的代码将以ruoyi.zip压缩文件形式下载。


    项目源代码

    独立版代码生成器源代码已完成,感兴趣的可以访问我的博客查看完整代码。

    转载地址:http://phdyz.baihongyu.com/

    你可能感兴趣的文章
    Netty工作笔记0027---NIO 网络编程应用--群聊系统2--服务器编写2
    查看>>
    Netty工作笔记0050---Netty核心模块1
    查看>>
    Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接
    查看>>
    Netty工作笔记0077---handler链调用机制实例4
    查看>>
    Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
    查看>>
    Netty常见组件二
    查看>>
    netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
    查看>>
    Netty核心模块组件
    查看>>
    Netty框架的服务端开发中创建EventLoopGroup对象时线程数量源码解析
    查看>>
    Netty源码—2.Reactor线程模型一
    查看>>
    Netty源码—4.客户端接入流程一
    查看>>
    Netty源码—4.客户端接入流程二
    查看>>
    Netty源码—5.Pipeline和Handler一
    查看>>
    Netty源码—6.ByteBuf原理二
    查看>>
    Netty源码—7.ByteBuf原理三
    查看>>
    Netty源码—7.ByteBuf原理四
    查看>>
    Netty源码—8.编解码原理二
    查看>>
    Netty源码解读
    查看>>
    Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
    查看>>
    Netty相关
    查看>>