项目-在线资源共享ITDatabase

1 ITDatabase

1.1 系统总体架构

系统架构图

1.2 系统流程图

系统流程图

1.3 主页面展示

主页

1.4 ITDatabase-Web工程

1.4.1 Maven依赖

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.5.2.RELEASE</version>

<relativePath /> <!-- lookup parent from repository -->

</parent>

<dependencies>

<!-- 集成web -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<!-- 集成mybatis -->

<dependency>

<groupId>org.mybatis.spring.boot</groupId>

<artifactId>mybatis-spring-boot-starter</artifactId>

<version>1.1.1</version>

</dependency>

<!-- 集成mysql -->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.46</version>

</dependency>

<!-- 集成freemarker -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-freemarker</artifactId>

</dependency>

<!--Lombok -->

<dependency>

<groupId>org.projectlombok</groupId>

<artifactId>lombok</artifactId>

<version>1.18.6</version>

</dependency>

<dependency>

<groupId>net.logstash.logback</groupId>

<artifactId>logstash-logback-encoder</artifactId>

<version>4.9</version>

</dependency>

<!-- redis -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-redis</artifactId>

</dependency>

<!-- PageHelper -->

<dependency>

<groupId>com.github.pagehelper</groupId>

<artifactId>pagehelper-spring-boot-starter</artifactId>

<version>1.2.10</version>

</dependency>

</dependencies>

1.4.2 数据库设计

(1)用户表users

#用户表

CREATE TABLE `users`(

`id` int(11) NOT NUll  auto_increment COMMENT'主键(自增长)',

`username` VARCHAR(50) NOT NULL COMMENT'用户名',

`password` VARCHAR(32) NOT NULL COMMENT'密码,加密存储',

`phone` VARCHAR(20) DEFAULT NULL COMMENT'手机号',

`email` VARCHAR(50) DEFAULT NULL COMMENT'邮箱',

`openId` VARCHAR(100) DEFAULT NULL COMMENT'登录Id',

`created` TIMESTAMP not NULL DEFAULT CURRENT_TIMESTAMP COMMENT'自动插入,创建时间',

`updated` TIMESTAMP not null DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT'自动插入,修改时间',

PRIMARY KEY(`id`),

UNIQUE KEY `username` (`username`) USING BTREE,

UNIQUE KEY `phone` (`phone`) USING BTREE,

UNIQUE KEY `email` (`email`) USING BTREE

)ENGINE=INNODB COMMENT='用户表';

(2)资源内容表MessageInfo

#资源内容表

CREATE TABLE `message_info`(

`id` int(11) NOT null auto_increment COMMENT'主键(自增长)',

`message_name` VARCHAR(150) NOT null COMMENT'资源名称',

`message_url` VARCHAR(100) NOT NULL COMMENT'资源url',

`message_typeId` int NOT NULL COMMENT'资源类型Id',

`message_pwd` VARCHAR(100) NOT NULL COMMENT'资源提取码',

`message_author` VARCHAR(100) NOT null COMMENT'上传者',

`created` TIMESTAMP not NULL DEFAULT CURRENT_TIMESTAMP COMMENT'自动插入,创建时间',

`updated` TIMESTAMP not null DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT'自动插入,修改时间',

PRIMARY KEY(`id`),

KEY `message_name` (`message_name`) USING BTREE,

INDEX `message_typeId` (`message_typeId`) USING BTREE,

KEY `message_author` (`message_author`),

UNIQUE KEY `message_url` (`message_url`)

);

(3)资源类型表MessageType

#资源种类表

CREATE TABLE `message_type`(

`id` int(11) NOT NULL auto_increment COMMENT'主键(自增长)',

`type_name` VARCHAR(30) NOT NULL COMMENT'资源类型名',

PRIMARY KEY(`id`),

UNIQUE KEY `type_name` (`type_name`)

);

    资源类型表的id即为资源内容表的message_typeId。

1.4.3 实体类设计

(1)userEntity

        和数据库字段名保持一致

(2)MessageInfoEntity

        除保留数据库字段名外,添加typeName字段用于联合查询

(3)MessageTpyeEntity

        和数据库字段名保持一致

1.4.4 配置文件

