阅读本文前需要已经搭建好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
在前文的基础上,建表时还需要注意以下几点:
基于这些,对之前创建的表单进行修改。
//报销记录表
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登录进入。
在代码生成中选好要生成的表。
以下摘自官方文档:
表名:物理表表名
说明:物理表表描述
类名:生成表关联的实体类名称
父表表名:关联父表的表名,外键:当前表关联父表的主键,如果当前表为子表,需在此指定父表及外键。外键字段需在字段列表中手动设置属性名(对象.主键,例如:将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等等字典类型:如果字段生成方案为:下拉框、复选框、单选框,则该字段必须指定一个字典类型,字典类型为字段管理中的字典类型。
排序:字段生成的先后顺序,升序。
以下摘自官方文档:
方案名称:自定的方案名称,随意写即可。
模板分类:生成的模板,目前可生成如下模板:增删改查(单表)、增删改查(一对多)、仅持久层(dao/entity/mapper)、树结构表(一体)。
生成包路径:生成哪个包下。
生成模块名:生成包下的模块名称,模块名称下进行分层。
生成子模块名:分层下的文件夹,可为空。
生成功描述:生成到类注释里。
生成功能名:生成功能提示,如TAB上、列表上、提示信息等。
生成功能作者:开发者姓名
生成选项:是否替换现有文件,提供重复生成,覆盖原有文件。
这样子就成功生成了代码。
把生成的src文件夹拷贝到项目中,在eclipse中更新maven project,重启tomcat。
一开始没有更新maven项目,直接重启tomcat,报错,缺少class。
于是查了一下资料,maven项目是会自动编译的,不像ant需要运行build.xml,只需要更新工程就可以了。
设置菜单。
创建两个下级菜单,注意这里要改为隐藏,不能显示。
找到系统管理员,点击修改。
找到我们自己设置的菜单,勾选上它们。
别忘记保存。
成功了,我们的数据出现了。
另一张表同理,这里就不把操作贴上来了。
官方文档和网上的文档都只写到代码生成,具体代码用在工程里面鲜少有写,大概是因为太过简单了。但是新手操作起来还是会觉得很茫然的,像我就整了好久才整出这些来。于是就把自己摸索出的过程分享给大家。
需要注意的几点:
1)数据表一定要有官方文档中规定的那些属性,属性的类型一定是固定的,否则会添加数据时会有报错。
2)我的数据表是过程中,是不合理的,仅用作演示,后期我还会改动它们,请不要使用它们,也不要吐槽它们。当然如果你有很好的建表建议,且愿意指导我,我很欢迎哦~有任何疑问,请在评论区和我交流。