在线代码生成、单表、主子表、树表、数据表结构
# 引言
代码生成是帮助开发者快速生成通用增删改查的工具,一般情况生成后的代码部署后即可运行。
然后对生成后的代码进行布局调整,增加业务代码,实现你的业务。极大地简化了你的基础重复代码编写时间。
# 表结构数据字典
一张图展示 JeeSite 的表接口,表之间的关系:

源文件下载地址:https://gitee.com/thinkgem/jeesite4/blob/v5.1/modules/core/db/core.erm (opens new window)
如果 erm 文件打不开,请使用 Eclipse 安装 ERMaster 插件,菜单 Help -> Install New Software -> Work with:https://thinkgem.github.io/ermasterr/updatesite
-> Select All -> 取消 Contact all update site... 复选框 -> 点击 Next 直到 Finish. 也可以手动下载安装插件包安装到 Eclipse:https://gitee.com/thinkgem/ermasterr (opens new window)
ERMaster 是一个轻量级的数据表建模工具,可以很方便的展示表结构、多对一、多对多的场景。
最重要的是,它可以一次建模,导出不同数据库的 DLL 语句,非常方便。
# 业务表结构设计
打开 web 项目下 /db/test.erm 文件,直接复制该文件,添加自己的业务表。
该文件中已经内置了一些字段组,帮助你快速创建(这些字段不用你去每个去编写,而是选择即可)如下:

DataEntity:
字段名 | 类型 | 备注 |
---|---|---|
status | char(1) | 状态(0正常 1删除 2停用 3冻结 4审核 5驳回 9草稿) |
create_by | varchar(64) | 创建者 |
create_date | datetime | 创建时间 |
update_by | varchar(64) | 更新者 |
update_date | datetime | 更新时间 |
remarks | nvarchar(500) | 备注 |
DataEntityNoStatus:
字段名 | 类型 | 备注 |
---|---|---|
create_by | varchar(64) | 创建者 |
create_date | datetime | 创建时间 |
update_by | varchar(64) | 更新者 |
update_date | datetime | 更新时间 |
remarks | nvarchar(500) | 备注 |
TreeEntity:
字段名 | 类型 | 备注 |
---|---|---|
parent_code | varchar(64) | 父级编号 |
parent_codes | varchar(1000) | 所有父级编号 |
tree_sort | decimal(10) | 本级排序号(升序) |
tree_sorts | varchar(1000) | 所有级别排序号 |
tree_leaf | char(1) | 是否最末级 |
tree_level | decimal(4) | 层次级别 |
tree_names | nvarchar(1000) | 全节点名 |
BaseEntity:
字段名 | 类型 | 备注 |
---|---|---|
id | varchar(64) | 编码 |
status | char(1) | 状态 |
BaseEntityCorp:
字段名 | 类型 | 备注 |
---|---|---|
corp_code | varchar(64) | 租户代码 |
corp_name | nvarchar(100) | 租户名称 |
ExtendEntity:
字段名 | 类型 | 备注 |
---|---|---|
extend_s1 | nvarchar(500) | 扩展 String 1 |
extend_s2 | nvarchar(500) | 扩展 String 2 |
extend_s3 | nvarchar(500) | 扩展 String 3 |
extend_s4 | nvarchar(500) | 扩展 String 4 |
extend_s5 | nvarchar(500) | 扩展 String 5 |
extend_s6 | nvarchar(500) | 扩展 String 6 |
extend_s7 | nvarchar(500) | 扩展 String 7 |
extend_s8 | nvarchar(500) | 扩展 String 8 |
extend_i1 | decimal(19) | 扩展 Integer 1 |
extend_i2 | decimal(19) | 扩展 Integer 2 |
extend_i3 | decimal(19) | 扩展 Integer 3 |
extend_i4 | decimal(19) | 扩展 Integer 4 |
extend_f1 | decimal(19,4) | 扩展 Float 1 |
extend_f2 | decimal(19,4) | 扩展 Float 2 |
extend_f3 | decimal(19,4) | 扩展 Float 3 |
extend_f4 | decimal(19,4) | 扩展 Float 4 |
extend_d1 | datetime | 扩展 Date 1 |
extend_d2 | datetime | 扩展 Date 2 |
extend_d3 | datetime | 扩展 Date 3 |
extend_d4 | datetime | 扩展 Date 4 |
导出
设计完成后,可以对建模进行导出:DLL语句、Excel文档、HTML文档、Image图片
在空白处右键,选择 Export -> DLL / Excel / HTML,选择生成的路径。
如果导出的是 DLL 在对话框下放可进行多项选择导出的数据库类型。
# 生成代码的流程
# 1)单表
- 配置表基本信息,下一步;
- 配置表字段信息,必须有一个主键,下一步;
- 配置表生成信息,选择“单表/主子表”生成模板,点击“保存并生成代码”按钮;
- 配置菜单和权限标识,与Controller里@RequestMapping和@RequiresPermissions对应;
- 关闭服务,刷新Eclipse工程,启动服务。
# 2)主子表
- 配置主表信息,主表字段,主表生成信息,选择“单表/主子表”模板,先暂存配置;
- 配置子表信息,选择父表和当前表,关联父表主键的外键字段,子表字段,下一步;
- 回到主表生成界面,点击“保存并生成代码”按钮,可同时生成主表和子表的增删改查代码。
- 配置菜单和权限标识,与Controller里@RequestMapping和@RequiresPermissions对应。
- 关闭服务,刷新Eclipse工程,启动服务。
# 3)树结构表
- 与主子表不同的地方,如下:
- 在生成信息选项卡中选择“树表“生成模板。
- 设置“树显示编码字段”和“树显示名称字段”即可。
# 4)代码生成示例
可参考初始化脚本自带的 test_data 和 test_tree 两个配置,如下