server:

  port: 80

  context-path: /

mybatis:

  configuration:

# 开启驼峰uName自动映射到u_name

      map-underscore-to-camel-case: true

pagehelper:

# 方言配置

  helperDialect: mysql

# 3.3.0版本可用 - 分页参数合理化,默认false禁用

# 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页

# 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据

  reasonable: true

  supportMethodsArguments: true

  params: count=countSql

spring:

# mysql

  datasource:

      url: jdbc:mysql://localhost:3306/itdatabase

      username: root

      password: root

      driver-class-name: com.mysql.jdbc.Driver

  freemarker:

      allow-request-override: false

      cache: true

      check-template-location: true

      charset: UTF-8

      content-type: text/html

      expose-request-attributes: false

      expose-session-attributes: false

      expose-spring-macro-helpers: false

      suffix: .ftl

      template-loader-path: classpath:/templates/

#redis

  redis:

      host: localhost

      password: 123457

      port: 6379

      pool:

        max-idle: 100

        min-idle: 1

        max-active: 1000

        max-wait: -11

1.4.5 工程结构截图

工程截图

1.5 系统介绍

    本系统是在线资源共享系统,最早版本采用SSM框架,即Spring+SpringMVC+Mybatis进行设计,后续考虑到Springboot配置项目的便捷性,经过不断优化最终采用Springboot+Mybatis进行系统设计。系统设计依然采用SpringMVC模式,分Controller层、Service层和Dao层。

    系统设计从数据库设计开始,数据库表分为用户表、资源内容表和资源类型表。用户表用来存储注册的用户信息,有用户名、邮箱、密码等字段,其中Id为主键,用户名、手机号和邮箱加之唯一索引。资源内容表用来存储用户上传的资源信息,有资源名称、资源url、资源类型Id等字段,其中资源url为唯一索引,资源类型Id和资源类型表的Id相关联用来查询种类名称。资源类型表用来存储资源类型名称,已经存在10种在表中,用户也可以自定义类型上传至数据库,其中类型名称为唯一索引。

    接着是对实体类和Dao层的设计,实体类的设计只有在资源实体类中添加了typeName字段,用来将联合查询的结果存储在对象中,其他字段均为数据库映射,在配置文件中开启了Mybatis的“驼峰命名”映射规则。Dao层这里即为Mybatis的mapper层。根据数据表的分类,同样进行UserMapping、MessageInfoMapping和MessageTypeMapping的对应SQL封装。

    在Service层设计时,除了用户服务和资源服务外,加入Redis服务用来存储用户的登录信息,这是在用户禁用Cookie后的补偿措施。用户服务封装注册、登录、Redis写入和查询。注册时,使用MD5算法对用户的密码进行加密再存储。登录服务需要验证用户名、手机和邮箱三种登录方式,并在登录成功后将"OpenId"作为键,用户的openid作为值加入Cookie和Reids。资源服务封装读取所有资源、添加资源、读取所有资源类型、删除资源、修改资源操作。特别对于自定义添加类型操作,在前端设计只有在选中“自定义”类型时,显示新增资源名称输入框;在后端需要判断新增资源名是否为空或重复等进行相应处理。

    对于Controller层的设计,考虑到每次返回主页需要查询资源和分页,添加和修改资源页面需要查询所有资源类型,使用BaseController类,封装三个操作,其他Controller对其继承即可。分页采用PageHelper进行分页处理,每页记录初步设定为5条。在用户控制类中,访问主页面会检测Cookie和Redis的缓存,判断是否需要登录。在资源控制类中,处正常操作外,还拥有对添加资源的提交通过Session判断是否重复提交,对分页跳转进行控制。

    最后通过@SpringbootApplication注解和@MapperScan启动工程即可。

1.6 一些开发笔记

1 Mybatis的Mapping接口,多参数时,一定要使用@Param,并且对象的字段使用user.name形式。

2 前端input控件不输入值时,后端注意区别""和null

3 前端Input控件配置了value默认值后,不可用在配置Placeholder,否则默认值无法传到后端,为null

4 PageHelper后才能查数据库,并自动绑定查询结果的List。所以其他的List一定要再pagehelper之前定义!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容