若依管理系统RuoYi-Vue (三):代码⽣成器原理和实战
历史⽂章
本篇⽂章将会讲解ruoyi-vue 系统下代码⽣成器的使⽤、原理分析以及将这部分代码抽离出来形成独⽴版的代码⽣成器。
⼀、代码⽣成器的使⽤
1.新建maven 模块
原则上,我们的业务代码和若依系统本⾝的系统代码是要做隔离的,⼀⽅⾯是易于之后随着若依系统升级⽽升级,另⼀⽅⾯则是纯粹的合理性考虑。这⾥新建⼀个ruoyi-business 模块作为业务代码模块,新建完ruoyi-business 模块之后添加ruoyi-framework 依赖,pom ⽂件如下所⽰
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ruoyi</artifactId>
<groupId>com.ruoyi</groupId>
<version>3.4.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.kdyzm</groupId>
<artifactId>ruoyi-business</artifactId>
<version>1.0.0-SNAPSHOT</version>
<dependencies><!-- 核⼼模块-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-framework</artifactId>
</dependency>
</dependencies>
</project>
之后在ruoyi-admin 添加ruoyi-business 模块的依赖
<dependency>
<groupId>com.kdyzm</groupId>
<artifactId>ruoyi-business</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
2.准备代码⽣成器配置
ruoyi-vue 系统中代码⽣成器相代码都在ruoyi-generator 模块中,代码⽣成的配置在resources/generator.yml ⽂件中,由于要在新的模块ruoyi-business 中做开发,要有个新包名,包名取作com.kdyzm.business ,所以generator.yml 配置⽂件内容如下:
# 代码⽣成gen:
# 作者
author: kdyzm
# 默认⽣成包路径 system 需改成⾃⼰的模块名称 如 system monitor tool
packageName: com.kdyzm.business # ⾃动去除表前缀,默认是false autoRemovePre: false
# 表前缀(⽣成类名不会包含表前缀,多个⽤逗号分隔)
tablePrefix: sys_
另外,这⾥要使⽤⾃定义包名com.kdyzm.business ,所以若依系统中mybatis 也要做相应的修改
修改mybatis 别名配置,增加对com.kdyzm 包名的识别
# MyBatis 配置mybatis:
# 搜索指定包别名
typeAliasesPackage: com.ruoyi.**.domain,com.kdyzm.**.domain
修改mybatis 的mapper 扫描包路径
修改com.ruoyi.framework.config.ApplicationConfig 类的MapperScan 注解,增加对com.kdyzm 包的扫描
#####
@MapperScan({"com.ruoyi.**.mapper","com.kdyzm.**.mapper"})
public class ApplicationConfig{
...
}
最后,在ruoyi-admin 新增⼀个Config 类,扫描com.kdyzm 包,以将ruoyi-business 模块中的所有组件纳⼊spring 管理。
package com.ruoyi.config;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;/**
* @author kdyzm */@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='商品表'
4.⽣成代码
进⼊系统⼯具
-代码⽣成页⾯,点击导⼊按钮,找到
goods 表并导⼊,如下图所⽰
然后点击⽣成代码按钮
之后,就可以得到⼀个ruoyi.zip 压缩⽂件,压缩⽂件中包含⽣成的前后端代码以及sql 语句⽂件,⽣成的代码⽬录结构如下所⽰
├── goodsMenu.sql
├── main
│ ├── java
│ │ └── com
│ │ └── kdyzm
│ │ └── business
│ │ ├── controller
│ │ │ └── GoodsController.java
│ │ ├── domain
│ │ │ └── Goods.java
│ │ ├── mapper
│ │ │ └── GoodsMapper.java
│ │ └── service
│ │ ├── IGoodsService.java
│ │ └── impl
│ │ └── GoodsServiceImpl.java
│ └── resources
│ └── mapper
│ └── business
│ └── GoodsMapper.xml
└── vue
├── api
│ └── business
│ └── goods.js
└── views
└── business
└── goods
└── index.vue
####
⼆、将⽣成的代码应⽤到项⽬
1.后端代码
将⽣成代码中的main ⽬录直接拷贝到ruoyi-business 模块下的src ⽬录,可以看到⽣成的代码是典型的三层架构,从controller 到mapper都已经帮我们⽣成好了。