# Weituotian-JavaEE
**Repository Path**: treelee/weituotian-video
## Basic Information
- **Project Name**: Weituotian-JavaEE
- **Description**: 驮神JavaEE开发框架。基于 SpringMVC 4.35 + Spring 4.35 + Hibernater 5.25 + shiro + freemarker + AdminLTE Iframe。有一个视频网站示例,有配套的Android APP演示。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: 1.5hibernate_video
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 75
- **Created**: 2021-05-01
- **Last Updated**: 2021-05-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 驮神Java EE开发框架
---
大家好,我是韦驮天,今天给大家带来我的毕业设计项目,驮神java开发框架。
驮神开发框架是一款Java EE开发的权限系统。基于 SpringMVC 4.35 + Spring 4.35 + Hibernater 5.25 + shiro + freemarker + AdminLTE Iframe
## feature
1. 后台UI模版[AdminLte With Iframe](https://git.oschina.net/weituotian/AdminLTE-With-Iframe), 多tab页面,自适应后台(IE9+)
1. 使用Hibernate的JPA用法(参考了Spring Data JPA的源码),hibernate动态搜索条件加分页用JPA的Criterial API,无动态搜索的直接用jpql查询
1. 基于url的权限框架,shiro自定义过滤器, 整合ehcache,修复登录容易超时问题
1. BaseController, BaseService, BaseDao 封装常用操作
1. 基于shiro实现自动登录过滤器,APP用户可用
1. 对hibernate查询进行了优化, sql语句每个页面控制在4条之内。处理懒加载问题时,尽早将需要的实体或者字段fetch出来,避免查询更多sql
1. 解决shiro realm导致的service层不能注解事务的问题
1. js在前台生成树,后台不再生成树,优化服务器性能
## 参考项目
1. [spring-shiro-training](https://git.oschina.net/wangzhixuan/spring-shiro-training)
1. [SpringMVC-Mybatis-shiro](https://github.com/baichengzhou/SpringMVC-Mybatis-shiro)
1. 后台ui框架 [AdminLte With Iframe](https://git.oschina.net/weituotian/AdminLTE-With-Iframe)
## 截图
### 电脑端
*用户*
*角色*
*资源*
*分配资源*
*分配角色*
*菜单动态管理*
### 手机端
## 部署步骤
1. 使用mysql数据库,导入doc文件下的sql(**docs/sql/rbac_hibernate20170421.sql**)
1. 修改hibernater_config.property的文件, 修改为自己的mysql的连接配置
```
jdbc_url=jdbc:mysql://localhost:3306/rbac_hibernate?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
jdbc_username=root
jdbc_password=root
```
3. 假设tomcat或者jetty容器设置的context路径为webx,那么访问***http://localhost:8080/webx/login*** 为后台登录页面
### 初始账号
最高管理员 admin/123123
## 数据库设计
基于rbac, 数据库表描述
| 数据库表名称 | 数据库表描述 |
| --- | --- |
| user | 用户表,所有登录后台的用户 |
| role | 角色表,后台用户角色 |
| resource | 资源表,基于url的资源管理 |
| user\_role | 用户角色表 |
| role\_resource | 角色资源关联表 |
| menu | 菜单表,后台菜单 |
user 用户表
| 字段 | 类型 | 是否为空 | 主键 | 注释 |
| --- | --- | --- | --- | --- |
| id | int(11) | NO | 是 | Id |
| loginname | varchar(64) | NO | 否 | 登录名 |
| password | varchar(64) | NO | 否 | 密码,md5加密 |
| email | varchar(40) | NO | 否 | 邮箱 |
| name | varchar(64) | YES | 否 | 姓名 |
| usertype | int(2) | YES | 否 | 0为普通用户,1为管理员 |
| status | enum('OPEN','CLOSE') | YES | 否 | 状态 |
role 角色表
| 字段 | 类型 | 是否为空 | 主键 | 注释 |
| --- | --- | --- | --- | --- |
| id | int(11) | NO | 是 | id |
| name | varchar(40) | NO | 否 | 名字 |
| seq | int(11) | NO | 否 | 顺序 |
| status | enum('CLOSE','OPEN') | NO | 否 | 状态,1正常,0停用 |
user\_role 用户角色表
| 字段 | 类型 | 是否为空 | 主键 | 注释 |
| --- | --- | --- | --- | --- |
| user\_id | int(11) | NO | 是 | 用户id |
| role\_id | int(11) | NO | 是 | 角色id |
resource 资源表
| 字段 | 类型 | 是否为空 | 主键 | 注释 |
| --- | --- | --- | --- | --- |
| id | int(11) | NO | 是 | 资源id |
| moudle\_id | int(11) | YES | 否 | 模块id |
| name | varchar(40) | NO | 否 | 名字 |
| url | varchar(100) | NO | 否 | 资源url |
| status | enum('CLOSE','OPEN') | NO | 否 | 状态 |
| controller | varchar(255) | NO | 否 | 控制器 |
| method | varchar(255) | NO | 否 | 方法 |
| moudle | varchar(255) | NO | 否 | 模块名称 |
role\_resource 角色资源关联表
| 字段 | 类型 | 是否为空 | 主键 | 注释 |
| --- | --- | --- | --- | --- |
| role\_id | int(11) | NO | 是 | 角色id |
| resource\_id | int(11) | NO | 是 | 资源id |
---
---
---
# 配套实例
## 韦驮天视频
基于驮神开发框架。在其权限系统的基础上开发了一个视频网站的实现。
## 使用此后台的手机APP
[韦驮天视频的android app](https://git.oschina.net/weituotian/WeituotianVideoAndroidApp)
## 安装须知
- WEB-INF同级目录下创建upload文件夹,再创建子文件夹
upload
avater
cover
file
images
video
用来存放上传的头像,截图和视频
### 初始账号
会员帐号: weituotian/123123
## feature
* 修改dmuploader上传插件,上传图片可裁剪,上传可显示速度
* 利用hibernate中的继续关系,Member会员实体继承于User后台用户实体,共用主键
* 使用idea插件生成vo和entity转换代码
## 截图
### 电脑端
*首页*
*登录*
*注册*
*评论管理*
*后台首页*
*会员首页*
*视频管理*
头像上传
### 手机端
## 用例
## 数据库
数据库表描述
| 数据库表名称 | 数据库表描述 |
| --- | --- |
| attachment | 附件表,统一管理封面,头像和视频 |
| comment | 评论表,视频的评论 |
| member | 会员表,app的会员 |
| member\_collect | 收藏表,会员收藏的视频 |
| member\_follow | 关注表,会员关注 |
| patition | 分区表,视频分区 |
| video | 视频表 |
| video\_tag | 视频标签关联表 |
| video\_tags | 视频标签表 |
attachment 附件表
| 字段 | 类型 | 是否为空 | 主键 | 注释 |
| --- | --- | --- | --- | --- |
| id | int(11) | NO | 是 | Id |
| date | date | YES | 否 | 提交时间 |
| path | varchar(255) | YES | 否 | 路径 |
| temp | bit(1) | NO | 否 | 是否临时的 |
| type | varchar(255) | YES | 否 | Mime类型 |
| userId | int(11) | YES | 否 | 上传的用户id |
| filename | varchar(255) | YES | 否 | 文件名 |
comment 评论表
| 字段 | 类型 | 是否为空 | 主键 | 注释 |
| --- | --- | --- | --- | --- |
| id | int(11) | NO | 是 | Id |
| content | varchar(255) | YES | 否 | 内容 |
| postTime | datetime | YES | 否 | 回复时间 |
| member\_id | int(11) | YES | 否 | 会员id |
| video\_id | int(11) | YES | 否 | 视频id |
member 会员表
| 字段 | 类型 | 是否为空 | 主键 | 注释 |
| --- | --- | --- | --- | --- |
| id | int(11) | NO | 是 | Id |
| address | varchar(255) | YES | 否 | 地址 |
| avatar | varchar(255) | YES | 否 | 头像 |
| birthDate | date | YES | 否 | 生日 |
| descript | varchar(255) | YES | 否 | 签名描述 |
| fans | int(11) | YES | 否 | 粉丝数 |
| level | int(11) | YES | 否 | 等级 |
| regDate | date | YES | 否 | 注册日期 |
| sex | enum('UNKNOW','FEMALE','MALE') | YES | 否 | 性别enum |
| videos | int(11) | YES | 否 | 投稿视频数量 |
| follows | int(11) | YES | 否 | 关注的人数 |
| experience | int(11) | YES | 否 | 经验 |
member\_collect 用户收藏表
| 字段 | 类型 | 是否为空 | 主键 | 注释 |
| --- | --- | --- | --- | --- |
| member\_id | int(11) | NO | 否 | 会员id |
| video\_id | int(11) | NO | 否 | |
member\_follow 用户关注表
| 字段 | 类型 | 是否为空 | 主键 | 注释 |
| --- | --- | --- | --- | --- |
| member\_id | int(11) | NO | 否 | 用户id |
| up\_id | int(11) | NO | 否 | 关注的用户id |
menu 菜单表
| 字段 | 类型 | 是否为空 | 主键 | 注释 |
| --- | --- | --- | --- | --- |
| id | int(11) | NO | 是 | Id |
| pid | int(11) | YES | 否 | 父菜单id |
| text | varchar(40) | YES | 否 | 显示的名称 |
| status | enum('CLOSE','OPEN') | YES | 否 | 状态 |
| seq | smallint(6) | YES | 否 | 排序 |
| icon | varchar(100) | YES | 否 | 图标 |
| resource\_id | int(11) | YES | 否 | 关联的资源id |
patition 分区表
| 字段 | 类型 | 是否为空 | 主键 | 注释 |
| --- | --- | --- | --- | --- |
| id | int(11) | NO | 是 | Id |
| name | varchar(255) | YES | 否 | 分区名 |
reply 回复表
| 字段 | 类型 | 是否为空 | 主键 | 注释 |
| --- | --- | --- | --- | --- |
| id | int(11) | NO | 是 | Id |
| content | varchar(255) | YES | 否 | 内容 |
| postTime | datetime | YES | 否 | 提交时间 |
| comment\_id | int(11) | YES | 否 | 评论id |
| member\_id | int(11) | YES | 否 | 会员id |
video 视频表
| 字段 | 类型 | 是否为空 | 主键 | 注释 |
| --- | --- | --- | --- | --- |
| id | int(11) | NO | 是 | Id |
| auditTime | datetime | YES | 否 | 审核通过时间 |
| click | int(11) | YES | 否 | 点击数量 |
| collect | int(11) | YES | 否 | 收藏数量 |
| cover | varchar(255) | YES | 否 | 封面路径 |
| createTime | datetime | YES | 否 | 创建时间 |
| descript | varchar(255) | YES | 否 | 视频描述 |
| path | varchar(255) | YES | 否 | 路径 |
| play | int(11) | YES | 否 | 播放数量 |
| totalTime | int(11) | YES | 否 | 视频总时间 |
| updateTime | datetime | YES | 否 | 更新时间 |
| videoState | enum('Auditing','Uncommitted','ReEdit','AuditFailure','Audited') | YES | 否 | 视频状态 |
| member\_id | int(11) | YES | 否 | 上传的会员id |
| partition\_id | int(11) | YES | 否 | 分区id |
| title | varchar(255) | YES | 否 | 标题 |
| attachment\_id | int(11) | YES | 否 | 附件id |
| open\_state | enum('OPEN','CLOSE') | YES | 否 | 是否对外公开 |
video\_tag 视频标签关联表
| 字段 | 类型 | 是否为空 | 主键 | 注释 |
| --- | --- | --- | --- | --- |
| video\_id | int(11) | NO | 否 | 视频id |
| tag\_id | int(11) | NO | 否 | 标签id |
video\_tags 视频标签表
| 字段 | 类型 | 是否为空 | 主键 | 注释 |
| --- | --- | --- | --- | --- |
| id | int(11) | NO | 是 | Id |
| createTime | datetime | YES | 否 | 创建时间 |
| name | varchar(255) | YES | 否 | 标签名 |
会员与视频模块之间的关系,视频可以有多个评论,多个标签,对应只有一个附件保存视频MP4路径。用户可以发表多个评论,关注多个用户,收藏多个视频
## todo 待完成任务:
- 参数验证
- 系统日志
- 增加js插件 密码equal to的功能
- ~~优化search_~~
- 优化菜单jstree
- 用户验证
- 不同登录类型选择不同的shiro realm
- favicon
- ~~字体~~
- springmvc 访问频率验证 ,ehcache缓存
- 字典管理,附件管理
- 实现自定义注解
## 解决了的问题
- 修改上传插件dmuploader,支持上传速度显示。
- 整合Cropper和dmuploader,裁剪后ajax上传图片(ie9+)。
- Spring下在controller读取properties文件
- mybatis,springMVC,freemarker中对enum的使用
- freemarker模板与springmvc配置,引用相对路径模板文件
- springmvc使用@ModelAttribute,RedirectAttributes.addFlashAttribute重定向,url可不带重定向参数
- jstree,checkbox插件的用法,折叠全部,打开所有选择的节点
- freemarker使用shiro的标签
## 参考博客
[点此](reference.md)
## 关于我
[b站主页](http://space.bilibili.com/1604165/#!/)