研发工具菜单中的功能实例代码,都在 web 项目下,进行查看。
(按住 Ctrl + Shift 点击下方链接,新窗口打开)
在线访问:https://demo.jeesite.com/js/a/index#/js/a/gen/genTable/list#代码生成工具 (opens new window)
基本信息:https://demo.jeesite.com/js/a/gen/genTable/form?tableName=test_data&op=step1 (opens new window)
字段配置:https://demo.jeesite.com/js/a/gen/genTable/form?tableName=test_data&op=step2 (opens new window)
生成信息:https://demo.jeesite.com/js/a/gen/genTable/form?tableName=test_data&op=step3 (opens new window)
# 代码生成选项说明
# 表基本信息
- 表名:物理表表名(实际表名)
- 表说明:物理表表描述,生成到各个类上
- 实体类名称:实体类的名称,所有类的前缀
- 功能作者:开发者姓名,生成到类注释上
- 关联父表的表名:子表配置的选项,选择父表表名
- 本表关联的外键名:子表配置的选项,与父表主键关联的字段,也叫外键
# 表字段信息
# 1)字段
- 列名:数据表定义的字段名称,通过驼峰命名法转换为实体类的字段名
- 列说明:数据表定义的字段注释,如果注释中带括号,或冒号,则括号中或冒号后的内容不生成到列标签中,只在列注释中体现。
- 字段类型:数据表定义字段类型
- 属性类型:也叫Java类型,是实体类的属性字段类型
- 属性名称:也叫Java字段,是实体类的属性字段名,支持复杂格式:对象名.属性名|属性名2,例如:用户user.userCode|userName,主要用于树选择组件;如果子表,则写主表实体类名+主键,如:formEntity.entityId。
- 主键:是否是主键字段。选择为“隐藏域字段”代表:自动生成主键;选择为“选择文本域”则代表有用户来手填主键值。
- 插入:是否是插入字段,如果是则包含在insert语句里
- 更新:是否是更新字段,如果是则包含在update语句里,不一定不出现在表单上
# 2)列表
- 列表:是否是列表查询,如果是则包含在列表页的表格列里。
- 查询:是否是查询字段,如果是则包含在查询页的查询列表里。
- 匹配方式:查询字段的查询方式,也就是where后的条件表达式,如:字段1=字段2 AND 字段3>字段4 AND 字段5 !=字段6。
# 3)表单
- 编辑:是否是编辑字段,如果是则包含在update语句里,并出现在表单上
- 必填:该字段是否可为空,不选代表为必填字段
- 控件类型:表单中字段生成的样式,如:input,select,treeselect,areatext等等
- 栅格:就是 BootStrap 的栅格布局,格式:行/标签/输入框(4.3.1后使用 一列、两列、三列 表单布局替代)
- 新行:该表单控件新起一行生成,也就是生成一个新的 标签。
- 字典类型:如果控件类型:下拉框、复选框、单选框,则该字段必须指定一个字典类型,字典类型为字段管理中的字典类型。
- 字段验证:数值、整数、日期、时间、账号、邮件、手机号、身份证号等。
# 表生成信息
- 生成模板:单表/主子表(增删改查)、树表/树结构表(增删改查)、业务层和持久层(增删改查)、仅持久层(dao/mapper/entity)
- 生成包路径:生成在哪个java包下,格式:{包名}/{模块名}/{分层(dao,entity,service,web)}/{子模块名}/{java类} 可从参数设置里修改:“gen.defaultPackageName” 的键值,来修改此默认值。如 com.jeesite.modules
- 生成模块名:生成包下的模块名称,模块名称下进行分层,也可理解为子系统名,例如 sys
- 生成子模块名:分层下的文件夹,可选,{分层(entity/dao/service/controller)}/{子模块名}/,可为空。
- 生成功能名:生成到类注释里。
- 功能名(简写):生成功能提示,如TAB上、列表上、提示信息(某某成功、某某失败)等。
- 生成基础路径:填写磁盘绝对路径,若不填写,则生成到当前Web项目下
其它选项
- 是否有启用停用:生成停用启用功能,生成表必须要有status字段。
- 是否有删除功能:生成删除数据功能,可删除数据。
- 是否可上传图片:生成上传图片控件。
- 是否可上传附件:生成上传文件控件。
# 自定义生成模板
有时根据业务需要,可能会个性化一些代码模板。JeeSite 提供了自定义“代码生成模板”功能。
如果有比较通用的功能,可以更贴合自己的业务编写生成模板,生成对应业务的功能。
你只需要拷贝/jeesite-module-core/src/main/resources/templates/modules/gen/config.xml
文件,并重名为config-custom.xml
放到任意项目的/src/main/resources/templates/modules/gen/
目录下即可,然后修改你的生成配置就可生效。
这个 config.xml 内包含了代码生成配置的所有信息。
# 常见问题
- 如何增加 “属性类型” ?请看上一节的“自定义生成模板”,修改
config-custom.xml
文件的attrType
元素里追加类型即可。增加其他选项,如 “控件类型”、“字段验证”,的方法与增加 “属性类型” 同理。 - 为什么选择 “区域选择” 控件时,编辑表单的时候没有回显区域名称?区域(行政区划)的名称一般是不变的数据,建议在你的业务表里建立
area_code
和area_name
两个字段,分别存储区域编码和区域名称。代码生成:(1)area_code
的 “属性名称” 里设置area_code|area_name
;(2)area_name
的 “编辑” 对勾去掉。 - 生成的树表如何实现分页?可以参考
AreaController
类的listPageData
方法,视图页面<table id="dataGrid"></table>
下一行增加<div id="dataGridPage"></div>
即可。