1. 概述
代码生成器是为了加快业务功能的开发而提供的一个平台开发辅助工具,它的目标是基于平台的架构以及业务功能表来生成对应的业务基础类、逻辑代码、页面、资源文件、配置等,通过修改模板,可以生成我们目标所需要的代码方式。
代码生成器可以解决开发人员的手工编写一些基础代码的工作量,可以通过预先写好的代码模板,结合数据库,快速把应用功能的基础框架生成出来,形成平台的主体功能,然后再根据业务功能,由开发人员进行扩展即可。其解决以下:
- 生成的文件内容
- 生成文件的名
- 生成文件的路径
下图为代码生成器的原理图示:
2. 代码生成器目录说明
doc
为代码生成器的文档介绍,里面记载了代码生成器的使用方法。lib
为代码生成器的所有所安装的依赖包。template
为代码生成器的模板文件,可根据不同的项目选择不同的模板以及进行相应的调整,其语法为freemarker。codegen.properties
文件为代码生成器的数据库连接文件 ,需根据使用的数据库地址修改文件中的链接以及账户密码。codegen.xsd
为代码生成器的配置文件的规范。codegenconfig.xml
为代码生成的生成参数配置,是主要的配置管理。build.xml
为代码生成器的ant运行的任务入口。
3. 代码生成步骤
比如我们在开发过程中,需要开发 合同 和合同明细这样的业务,我们可以先用代码生成器生成基础的代码。
3.1 建立数据库表
首先要在数据库中建立一张表,以下例子为在数据库中建立contract表,同时contract表拥有一张子表名为contractdetail, 所以建立两张表如下所示:
建立主表
CREATE TABLE `contract` (
`ID_` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键',
`CUSTOMER_` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户',
`TOTAL_` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '金额',
`TITLE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '合同名称',
`TENANT_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '租用用户Id',
`CREATE_DEP_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建部门ID',
`CREATE_BY_` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人ID',
`CREATE_TIME_` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`UPDATE_BY_` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人ID',
`UPDATE_TIME_` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
)
建立子表
CREATE TABLE `contractdetail` (
`ID_` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键',
`CONTRACT_ID_` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '合同ID',
`PRODUCT_NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商品',
`AMOUNT_` int(255) NULL DEFAULT NULL COMMENT '数量',
`PRICE_` decimal(10, 2) NULL DEFAULT NULL COMMENT '价格',
`TENANT_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '租用用户Id',
`CREATE_DEP_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建部门ID',
`CREATE_BY_` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人ID',
`CREATE_TIME_` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`UPDATE_BY_` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人ID',
`UPDATE_TIME_` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
)
值得注意的是,表中字段的属性是可以自定义成任何属性的并不会影响到代码的生成以及运作,但一定要有
TENANT_ID_ VARCHAR(64) COMMENT '租用用户Id',
CREATE_DEP_ID_ VARCHAR(64) COMMENT '创建部门ID',
CREATE_BY_ VARCHAR(64) COMMENT '创建人ID',
CREATE_TIME_ DATETIME COMMENT '创建时间',
UPDATE_BY_ VARCHAR(64) COMMENT '更新人ID',
UPDATE_TIME_ DATETIME COMMENT '更新时间',
生成之后的代码运行会随着生成用户自定义的字段数据的时候,同时生成这几个字段的数据,如果表中没有这几个字段,会出现系统无法找到和插入数据的错误。
同时,在字段命名的格式上也有着相应的要求,尽量使用大写单词加上下划线,因为自定义字段的时候有几率会与代码中一些关键词引起冲突,比如try
,year
等。此时,加上下划线可有效避免此类问题,如表中的ID_
,CUSTOMER_
。
3.2 配置数据库连接信息
修改codegen.properties
文件指向目标所在的数据库
dbHelperClass=com.redxun.db.impl.MySqlHelper
url=jdbc:mysql://localhost:3306/jpaas_system?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
username=root
password=123456
url
是数据库的链接地址username
与password
为数据库的登陆账号和密码
3.3 配置代码生成器codegenconfig.xml
<variables>
<variable name="developer" value="csx"/>
<variable name="company" value="ABC软件公司"/>
<variable name="system" value="system"/>
<variable name="domain" value="com.redxun"/>
<variable name="email" value="csx@abc.cn"/>
<variable name="apiProject" value="api-form"/>
<variable name="javaProject" value="jpaas-service/jpaas-system"/>
<variable name="frontProject" value="jpaas-web/jpaas-vue"/>
</variables>
以上参数为代码生成的相关信息,包括了所在地址,开发者,以及所属的系统。
变量名 | 代表属性 |
---|---|
developer | 为代码开发者的署名 |
company | 为代码开发者的公司 |
domain | 为代码生成后包名前缀 |
system | 为代码生成后子模块名称 |
为代码开发者的邮件 | |
apiProject | 为所生成的api所在的位置 |
javaProject | 为所生成的后端java文件所在的位置 |
frontProject | 为所生成的前端文件所在的位置 |
以上信息一般只需要配置子模块,在这个例子上面,需要把system的value改为system
,代表是该模块放在jpass-system下的子应用。
<table tableName="Contract">
<variable name="class" value="Contract"/>
<variable name="package" value="core"/>
<subtable tablename="ContractDetail" foreignKey="contractId">
<variable name="class" value="ContractDetail"/>
<variable name="package" value="core"/>
</subtable>
</table>
此处就是配置所使用的表的信息:tableName
就是使用的表名<variable name="class" value="Contract"/>
此处的value就是所生成的类的名字<variable name="package" value="core"/>
此处的value就是生成代码所在的包
如果有主从表关系的时候,可加入<subtable></subtable>
来配置子表的信息,foreignKey
就是子表用于连接主表的外键。注意,不能使用子表的主键作为外键来连接主表。如需配置多个子表,只需要加入多个<subtable></subtable>
便可以配置多个子表。
3.4 代码生成
配置完成后,在idea中,进行ant视图窗口,添加代码生成器下的build.xml
文件,如图所示,双击运行gencode任务即可:
生成后的文件
3.5 生成的文件目录说明
文件名称 | 文件功能 |
---|---|
ContractMapper.xml | mybatis映射文件 |
Contract.java | 实体类文件 |
ContractMapper.java | dao层(数据访问层)文件 |
ContractServiceImpl.java | service 层(服务层) |
ContractServiceTest.java | 测试用例文件 |
ContractController | controller(控制器)层代码 |
ContractList.vue | 前端列表文件 |
ContractEdit.vue | 前端编辑文件 |
Contract.js | 前端API 访问文件 |
用户可以根据自己的需求在上述文件中进行修改并开发新功能。
3.6 数据库访问
平台访问数据使用的是MyBatis Plus 。
import com.redxun.user.org.entity.OsWxEntAgent;
import org.apache.ibatis.annotations.Mapper;
import com.redxun.common.base.db.BaseDao;
/**
* 企业微信应用表数据库访问层
*/
@Mapper
public interface OsWxEntAgentMapper extends BaseDao<OsWxEntAgent> {
}
需要访问数据库的话,可以在这个类中添加接口方法。
3.7 菜单配置
在主页面的系统管理的菜单管理之中,选择一个所希望配置位置的文件夹(如图所示配置在组织架构之中),然后点击新建
填写名称标识键等信息后,选择VUE组件,在选择组件路径,组件路径由刚才生成的前端ContractList.vue所在的位置所决定,我们可在IDEA里复制相关路径即可,然后选择喜欢的图标以及URL 访问即可
这样当我们刷新页面后,即可在组织结构中看到新增的合同管理页面,就可以对刚才建立的数据库的进行基本的增删改查工作了