jeesite代码生成器的使用(实例:报销表)

阅读本文前需要已经搭建好jeesite环境,具体请查看官方文档:http://www.jeesite.com/
PS.官方文档写得含糊且有不少错误,我焦头烂额地配置了两天才搭建好环境,不幸的是忘记记录了,如果有时间以后会写一份搭建环境的文档。

本文将使用jeesite生成代码功能,设计并实现报销流程的表单。

请务必结合《使用MySql设计表单并用jeesite实现报销流程》一起看,这是后续的重要教程。

【环境】windows 10专业版、jdk+eclipse+tomcat+mysql+maven+jeesite环境
【工具】谷歌浏览器

  • 创建业务表。
    前文中介绍了在Mysql数据库中建表的过程,请参考:http://blog.csdn.net/m0_38021128/article/details/68484893
    在前文的基础上,建表时还需要注意以下几点:

    1. 业务表必须包含字段:编号/id,创建者/create_by,创建时间/create_date,更新者/update_by,更新时间/update_date,备注信息/remarks,删除标记/del_flag。
    2. 以上字段的类型必须固定使用规定的,具体见下面代码。
    3. 字段需要存储中文字符的时候,要用nvarchar,不要用varchar。

    基于这些,对之前创建的表单进行修改。

//报销记录表
create table ExpenseClaimRecords(
ID varchar(64) NOT NULL,
Project_name nvarchar(30) NOT NULL,
Date timestamp NOT NULL,
Total decimal(6,2) NOT NULL,
create_by nvarchar(64) NOT NULL,
create_date timestamp NOT NULL,
update_by nvarchar(64) NOT NULL,
update_date timestamp NOT NULL,
remarks nvarchar(255),
del_flag char(1) NOT NULL,
CONSTRAINT key_number PRIMARY KEY(ID)
);

//报销项记录表
create table ExpenseClaimDetails(
ID varchar(64) NOT NULL,
Transportation decimal(6,2) NOT NULL,
Meals decimal(6,2) NOT NULL,
Office_Stationery decimal(6,2) NOT NULL,
Others decimal(6,2) NOT NULL,
Total decimal(6,2) NOT NULL,
create_by nvarchar(64) NOT NULL,
create_date timestamp NOT NULL,
update_by nvarchar(64) NOT NULL,
update_date timestamp NOT NULL,
remarks nvarchar(255),
del_flag char(1) NOT NULL,
CONSTRAINT key_number PRIMARY KEY(ID)
);

//两个都会报错
ERROR 1067 (42000): Invalid default value for 'update_date'

经查询发现,可能是因为服务器SQL模式 sql_mode - NO_ZERO_IN_DATE、NO_ZERO_DATE

//查看当前sql_mode
mysql> show variables like 'sql_mode';
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                                     |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

确实有NO_ZERO_IN_DATE、NO_ZERO_DATE,那么该如何删除它们呢?
网上说可以在my.ini中配置,于是我开始进行尝试。

先在my.ini中设置sql_mode。

//my.ini修改前
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8 
[mysqld]
#设置3306端口
port = 3306 
# 设置mysql的安装目录
basedir=D:\mysql\mysql-5.7.17-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql\mysql-5.7.17-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

//my.ini修改后
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8 
[mysqld]
#设置3306端口
port = 3306 
# 设置mysql的安装目录
basedir=D:\mysql\mysql-5.7.17-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql\mysql-5.7.17-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 其实就是加入了这句
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

然后重启mysql,需要注意的是这里必须以管理员身份运行cmd,否则会报错!

//非管理员身份运行
D:\mysql\mysql-5.7.17-winx64\bin>net stop mysql
发生系统错误 5。

拒绝访问。

//管理员身份运行
D:\mysql\mysql-5.7.17-winx64\bin>net stop mysql
MySQL 服务正在停止..
MySQL 服务已成功停止。


D:\mysql\mysql-5.7.17-winx64\bin>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。

再次登录mysql,建表。

mysql> create table ExpenseClaimRecords(
    -> ECno int NOT NULL,
    -> Project_name nvarchar(30) NOT NULL,
    -> Date timestamp NOT NULL,
    -> Total decimal(6,2) NOT NULL,
    -> create_by nvarchar(64) NOT NULL,
    -> create_date timestamp NOT NULL,
    -> update_by nvarchar(64) NOT NULL,
    -> update_date timestamp NOT NULL,
    -> remarks nvarchar(255),
    -> del_flag char(1) NOT NULL,
    -> CONSTRAINT key_number PRIMARY KEY(ECno)
    -> );
Query OK, 0 rows affected (0.06 sec)

mysql> create table ExpenseClaimDetails(
    -> ECno int NOT NULL,
    -> Transportation decimal(6,2) NOT NULL,
    -> Meals decimal(6,2) NOT NULL,
    -> Office_Stationery decimal(6,2) NOT NULL,
    -> Others decimal(6,2) NOT NULL,
    -> Total decimal(6,2) NOT NULL,
    -> create_by nvarchar(64) NOT NULL,
    -> create_date timestamp NOT NULL,
    -> update_by nvarchar(64) NOT NULL,
    -> update_date timestamp NOT NULL,
    -> remarks nvarchar(255),
    -> del_flag char(1) NOT NULL,
    -> CONSTRAINT key_number PRIMARY KEY(ECno)
    -> );
Query OK, 0 rows affected (0.04 sec)

成功了!

