该项目是由动吧项目更改而来,目的是为巩固自己的基础,提升手动能力。
文末提供了动吧项目源码、以及本作源码。(如有问题,请留言)
推荐idea插件:Easy Code、Free MyBatis plugin
数据库表设计不好,写后台代码会出现很多问题(我自己的表修改了n次)。
在设计数据库表的时候,要考虑的就是表的结构、字段以及表与表之间的关系。而且要符合数据库的三范式(表中字段必须最简、字段必须一一对应、表中字段不能与其他字段有所联系(递推关系))。
部门表、日志表就是比较简单的,因为这两张表不需要牵扯什么,而且设计起来相对简单。
单就表的设计而言权限表就比部门和日志上升了一点难度,以为权限表的设计中牵涉到了上级权限的问题。
上面三张表基本是一对一的关系,所以设计起来还是比较简单的。
在设计角色表的时候,需要注意复杂的多对多关系,此类关系直接建表会不符合三范式,需要拆表。
例如:角色表的设计,在设计角色表的时候,需要考虑角色与权限之间的关系。一个角色可能对应对各权限,如果直接写入会不符合第二范式,所以需要进行拆表,建立角色与权限表。
在用户表的设计的时候,也是一样的,用户与角色之间也需要进行拆分(此处如果不拆分,不符合第三范式)。但用户与部门之间就不需要进行拆分。
此处只举例角色表和用户表,用来理解表设计(三范式)
CREATE TABLE `y_roles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) COLLATE utf8_bin DEFAULT NULL,
`note` varchar(500) COLLATE utf8_bin DEFAULT NULL,
`createdTime` datetime DEFAULT NULL,
`modifiedTime` datetime DEFAULT NULL,
`createdUser` varchar(50) COLLATE utf8_bin DEFAULT NULL,
`modifiedUser` varchar(50) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
1.2.1.1角色与权限
此表不拆分,会不符合第二范式。因为一个角色可能拥有多种权限。
CREATE TABLE `y_role_menus` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`role_id` int(11) DEFAULT NULL,
`menu_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
CREATE TABLE `y_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) COLLATE utf8_bin DEFAULT NULL,
`password` varchar(100) COLLATE utf8_bin DEFAULT NULL,
`salt` varchar(50) COLLATE utf8_bin DEFAULT NULL,
`mobile` varchar(100) COLLATE utf8_bin DEFAULT NULL,
`createdTime` datetime DEFAULT NULL,
`modifiedTime` datetime DEFAULT NULL,
`modifiedUser` varchar(50) COLLATE utf8_bin DEFAULT NULL,
`valid` tinyint(4) DEFAULT NULL,
`deptId` varchar(50) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=84 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
1.2.2.1用户与角色
此表不拆分,会不符合第三范式。因为角色与权限之间有着递推关系。
CREATE TABLE `y_user_roles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`role_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
对于前端这一块基本没有什么好说的,因为主题框架都是采用的动吧项目的框架,只需要进行简单的修改即可。但是还是需要注意一些问题。
后端会进行重点说明。但是一些基础配置(pom、yml)不会进行说明。
后端的设计也很灵性,也是符合人的逻辑的,在进行后端操作的时候,也是一样由简入繁、由前端操作后端。
在业务模块中还是一些常见的包:controller、dao、entity、service、vo,下面将以控制层为主,依次跳入每个包,进行具体分析说明。
在访问时主要的流程还是基础流程Controller->Service->ServiceImpl->Dao->XML
在PageController中主要控制的是大的页面的跳转(登录、注册、首页等)他所对应的前端页面有(login、register、stater、page)
在此处基本没有需要注意的点,此页面只负责实现大型页面的跳转。唯一需要注意的地方就是在logout的时候。
@RequestMapping("/") //没有logout
public String Logout() {
Subject subject = SecurityUtils.getSubject(); //交给shiro处理
subject.logout();
return "redirect:doLoginUI"; //重定向
}
通用模块实现的就比较多了,比如切面、异常、配置等。
这里需要注意几个必须的:JsonResult、PageObject、GlobalExceptionHandler
这里的讲解从后端业务模块中最常见的说起(分包讲)。
JR对象是controller层中最常见的,再返回的时候,不是返回String类型的页面,就是返回一个JR对象
JR对象主要作用还是与前端进行交互,方便在前端对数据进行统一处理
JR包含的主要内容:
属性 | 备注 |
---|---|
success | 返回是否成功, true or false |
message | 提示的消息 |
data | 返回的数据,这个数据可以是任意的数据对象 |
show | 在前端是否默认显示消息,默认为true |
code | 返回编码,默认为200 ,这个可以在返回前端时 前后端双方协定好做一些判断 |
主要方法:
属性 | 备注 |
---|---|
records | 当前页要呈现的记录 |
rowCount | 总记录数 |
pageCount | 总页数 |
pageCurrent | 当前页码 |
pageSize | 页面大小(每页最多显示多少条记录) |
第一次写这种东西,还有很多不足,日后翻修项目如果还有所发现 ,将继续修改该文章。
如有不足与错误,希望大家可以指出