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

本文共 4043 字,大约阅读时间需要 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=kdyzm
    gen.packageName=com.kdyzm.business
    gen.autoRemovePre=false
    gen.tableName=news
    gen.tablePrefix=sys_

    3.2 打包和运行

    在项目根目录运行命令:

    mvn clean package

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

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

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


    项目源代码

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

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

    你可能感兴趣的文章
    nodejs系列之express
    查看>>
    nodejs系列之Koa2
    查看>>
    Nodejs连接mysql
    查看>>
    nodejs连接mysql
    查看>>
    NodeJs连接Oracle数据库
    查看>>
    nodejs配置express服务器,运行自动打开浏览器
    查看>>
    NodeMCU教程 http请求获取Json中文乱码解决方案
    查看>>
    Nodemon 深入解析与使用
    查看>>
    NodeSession:高效且灵活的Node.js会话管理工具
    查看>>
    node~ http缓存
    查看>>
    node不是内部命令时配置node环境变量
    查看>>
    node中fs模块之文件操作
    查看>>
    Node中同步与异步的方式读取文件
    查看>>
    node中的get请求和post请求的不同操作【node学习第五篇】
    查看>>
    Node中的Http模块和Url模块的使用
    查看>>
    Node中自启动工具supervisor的使用
    查看>>
    Node入门之创建第一个HelloNode
    查看>>
    node全局对象 文件系统
    查看>>
    Node出错导致运行崩溃的解决方案
    查看>>
    Node响应中文时解决乱码问题
    查看>>