官方文档中使用了ERMaster(一种ER模型插件)来创建业务表,看起来方便快捷得多,有兴趣的可以自己去试试。我这边为了加深mysql的学习,就不用插件操作了。

  • 环境搭建好后,在浏览器中输入http://127.0.0.1:8080/jeesite进入jeesite快速开发平台,使用登录名/密码:thinkgem/admin登录进入。
    jeesite代码生成器的使用(实例:报销表)_第1张图片

  • 在代码生成中选好要生成的表。

jeesite代码生成器的使用(实例:报销表)_第2张图片

  • 配置表。

jeesite代码生成器的使用(实例:报销表)_第3张图片

以下摘自官方文档:

表名:物理表表名

说明:物理表表描述

类名:生成表关联的实体类名称

父表表名:关联父表的表名,外键:当前表关联父表的主键,如果当前表为子表,需在此指定父表及外键。外键字段需在字段列表中手动设置属性名(对象.主键,例如:将userId修改为user.id)

列名:数据表定义的字段名称

说明:数据表定义的字段注释

物理类型:数据表定义字段类型

Java类型:实体对象的属性字段类型

Java属性名称:实体对象的属性字段(对象名.属性名|属性名2|属性名3,例如:用户user.id|name|loginName,属性名2和属性名3为Join时关联查询的字段)

主键:是否是主键字段

可空:该字段是否可为空

插入:是否是插入字段,如果是则包含在insert语句里

编辑:是否是编辑字段,如果是则包含在update语句里

列表:是否是列表查询,如果是则包含在列表页的表格列里。

查询:是否是查询字段,如果是则包含在查询页的查询列表里。

查询方式:查询字段的查询方式,也就是where后的条件表达式,如:字段1=字段2 AND 字段3>字段4 AND 字段5 !=字段6。
字段生成方案:表单中字段生成的样式,如:input,select,treeselect,areatext等等

字典类型:如果字段生成方案为:下拉框、复选框、单选框,则该字段必须指定一个字典类型,字典类型为字段管理中的字典类型。

排序:字段生成的先后顺序,升序。

  • 保存成功,点击表名或者点击修改可以回到上一步,随时改属性。

jeesite代码生成器的使用(实例:报销表)_第4张图片

  • 同样的方式导入另一个表。

jeesite代码生成器的使用(实例:报销表)_第5张图片

  • 配置生成方案。

jeesite代码生成器的使用(实例:报销表)_第6张图片

以下摘自官方文档:

方案名称:自定的方案名称,随意写即可。

模板分类:生成的模板,目前可生成如下模板:增删改查(单表)、增删改查(一对多)、仅持久层(dao/entity/mapper)、树结构表(一体)。

生成包路径:生成哪个包下。

生成模块名:生成包下的模块名称,模块名称下进行分层。

生成子模块名:分层下的文件夹,可为空。

生成功描述:生成到类注释里。

生成功能名:生成功能提示,如TAB上、列表上、提示信息等。

生成功能作者:开发者姓名

生成选项:是否替换现有文件,提供重复生成,覆盖原有文件。

  • 生成代码。

jeesite代码生成器的使用(实例:报销表)_第7张图片

jeesite代码生成器的使用(实例:报销表)_第8张图片

  • 有趣的是它自己在f盘生成了一个src文件夹,并不在jeesite工程中。

jeesite代码生成器的使用(实例:报销表)_第9张图片

这样子就成功生成了代码。

  • 把生成的src文件夹拷贝到项目中,在eclipse中更新maven project,重启tomcat。
    一开始没有更新maven项目,直接重启tomcat,报错,缺少class。
    于是查了一下资料,maven项目是会自动编译的,不像ant需要运行build.xml,只需要更新工程就可以了。

  • 设置菜单。

jeesite代码生成器的使用(实例:报销表)_第10张图片

jeesite代码生成器的使用(实例:报销表)_第11张图片

jeesite代码生成器的使用(实例:报销表)_第12张图片

创建两个下级菜单,注意这里要改为隐藏,不能显示。

jeesite代码生成器的使用(实例:报销表)_第13张图片

jeesite代码生成器的使用(实例:报销表)_第14张图片

jeesite代码生成器的使用(实例:报销表)_第15张图片

  • 修改角色权限。

找到系统管理员,点击修改。

jeesite代码生成器的使用(实例:报销表)_第16张图片

找到我们自己设置的菜单,勾选上它们。

jeesite代码生成器的使用(实例:报销表)_第17张图片

别忘记保存。

jeesite代码生成器的使用(实例:报销表)_第18张图片

  • 来到我们设置的菜单下,已经可以找到并点开它啦。

jeesite代码生成器的使用(实例:报销表)_第19张图片

  • 创建一个数据试试。

jeesite代码生成器的使用(实例:报销表)_第20张图片

成功了,我们的数据出现了。

jeesite代码生成器的使用(实例:报销表)_第21张图片

另一张表同理,这里就不把操作贴上来了。

官方文档和网上的文档都只写到代码生成,具体代码用在工程里面鲜少有写,大概是因为太过简单了。但是新手操作起来还是会觉得很茫然的,像我就整了好久才整出这些来。于是就把自己摸索出的过程分享给大家。

需要注意的几点:
1)数据表一定要有官方文档中规定的那些属性,属性的类型一定是固定的,否则会添加数据时会有报错。
2)我的数据表是过程中,是不合理的,仅用作演示,后期我还会改动它们,请不要使用它们,也不要吐槽它们。当然如果你有很好的建表建议,且愿意指导我,我很欢迎哦~

有任何疑问,请在评论区和我交流。

你可能感兴趣的:(二七七的学习日志)