[[PageOutline(1-5,索引)]] = 1.引言 == 1.1.编写目的 [http://iprogman.idasound.com/template/ iProgMan]是为解决广大软件工程师提高开发代码效率的代码生成器。在编写程序代码时,通常每个功能模块的基础维护代码逻辑都相同,只是针对的表不同, 根据这其中的规律做成模板,机器就可以根据模板来生成前端和后端的代码了。这样就避开了那些枯燥的重复劳动,使开发人员将时间和精力集中于核心业务,既节省了开发人员的工作时间,也为企业节省了成本。 通过预先制作的模板,结合用户配置的数据,生成代码。 如果将生成的代码比作工厂中生成出来的产品,那么数据相当于产品的原材料, 而模板则相当于模具,即输入数据,通过模板加工,生产出代码。 == 1.2. 使用技术 应用框架使用JAVA语言搭建,用到的主要技术为当前比较流行的开源框架Spring,SpringMVC,mybatis,前端页面使用JSP,脚本使用JQUERY,EASYUI框架。 = 2.代码生成 下图为生成代码总流程图:\\ [[Image(2.png)]] [=#point2.1] == 2.1.第一步:创建项目 登录系统,点击“项目”菜单下的子菜单“项目信息”进入页面,点击“添加”按钮创建项目。 下图为创建项目窗口:\\ [[Image(2_1.png)]]\\ 字段说明:\\ * **项目名称:**项目的中文名称。 * **项目编码:**项目的英文名称。 * **项目类型:**包括非maven项目和maven项目。非maven项目为所需jar包在项目中,无效下载;maven项目为jar包不在项目中,需要通过pom配置从第三方下载;推荐选择非maven项目。 * **项目目录:**是生成的类的最外层包,一般也就是公司等组织网址域名的反写 * **项目模块:**项目目录的下个目录,一般为项目编码相同 **''案例说明:''**\\ {{{ 图2_1_1配置信息对应图2_1_2中的代码,template-demo为“项目编码”,com.idasound.ju321为“项目目录”,tbs为“项目模块” }}} [[Image(step_1.png)]] 图2_1_1 [[Image(step_2.png)]] 图2_1_2 [=#point2.2] == 2.2.第二步:创建数据结构 [=#point2.2.1] === 2.2.1.添加数据库 点击“数据结构”菜单下的子菜单“库信息”进入页面,点击“添加”按钮添加数据库。\\ [[Image(2_2_1.png)]]\\ 字段说明:\\ * **项目信息:**项目的中文名称,即[#point2.1 2.1第一步:创建项目] 的“项目名称” * **库类型:**目前支持mysql和oracle两种数据库 * **库名称:**登录数据库需要的链接名 * **库用户名:**登录数据库需要的用户名 * **库密码:**登录数据库需要的密码 * **库地址:**登录数据库需要的主机名或者IP地址 * **库端口:**登录数据库需要的端口:一般myslq为3306,oracle为1521 * **库描述:**数据库的中文描述信息 **''案例说明:''**\\ {{{ 如图2_2_1_1权限系统使用的数据库信息 }}} [[Image(step_2_2_1_1.png)]] 图2_2_1_1 [=#point2.2.2] === 2.2.2.添加表 点击“数据结构”菜单下的子菜单“表信息”进入页面,点击“添加”按钮添加表。\\ [[Image(2_2_2.png)]]\\ 字段说明:\\ * **库信息:**数据库的描述信息,即[#point2.2.1 2.2.1添加数据库]的“库描述” * **表名称:**数据库中表的名称,为英文名称 * **表描述:**对表信息的描述 **''案例说明:''**\\ {{{ 如图2_2_2_2为数据库template_demo的模型图,需要配置的数据如图2_2_2_1 }}} [[Image(step_2_2_2_1.png)]] 图2_2_2_1 [[Image(3.png)]] 图2_2_2_2 [=#point2.2.3] === 2.2.3.添加列 点击“数据结构”菜单下的子菜单“列信息”进入页面,点击“添加”按钮添加列。\\ [[Image(2_2_3.png)]]\\ 字段说明:\\ * **表信息:**数据库中表的信息,即[#point2.2.2 2.2.2添加表]的“表描述” * **列名称:**表中的字段名称,为英文名称 * **列描述:**对表中字段含义的解释说明,为中文名称 * **列类型:**表中字段的类型,包括字符串,数字,时间 * **列是否为空:**表中字段是否为空,页面添加或修改功能做非空校验 * **列长度:**表中字段的最大长度,页面添加和修改功能做长度校验 [[span(style=color: #FF0000, 快速生成列信息: )]]\\ [[span(style=color: #FF0000, 通过目录“数据结构”==>“表信息”进入表信息页面,选择需要添加列的表,点击初始化列信息可快速生成对应表的所有列,不用手动添加每一个列信息)]] **''案例说明:''**\\ {{{ 如模型图2_2_3_2(用户角色关系表)的列信息需要配置的数据为图2_2_3_1 }}} [[Image(step_2_2_3_1.png)]] 图2_2_3_1 [[Image(step_2_2_3_2.png)]] 图2_2_3_2 [=#point2.3] == 2.3.第三步:创建页面 点击“页面”菜单下的子菜单“页面信息”进入页面,点击“添加”按钮添加页面。\\ [[Image(2_3.png)]]\\ 字段说明:\\ * **项目信息:**项目的中文名称,即[#point2.1 2.1第一步:创建项目] 的“项目名称” * **模板信息:**包括通用模板(mysql和oracle两个版),多表关联模板。通用模板适用于 单表和多表操作,多表关联模板只使用于多对多的表结构 * **类编码:**页面的英文编码,用于生成java代码的文件名称和jsp的文件夹名称等 * **类小写编码:**类编码的第一个首字母小写,一般为骆驼命名法 * **页面名称:**页面的中文描述名称 **''案例说明:''**\\ {{{ 如图2_3_2为用户角色关系页面的配置,生成代码结构为图2_3_1中红色区域中的内容。图2_3_3为通用模板的展示效果,图2_3_4为多表关联模板展示效果 }}} [[Image(step_2_3_1.png)]] 图2_3_1\\ [[Image(step_2_3_2.png)]] 图2_3_2\\ [[Image(step_2_3_3.png)]] 图2_3_3\\ [[Image(step_2_3_4.png)]] 图2_3_4 [=#point2.4] == 2.4.第四步:创建页面对象 点击“页面”菜单下的子菜单“页面对象”进入页面,点击“添加”按钮添加页面对象。\\ [[Image(2_4.png)]]\\ 字段说明:\\ * **表结构:**数据库中表信息,即[#point2.2.2 2.2.2添加表]的“表描述” * **表主键列:**数据库中表信息的主键列,每个表有一个主键,一般在增、删、改和关联别的表都需要主键。即[#point2.2.3 2.2.3添加列]的“列描述” * **对象名称:**对表结构的中文描述名称 * **对象编码:**页面对象的英文名称,同一个页面的对象编码不能重复 * **页面信息:**表示添加的数据属于那个页面。该数据为[#point2.3 2.3第三步:创建页面]的“页面名称” * **扩展对象:**对页面对象的一个扩展,一般为当前表结构的子表结构。可以通过子表的外键显示当前表结构的所有数据(该数据为[#point2.4 2.4第四步创建页面对象]的“对象名称”) * **扩展对象列:**子表结构的外键列信息,和当前表结构的表主键列关联,可进行表关联查询([#point2.2.3 2.2.3添加列]的“列描述”) **''案例说明:''**\\ {{{ 如图2_3_3要展示的用户角色关系页面,需要配置页面需要的对象, 如图2_4_5中的t_bs_user_role数据不能展示用户名和角色名称, 需要对t_bs_user_role数据中的USER_ID和ROLE_ID扩展. 图2_4_1为页面需要的全部对象,图2_4_2是页面展示的主要对象,其中图2_4_3是对图2_4_2中的USER_ID(用户)的扩展对象,图2_4_4是对图2_4_3的ROLE_ID(角色)的扩展对象 }}} [[Image(step_2_4_1.png)]] 图2_4_1\\ [[Image(step_2_4_2.png)]] 图2_4_2\\ [[Image(step_2_4_3.png)]] 图2_4_3\\ [[Image(step_2_4_4.png)]] 图2_4_4\\ [[Image(step_2_4_5.png)]] 图2_4_5 [=#point2.5] == 2.5.第五步:创建页面属性 点击“页面”菜单下的子菜单“页面属性”进入页面,点击“添加”按钮添加页面属性。\\ [[Image(2_5.png)]]\\ 字段说明:\\ * **页面信息:**页面名称,即[#point2.3 2.3第三步:创建页面]的“页面名称” * **对象信息:**页面需要的数据信息,即2.4第四步:创建页面对象的“对象名称” * **列信息:**数据源信息对应的列([#point2.2.3 2.2.3添加列]的“列描述”) * **属性名称:**对“列信息”的描述,生成代码页面中显示的中文名称 * **属性编码:**英文名称,首字母大写,一个页面中的属性编码不能重复 * **属性小写编码:**属性编码的首字母小写 * **控件类型:**包括输入框,数字输入框,时间,下拉框,动态下拉框,树状下拉框。动态下拉框和树状下拉框为通过接口获取数据 * **实际值:**当控件类型为输入框,数字输入框,时间时,该项不填;当控件类型为下拉框时,填写传给服务器的值,多个值中间用英文逗号“,”隔开;当控件类型为动态下拉框,树状下拉框时,填写服务器返回的编码 * **显示值:**当控件类型为输入框,数字输入框,时间时,该项不填;当控件类型为下拉框时,填写页面显示的值,和实际值对应,多个值中间用英文逗号“,”隔开;当控件类型为动态下拉框,树状下拉框时,填写服务器返回的编码 * **属性参数:**当控件为输入框,数字输入框,时间和下拉框时,该项不填。当控件类型为动态下拉框,配置json数据{"url":"地址"};当地址有参数时需要配置json数据为{"url":"地址","urlParam":[{"key":"参数编码","val":"参数值"}]};当控件和别的控件有联动时需要配置json数据为{"url":"地址","onSelect":[{"relId":"关联控件code(当前页面中“属性小写编码”)","relUrlParam":"参数编码"}]},url地址的格式一般格式为 /模块编码([#point2.1 第一步:创建项目]的“项目模块”)/页面编码([#point2.3 第三步:创建页面]的“属性小写编码”)/标记code (queryAll为查询全部;queryTree为树形结构) [[span(style=color: #FF0000, 快速生成信息:)]]\\ [[span(style=color: #FF0000, 通过目录“页面”==>“页面信息”进入页面信息页面,选择需要添加属性的页面,点击初始化页面属性可快速生成对应页面包含数据的所有属性信息,不用手动添加每一条信息,然后修改类的编码,控件类型和删除不需要的属性信息)]] **''案例说明:''**\\ {{{ 图2_5_1为用户角色关系页面需要的控件信息 动态下拉框的配置说明: 如图2_5_2地址配置中tbs对应图2_5_3中的项目配置中的项目模块,tbsUser和tbsRole对应图2_5_4页面配置中的小写编码, 用户中的实际值和显示值都对应图2_5_5中的属性小写编码。 如果是树形下拉框和动态下拉框相似,区别是queryAll换成queryTree,并且需要添加查询条件如图2_5_6, treeId一般为主键编码,treePId为父节点编码,treePValue为父节点编码的默认值(一般为第一级节点的值) 联动效果说明: 联动配置同动态下拉框和树形下拉框相似,只是多配置了onSelect节点, 如图2_5_7产品信息列表改变,产品变量需要联动需要配置产品信息中的"relId":"attrId"对应产品变量中属性小写编码, relUrlParam对应的值为产品变量url地址需要的get参数 }}} [[Image(step_2_5_1.png)]] 图2_5_1\\ [[Image(step_2_5_2.png)]] 图2_5_2\\ [[Image(step_2_5_3.png)]] 图2_5_3\\ [[Image(step_2_5_4.png)]] 图2_5_4\\ [[Image(step_2_5_5.png)]] 图2_5_5\\ [[Image(step_2_5_6.png)]] 图2_5_6\\ [[Image(step_2_5_7.png)]] 图2_5_7\\ [=#point2.6] == 2.6.第六步:选择页面显示属性 点击“页面”菜单下的子菜单“页面配置”进入页面,点击“添加”按钮。\\ [[Image(2_6.png)]]\\ 字段说明:\\ * **页面信息:**页面名称,即[#point2.3 2.3第三步:创建页面]的“页面名称” * **页面元素:**元素名称,即[#point2.5 2.5第五步:创建页面]页面对象的“属性名称” * **显示位置:**包括搜索(列表的查询条件),列表(列表展示),添加(添加页面),修改(修改页面) * **显示状态:**包括显示,不显示(控件不可见,一般用于修改的主键元素),不可编辑(添加和修改页面不可以操作) * **显示顺序:**页面中元素的显示顺序 [[span(style=color: #FF0000,快速生成信息:)]]\\ [[span(style=color: #FF0000,当2.5第五步:创建页面对象属性完成后,可以通过目录“页面”==>“页面信息”进入页面信息页面,选择需要添加配置的页面,点击初始化页面配置可快速生成对应页面包含元素的所有页面配置,不用手动添加每一条信息,然后修改显示顺序和删除不需要的配置)]] **''案例说明:''**\\ {{{ 图2_6_1为用户角色关系页面搜索,列表,添加和修改区域显示的控件的配置 }}} [[Image(step_2_6_1.png)]] 图2_6_1 [=#point2.7] == 2.7.第七步:生成代码和下载 点击“项目”菜单下的子菜单“项目信息”进入页面。\\ 首先选择要生成的项目,点击生成代码即生成了该项目的所有代码,点击下载可打包下载整个项目。\\ 如果修改了页面信息,也可以通过“页面”菜单下的子菜单“页面信息”进入页面,选择修改的页面信息,点击生成代码,可以单独生成单个页面(速度比较快),再进入项目信息页面下载 = 3.案例 下图为案例的数据库表结构信息: // [[Image(3.png)]]// * **t_bs_user:**用户表 * **t_bs_role:**角色表 * **t_bs_menu:**权限表 * **t_bs_user_role:**用户角色关系表 * **t_bs_role_menu:**角色权限表 案例访问地址:[http://iprogman.idasound.com/demo/demo http://iprogman.idasound.com/demo/demo]\\ 案例配置访问地址:[http://iprogman.idasound.com/demo/template http://iprogman.idasound.com/demo/template]\\ == 3.1.案例配置数据 案例配置数据如下图菜单:\\ [[Image(3_1.png)]] == 3.2.案例展示 案例展示如下图菜单:\\ [[Image(3_2.png)]] == 3.3.案例代码 代码下载地址:[https://github.com/idasound/iProgMan https://github.com/idasound/iProgMan]\\ [[span(style=color: #FF0000,注意:需要修改配置文件/demo/src/main/resources/jdbc.properties的数据库连接配置)]]