绪论
1.1 研究意义
当今社会作为一个飞速的发展社会,网络已经完全渗入人们的生活, 网络信息已成为传播的第一大媒介, 可以毫不夸张说网络资源获取已逐步改变了人们以前的生活方式,网络已成为人们日常,休闲主要工具。 人们记录、分享和发现美食的方式正在逐渐发生改变,因此借助怎样的互动方式能让那些喜欢美食美味的人通过享受和分享美食美味来宣扬自己的价值观, 获得大家肯定以及关注是一个深入探讨的话题。目前,基于springboot的美食分享网的设计与实现,正是互联网和社会生活之间的紧密联系体现。这个系统中我综合应用了 mysql5、springboot、mybaits等知识。网页界面结构设计以实用性出发,具有易于操作、方便特点。在设计中,首先,运用HTML5语言对网站的静态页面进行精细加工并且在网站的美工方面取得了良好效果。然后,对于 Java 编程、 HTML5的动态编程以及 mysql5 数据库进行努力学习和实践,并运用到了网站的建设中。 本论文就此美食分享网进行了详细全面论述。
1.2项目的可行性研究设计
此系统需要java面向对象编程基础,数据库知识和功能分析。根据目前阶段所掌握的相关专业知识,以及这学期和之前学习掌握的java编程知识和数据库应用知识以及前端知识做出一个这样的基于、springboot轻量级框架网页版的美食分享平台。
1.3相关技术简介
1.3.1 spring
Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性容器。尽管Spring框架自身对编程模型没有限制,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制反转核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期的容器化,利用面向切面编程进行声明式事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等。Spring框架具有控制反转(IOC)特性,它提供了一种通过Java的反射机制对Java对象进行统一的配置管理的方法。Spring框架利用容器管理对象生命周期,容器可以通过扫描XML文件配置对象。Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于代理模式,运行时可配置;AOP框架主要针对模块之间的交叉关注点进行模块化。Spring框架的AOP框架仅提供基本的AOP特性,Spring框架下的事务管理、远程访问等功能均可以通过使用SpringAOP技术实现。Spring的事务管理框架为Java平台带来了一种抽象机制,使本地和全局事务以及嵌套事务能够与保存点一起工作,并且几乎可以在Java平台的任何环境中工作。Spring集成多种事务模板,系统可以通过事务模板、XML或Java注解进行事务配置,并且事务框架集成了消息传递和缓存等功能。Spring数据访问框架解决了开发人员在应用程序中使用数据库时遇到的常见困难。它不仅对Java:JDBC、MyBATIs、Hibernate、Java数据对象(JDO)、ApacheOJB和ApacheCayne等所有流行的数据访问框架中提供支持,同时还可以与Spring的事务管理一起使用,为数据访问提供了灵活的抽象。Spring框架最初是没有打算构建一个自己的WebMVC框架,其开发人员在开发过程中认为现有的Web框架的呈现层和请求处理层之间以及请求处理层和模型之间的分离不够,于是创建了SpringMVC。
1.3.2 mybatis
mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开。mybatis通过配置文件关联到各实体类Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互,通过sqlSessionFactory拿到一个sqlSession,再执行sql。页面发送请求给控制器,控制器调用业务层处理,逻辑层向持久层发送请求,持久层与数据库交互,将结果返回给业务层,业务层将处理逻辑发送给控制器,控制器再调用视图展现数据。
1.3.3 Shiro权限框架
shiro是一个安全框架,是Apache的一个项目。shiro提供了:认证、授权、加密、会话管理、与web集成、缓存等模块。
1.1、模块介绍
Authentication:用户身份识别,可以是登录;
Authorization:授权,权限验证,验证某个已认证的用户是否拥有某个权限功能;即判断用户是否能做事情,常见:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某资源是否具有某个权限。
Session Manager:会话管理,用户登录后就是一次会话,在没有退出之前,所有信息都在会话中;会话可以是普通 JavaSE 环境的,也可以是如 Web 环境的。
Cryptography:加密,保护数据的安全性,密码加密存储到数据库,而不是明文存储。
Web Support:Web支持,可以非常容易的集成到 javaweb 环境。
Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率。
Concurrency:shiro 支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去。
Testing:提供测试支持。
2、核心概念
Subject:主体,代表了当前操作用户,这个用户不一定是具体的人,与当前应用交互的任何东西都是subject,即抽象概念。所有Subject都绑定到SecurityManager,与Subject交互都会委托给SercurityManager;
SecurityManager:安全管理器;即所有与subject安全有关的操作都会与SecurityManager交互;且它管理着所有的Subject;它负责与里面的各个组件交互,也可以把它理解成springmvc中DispatcherServlet前端控制器。
Realm:域,安全数据源。shiro从Realm获取安全数据(如用户、权限),就是说SecurityManager验证用户身份,那么它需要从Realm得到用户相应角色、权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。
1、应用代码通过Subject来进行认证和授权,而Subject又委托给SecurityManager;
2、SecurityManager要验证用户身份,那么它需要从Realm中获取相对应的用户、角色、权限进行比较以确定用户身份是否合法。
总结:shiro不提供维护用户、权限,而是通过Realm让开发人员自己注入。
3、shiro内部架构介绍
1) Subject:主体,看到主体可以是任何与应用交互“用户”。
2) SecurityManager:相当于 SpringMVC 中的 DispatcherServlet 或者 Struts2 中的FilterDispatcher。它是 Shiro 的核心,所有具体的交互都通过 SecurityManager 进行控制。它管理着所有 Subject、且负责进行认证和授权、及会话、缓存的管理。
3) Authenticator:认证器,负责主体认证的,这是一个扩展点,如果用户觉得 Shiro 默认的不好,我们可以自定义实现。其需要认证策略(Authentication Strategy),即什么情况下算用户认证通过了。
4) Authrizer:授权器,或者访问控制器。它用来决定主体是否有权限进行相应的操作,即控制着用户能访问应用中的哪些功能。
5) Realm:可以有1个或多个 Realm,可以认为是安全实体数据源,即用于获取安全实体的。它可以是 JDBC 实现,也可以是 LDAP 实现,或者内存实现等。
6) SessionManager:如果写过 Servlet 就应该知道 Session 的概念,Session 需要有人去管理它的生命周期,这个组件就是 SessionManager。而 Shiro 并不仅仅可以用在 Web 环境,也可以用在如普通的 JavaSE 环境。
7) SessionDAO:DAO 大家都用过,数据访问对象,用于会话的 CRUD。我们可以自定义 SessionDAO 的实现,控制 session 存储的位置。如通过 JDBC 写到数据库或通过 jedis 写入 redis 中。另外 SessionDAO 中可以使用 Cache 进行缓存,以提高性能。
8) CacheManager:缓存管理器。它来管理如用户、角色、权限等的缓存的。因为这些数据基本上很少去改变,放到缓存中后可以提高访问的性能。
9) Cryptography:密码模块,Shiro 提高了一些常见的加密组件用于如密码加密/解密的。
4、过滤器
当 Shiro 被运用到 web 项目时,Shiro 会自动创建一些默认的过滤器对客户端请求进行过滤。以下是 Shiro 提供的过滤器:
过滤器简称 | 对应的 Java 类 |
anon | org.apache.shiro.web.filter.authc.AnonymousFilter |
authc | org.apache.shiro.web.filter.authc.FormAuthenticationFilter |
authcBasic | org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter |
perms | org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter |
port | org.apache.shiro.web.filter.authz.PortFilter |
rest | org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter |
roles | org.apache.shiro.web.filter.authz.RolesAuthorizationFilter |
ssl | org.apache.shiro.web.filter.authz.SslFilter |
user | org.apache.shiro.web.filter.authc.UserFilter |
logout | org.apache.shiro.web.filter.authc.LogoutFilter |
noSessionCreation | org.apache.shiro.web.filter.session.NoSessionCreationFilter |
解释:
/admins/**=anon # 表示该 uri 可以匿名访问 /admins/**=auth # 表示该 uri 需要认证才能访问 /admins/**=authcBasic # 表示该 uri 需要 httpBasic 认证 /admins/**=perms[user:add:*] # 表示该 uri 需要认证用户拥有 user:add:* 权限才能访问 /admins/**=port[8081] # 表示该 uri 需要使用 8081 端口 /admins/**=rest[user] # 相当于 /admins/**=perms[user:method],其中,method 表示 get、post、delete 等 /admins/**=roles[admin] # 表示该 uri 需要认证用户拥有 admin 角色才能访问 /admins/**=ssl # 表示该 uri 需要使用 https 协议 /admins/**=user # 表示该 uri 需要认证或通过记住我认证才能访问 /logout=logout # 表示注销,可以当作固定配置 |
1.3.4 SpringBoot
SpringBoot是Pivotal团队在2013年开始研发、2014年4月发布第一个版本全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,引用的不稳定性等问题得到了很好的解决。
SpringBoot具备的特征有:
(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
(2)内嵌Tomcat或Jetty等Servlet容器;
(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
(4)尽可能自动配置Spring容器;
(5)提供准备好的特性,如指标、健康检查和外部化配置;
(6)绝对没有代码生成,不需要XML配置。 [1] [2]
SpringBoot框架中还有两个非常重要的策略:开箱即用和约定优于配置。开箱即用,Outofbox,是指在开发过程中,通过在MAVEN项目的pom文件中添加相关依赖包,然后使用对应注解来代替繁琐的XML配置文件以管理对象的生命周期。这个特点使得开发人员摆脱了复杂的配置工作以及依赖的管理工作,更加专注于业务逻辑。约定优于配置,Convention over configuration,是一种由SpringBoot本身来配置目标结构,由开发者在结构中添加信息的软件设计范式。这一特点虽降低了部分灵活性,增加了BUG定位的复杂性,但减少了开发人员需要做出决定的数量,同时减少了大量的XML配置,并且可以将代码编译、测试和打包等工作自动化。
SpringBoot应用系统开发模板的基本架构设计从前端到后台进行说明:前端常使用模板引擎,主要有FreeMarker和Thymeleaf,它们都是用Java语言编写的,渲染模板并输出相应文本,使得界面的设计与应用的逻辑分离,同时前端开发还会使用到Bootstrap、AngularJS、JQuery等;在浏览器的数据传输格式上采用Json,非xml,同时提供RESTfulAPI;SpringMVC框架用于数据到达服务器后处理请求;到数据访问层主要有Hibernate、MyBatis、JPA等持久层框架;数据库常用MySQL;开发工具推荐IntelliJIDEA。
1.3.5 jQuery
jQuery是一个快速、简洁JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的css选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。jQuery兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等
1.3.6 Mysql
MySQL 是一款安全、跨平台、高效的,并与 PHP、Java 等主流编程语言紧密结合的数据库系统。该数据库系统是由瑞典的 MySQL AB 公司开发、发布并支持,由 MySQL 的初始开发人员 David Axmark 和 Michael Monty Widenius 于 1995 年建立的。
MySQL 的象征符号是一只名为 Sakila 的海豚,代表着 MySQL 数据库的速度、能力、精确和优秀本质。
目前 MySQL 被广泛地应用在 Internet 上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,使得很多公司都采用 MySQL 数据库以降低成本。
MySQL 数据库可以称得上是目前运行速度最快的 SQL 语言数据库之一。除了具有许多其他数据库所不具备的功能外,MySQL 数据库还是一种完全免费的产品,用户可以直接通过网络下载 MySQL 数据库,而不必支付任何费用。
MySQL 特点
下面总结了一下 MySQL 具备的特点。
1) 功能强大
MySQL 中提供了多种数据库存储引擎,各引擎各有所长,适用于不同的应用场合,用户可以选择最合适的引擎以得到最高性能,可以处理每天访问量超过数亿的高强度的搜索 Web 站点。MySQL5 支持事务、视图、存储过程、触发器等。
2) 支持跨平台
MySQL 支持至少 20 种以上的开发平台,包括 Linux、Windows、FreeBSD 、IBMAIX、AIX、FreeBSD 等。这使得在任何平台下编写的程序都可以进行移植,而不需要对程序做任何的修改。
3) 运行速度快
高速是 MySQL 的显著特性。在 MySQL 中,使用了极快的 B 树磁盘表(MyISAM)和索引压缩;通过使用优化的单扫描多连接,能够极快地实现连接;SQL 函数使用高度优化的类库实现,运行速度极快。
4) 支持面向对象
PHP 支持混合编程方式。编程方式可分为纯粹面向对象、纯粹面向过程、面句对象与面向过程混合 3 种方式。
5) 安全性高
灵活和安全的权限与密码系统,允许基本主机的验证。连接到服务器时,所有的密码传输均采用加密形式,从而保证了密码的安全。
6) 成本低
MySQL 数据库是一种完全免费的产品,用户可以直接通过网络下载。
7) 支持各种开发语言
MySQL 为各种流行的程序设计语言提供支持,为它们提供了很多的 API 函数,包括 PHP、ASP.NET、Java、Eiffel、Python、Ruby、Tcl、C、C++、Perl 语言等。
8) 数据库存储容量大
MySQL 数据库的最大有效表尺寸通常是由操作系统对文件大小的限制决定的,而不是由 MySQL 内部限制决定的。InnoDB 存储引擎将 InnoDB 表保存在一个表空间内,该表空间可由数个文件创建,表空间的最大容量为 64TB,可以轻松处理拥有上千万条记录的大型数据库。
9) 支持强大的内置函数
PHP 中提供了大量内置函数,几乎涵盖了 Web 应用开发中的所有功能。它内置了数据库连接、文件上传等功能,MySQL 支持大量的扩展库,如 MySQLi 等,可以为快速开发 Web 应用提供便利。
数据库的应用
数据库是计算机应用系统中的一种专门管理数据资源的系统。数据有多种形式,如文字、数码、符号、图形、图像及声音等,数据是所有计算机系统所要处理的对象。我们所熟知的一种处理办法是制作文件,即将处理过程编成程序文件,将所涉及的数据按程序要求组成数据文件,再用程序来调用,数据文件与程序文件保持着一定的关系。
在计算机应用迅速发展的情况下,这种文件式管理方法便显出它的不足。比如,它使得数据通用性差、不便于移植、在不同文件中存储大量重复信息、浪费存储空间、更新不便等。
而数据库系统便能解决上述问题。数据库系统不从具体的应用程序出发,而是立足于数据本身的管理,它将所有数据保存在数据库中,进行科学的组织,并借助于数据库管理系统,以它为中介,与各种应用程序或应用系统接口,使之能方便地使用数据库中的数据。
其实简单地说,数据库就是一组经过计算机整理后的数据,存储在一个或多个文件中,而管理这个数据库的软件就称为数据库管理系统。一般一个数据库系统(Database System)
可以分为数据库(Database)与数据管理系统(Database Management System,DBMS)两个部分。主流的数据库软件有 Oracle、Informix、Sybase、SQL Server、PostgreSQL、MySQL、Access、FoxPro 和 Teradata 等等。
数据库在 Web 开发中的重要地位
归根结底,动态网站都是对数据进行操作,我们平时浏览网页时,会发现网页的内容会经常变化,而页面的主体结构框架没变,新闻就是一个典型。这是因为我们将新闻存储在了数据库中,用户在浏览时,程序就会根据用户所请求的新闻编号,将对应的新闻从数据库中读取出来,然后再以特定的格式响应给用户。
Web 系统的开发基本上是离不开数据库的,因为任何东西都要存放在数据库中。所谓的动态网站就是基于数据库开发的系统,最重要的就是数据管理,或者说我们在开发时都是在围绕数据库在写程序。所以作为一个 Web 程序员,只有先掌握一门数据库,才可能去进行软件开发。
二、系统需求分析
2.1系统功能分析
1.用户模块管理:用户登录、用户注册、用户的查询、添加、删除操作、
2.美食分享笔记管理:分享笔记列表的展示、添加、修改、删除操作、
3.美食笔记详情管理:美食笔记详情列表的查看、添加、删除等操作、
4.管理员信息管理:管理员信息的查看、修改、
5.公告信息管理:公告信息的查看、添加、修改、删除操作、
6.用户模块管理:用户列表查询、添加、删除、
7.用户评论模块管理:用户评论查询、添加、删除、
8.注销退出登录管理
2.2系统运行环境
JavaJDK1.8环境配置、
Java运行在idea软件上,
数据库用mysql5版本数据库、
数据库采用Nacicat Mysql可视化工具、
基于主流的谷歌浏览器运行展示以及F12控制台调试样式、
三、系统设计
3.1系统模板设计
系统主要设计采用Java语言开发、采用springboot为后台框架、数据库框架采用mybatis、前端采用jquery、layui框架等
主要模块设计如下:
1.用户模块管理:用户登录、用户注册、用户的查询、添加、删除操作、
2.美食分享笔记管理:分享笔记列表的展示、添加、修改、删除操作、
3.美食笔记详情管理:美食笔记详情列表的查看、添加、删除等操作、
4.管理员信息管理:管理员信息的查看、修改、
5.公告信息管理:公告信息的查看、添加、修改、删除操作、
6.用户模块管理:用户列表查询、添加、删除、
7.用户评论模块管理:用户评论查询、添加、删除、
8.注销退出登录管理
3.2系统流程描述
3. 3项目源码架构设计
四、系统实现
4.1 程序主要类
4.1.1用户管理员类
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer adminId; // 管理员Id
@Column(length=200)
private String userName; // 用户名
@Column(length=200)
private String password; // 密码
@Column(length=200)
private String trueName; // 真实姓名
@Column(length=200)
private String headPortrait; // 头像
@Column(length=50)
private String sex; // 性别
@Column(length=500)
private String signature; // 备注
@Column(length=200)
private String phone; // 电话
4.1.4美食分享类
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer articleId; // 文章Id
@Column(length = 200)
private String title; // 文章标题
@Lob
@Column(columnDefinition = "TEXT")
private String content; // 文章内容
@Transient
private String contentNoTag; // 博客内容 无网页标签 Lucene分词用到
private Date publishDate; // 发布日期
@Column(length = 200)
private String author; // 作者
@ManyToOne
@JoinColumn(name = "classifyId")
private Classify classify; // 文章类别
private Integer click; // 点击数
private Integer commentNum; // 评论数
4.1.4美食分享博主类
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer bloggerId; // 博主Id
@Column(length=200)
private String nickName; // 昵称
@Column(length=200)
private String headPortrait; // 头像
@Column(length=500)
private String motto; // 座右铭
@Column(length=500)
private String signature; // 个性签名
@Column(length=200)
private String site; // 地址
4.1.4美食评论类
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer commentId; // 评论Id
@ManyToOne
@JoinColumn(name="articleId")
private Article article; // 文章Id
@ManyToOne
@JoinColumn(name="userId")
private User user; // 用户Id
@Column(length=500)
private String content; // 评论内容
private Date commentDate; // 评论时间
4.1.4公告信息类
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer noticeId; // 公告Id
@Column(length=500)
private String content; // 公告内容
private Date publishDate; // 发布日期
@Column(length=200)
private Integer grade; // 等级 0 重要 1 一般
4.1.4美食评论回复类
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer replyId; // 回复Id
@ManyToOne
@JoinColumn(name="commentId")
private Comment comment; // 评论Id
@ManyToOne
@JoinColumn(name="userId")
private User user; // 用户Id
@Column(length=500)
private String content; // 回复内容
private Date replyDate; // 回复时间
4.1.4用户信息类
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer userId; // 用户Id
@Column
private String username;// 用户名
@Column
private String password;// 密码
@Column(length = 200)
private String openId; // openID
@Column(length = 200)
private String nickname; // 昵称
@Column(length = 200)
private String headPortrait; // 头像
@Column(length = 50)
private String sex; // 性别
@Column(nullable = false, columnDefinition = "timestamp", updatable = false)
private Date registrationDate; // 注册日期
private Date latelyLoginTime; // 最近登录时间
private String phone;// 手机号
private java.sql.Date birthday;// 生日
private String articleIds;// 收藏文章id
private String userIds;// 关注的用户id
private String momo;// 备注
4.3系统功能主要实现模块截图
4.3.1登录注册
用户输入网址localhost:80、然后输入数据账号密码进行验证登录、
4.3.1登录页面
输入账号密码、昵称和性别等信息进行注册
4.3.2注册页面:
4.3.2 主页面功能
输入地址localhost:80进入系统首页
4.3.2.1 美食笔记专栏管理
在首页上方导航栏点击笔记专栏查看专栏美食信息
4.3.2.3 美食分享首页
点击网站首页查看当前美食分享平台上面的最新美食分享、点击可以查看美食分享具体信息。
4.3.2.4 添加美食笔记
添加美食分享文章标题信息、作者、分享笔记类型和封面图片以及主要内容完成添加
4.3.2.5 个人中心管理
在美食分享页面个人中心--里面可以查看修改我的个人信息、查看我的笔记、我喜欢的美食收藏信息等操作。
4.3.2.6 后台美食分类管理
在地址输入http://localhost/admin/login 之后输入账号密码进行管理员登录管理、点击美食笔记类型管理可以添加美食分类信息、比如中餐。西餐、小吃等类型、可以对美食类型进行修改、删除操作
4.3.2.7 美食笔记管理
在美食笔记管理页面可以查看美食分享列表信息、可以添加美食分享信息、修改和删除美食分享信息。
美食信息列表
美食笔记分享添加:
4.3.2.8 美食公告管理
在美食公告管理页面可以查看美食公告列表信息、可以添加美食公告信息、修改和删除美食公告信息。
4.3.2.9 美食分享评论管理
在美食分享评论管理页面可以查看美食分享评论列表信息
4.3.3部分关键源码展示:
4.3.4.1登录模块:
/**
* 验证登录
*
* @param user
* @param request
* @return
*/
@RequestMapping("/checkLogin")
public ModelAndView checkLogin(User user, HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
HttpSession session = request.getSession();
User u = userService.findByUsernameAndPassword(user.getUsername(), user.getPassword());
if (u == null) {
mav.addObject("user", user);
mav.addObject("errorInfo", "用户名或者密码错误!");
mav.setViewName("webLogin");
} else {
u.setLatelyLoginTime(new Date());
userService.save(u);
session.setAttribute("user", u);
mav.addObject("success", true);
mav.setViewName("/index");
}
return mav;
}
4.3.4.2 springboot全局配置文件:
server:
port: 80
servlet:
context-path: /
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/lifeShare?characterEncoding=utf8
username: root
password: 123456
jpa:
hibernate:
ddl-auto: update
show-sql: true
thymeleaf:
cache: false
MD5Salt: longwang
imageFilePath: C:\\Users\\Administrator\\Desktop\\bishe\lifeShare\\src\\main\\webapp\\static\\images\\
downloadImagePath: C:\\Users\\Administrator\\Desktop\\bishe\lifeShare\\src\\main\\webapp
lucenePath: C:\\Users\\Administrator\\Desktop\\bishe\lifeShare\\lucene
4.3.4.3 数据库连接配置文件:
#数据源的地址
spring.datasource.url=jdbc:mysql://127.0.0.1:3307/db_fruit_vegetable_shop?serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=crit@2019
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.continue-on-error=false
spring.datasource.test-while-idle=true
#获取连接时候验证,会影响性能
spring.datasource.test-on-borrow=false
#在连接归还到连接池时是否测试该连接
spring.datasource.test-on-return=false
spring.datasource.validation-query=SELECT 1 FROM DUAL
#空闲连接回收的时间间隔,与test-while-idle一起使用,设置5分钟
spring.datasource.time-between-eviction-runs-millis=300000
#连接池空闲连接的有效时间 ,设置30分钟
spring.datasource.min-evictable-idle-time-millis=1800000
spring.datasource.initial-size=5
#指定连接池中最大的活跃连接数.
spring.datasource.max-active=50
#指定连接池等待连接返回的最大等待时间,毫秒单位.
spring.datasource.max-wait=60000
#指定必须保持连接的最小值
spring.datasource.min-idle=5
#热部署生效
spring.devtools.restart.enabled=true
#mybatis驼峰匹配开启
mybatis.configuration.map-underscore-to-camel-case=true
# 控制台日志配置
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#mapper文件扫描路径
mybatis.mapper-locations=classpath*:mappers/admin/*.xml,classpath*:mappers/home/*.xml,classpath*:mappers/common/*.xml
#mail配置
spring.mail.host=smtp.163.com
spring.mail.protocol=smtp
spring.mail.default-encoding=UTF-8
spring.mail.username=15959100218@163.com
spring.mail.password=LBWCLXTCZNGUMVMZ
spring.mail.test-connection=true
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
#redis配置
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.database=0
#图片上传设置
yjq.upload.photo.sufix=.jpg,.png,.gif,.jpeg
#1024KB
yjq.upload.photo.maxsize=1024
#200MB = 204800KB
yjq.upload.attachment.maxsize=204800
yjq.upload.photo.path=D:/IDEA_project/FruitAndVegetableShop/src/main/resources/upload/photo/
yjq.upload.attachment.path=D:/IDEA_project/FruitAndVegetableShop/src/main/resources/upload/attachment/
4.3.4.5代码主启动类:
package com.longwang;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class BlogApplication {
public static void main(String[] args)
{
SpringApplication.run(BlogApplication.class, args);
}
}
4.4数据库表设计
数据库采用mysql5版本、满足数据库设计三范式。
编码采用utf8 -- UTF-8 Unicode
排序规则采用utf8_general_ci
4.4.0数据库三范式要求:
一、第一范式
1NF是对属性的原子性,要求属性具有原子性,不可再分解;
二、第二范式
2NF是对记录的唯一性,要求记录有唯一标识,即实体的唯一性,即不存在部分依赖;
三、第三范式
3NF是对字段的冗余性,要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖;
4.4.1数据库表ER图
4.4.2用户表设计
主要字段有:用户名、密码、邮箱、头像、个人信息、昵称、关注ids、手机号等信息
4.4.3美食分享文章表设计
主要字段有:id、美食标题、内容、用户评论数量、是否为原创、转载、用户id、图片名称等
4.4.4个人博客表设计
主要字段有:博客id、头像图片、标题、姓名、地址等字段
4.4.5美食分类表设计
主要字段有:id、美食分类名称
4.4.6美食分享评论表设计
主要字段有:id、评论时间、评论内容、评论人等
4.4.7美食分享公告表设计
主要字段有:id、公告内容、内容级别、时间等字段
4.4.6数据库sql文件
/*
Navicat MySQL Data Transfer
Source Server : 139-3307
Source Server Version : 50727
Source Host : localhost:3307
Source Database : lifeshare
Target Server Type : MYSQL
Target Server Version : 50727
File Encoding : 65001
Date: 2021-03-02 17:16:15
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for hibernate_sequence
-- ----------------------------
DROP TABLE IF EXISTS `hibernate_sequence`;
CREATE TABLE `hibernate_sequence` (
`next_val` bigint(20) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of hibernate_sequence
-- ----------------------------
INSERT INTO `hibernate_sequence` VALUES ('3');
INSERT INTO `hibernate_sequence` VALUES ('3');
INSERT INTO `hibernate_sequence` VALUES ('3');
INSERT INTO `hibernate_sequence` VALUES ('3');
INSERT INTO `hibernate_sequence` VALUES ('3');
INSERT INTO `hibernate_sequence` VALUES ('3');
INSERT INTO `hibernate_sequence` VALUES ('3');
INSERT INTO `hibernate_sequence` VALUES ('3');
INSERT INTO `hibernate_sequence` VALUES ('3');
-- ----------------------------
-- Table structure for t_admin
-- ----------------------------
DROP TABLE IF EXISTS `t_admin`;
CREATE TABLE `t_admin` (
`admin_id` int(11) NOT NULL AUTO_INCREMENT,
`head_portrait` varchar(200) DEFAULT NULL,
`password` varchar(200) DEFAULT NULL,
`phone` varchar(200) DEFAULT NULL,
`sex` varchar(50) DEFAULT NULL,
`signature` varchar(500) DEFAULT NULL,
`true_name` varchar(200) DEFAULT NULL,
`user_name` varchar(200) DEFAULT NULL,
PRIMARY KEY (`admin_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of t_admin
-- ----------------------------
INSERT INTO `t_admin` VALUES ('1', 'DefaultHeadPortrait.jpg', 'admin', '18574375225', '男', '我是管理员', 'Admin', 'admin');
-- ----------------------------
-- Table structure for t_article
-- ----------------------------
DROP TABLE IF EXISTS `t_article`;
CREATE TABLE `t_article` (
`article_id` int(11) NOT NULL AUTO_INCREMENT,
`author` varchar(200) NOT NULL,
`click` int(11) DEFAULT NULL,
`comment_num` int(11) DEFAULT NULL,
`content` text,
`image_name` varchar(255) DEFAULT NULL,
`is_original` int(11) DEFAULT NULL,
`is_top` int(11) DEFAULT NULL,
`publish_date` datetime DEFAULT NULL,
`title` varchar(200) NOT NULL,
`classify_id` int(11) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL,
PRIMARY KEY (`article_id`),
KEY `FKo4fros4yfq1m9ay7sgtlcvbc4` (`classify_id`),
CONSTRAINT `FKo4fros4yfq1m9ay7sgtlcvbc4` FOREIGN KEY (`classify_id`) REFERENCES `t_classify` (`classify_id`)
) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of t_article
-- ----------------------------
INSERT INTO `t_article` VALUES ('11', '李杨勇', '84', '3', '<p>在当今这个互联网时代,甚至5G马上就要普遍使用的时代,餐饮行业如果还只是停留在专心做好菜品就能口口相传,生意不愁的时代已经不复存在了,据相关数据显示2020年全国将近1000万家餐饮门店,但每天有近10000家餐厅关门!唯有把握好当今餐饮行业的发展趋势,才能在竞争中立于不败之地。</p>\n\n<p>2020年因疫情的原因餐饮行业实体店受到很大程度的影响,大多数餐饮企业都开始转为线上点餐及预约就餐服务。那么问题来了这些问题应该怎么实现呢?餐饮网站建设的兴起为餐饮行业线上服务做出了很大的支撑,下面时代汇创在这里为大家分享一下成都餐饮行业网站建设必须要有的一下功能板块!</p>\n\n<p><img src=\"https://inews.gtimg.com/newsapp_bt/0/13224992512/1000\" /><em>成都餐饮电商网站制作</em></p>\n\n<p>首先要做到菜品的食材的追根溯源,让消费者可以查到这些食材的来源,随着时代的发展,现在越来越多的人重视健康了,让消费者可以看到他点的菜品食材的所有来源也比较放心,就会对这个企业放心,对企业也是很好的一种宣传方式!</p>\n\n<p>其次就是要做到顾客点餐的简单便捷,现在大多数的年轻人都比较看中时间,不喜欢繁琐的操作步骤,简单易操作的点餐环节可以很好的留住顾客。</p>\n\n<p>通过这次疫情很多的餐饮企业通过重视餐饮网站建设发展电商业务,极大的缓解了因疫情带来的巨大经济压力。可以预见的是,疫情结束后,很多的餐饮企业对于餐饮网站建设电商业务的探索不会停止,电商业务的发展也会给餐饮行业带来新的灵感与活力。</p>\n', '20210302043445.png', '1', '1', '2021-03-02 16:34:47', '成都餐饮电商网站制作会给餐饮行业带来新的灵感与活力吗?', '15', null);
INSERT INTO `t_article` VALUES ('13', 'Single·湘潭', '69', '2', '<p>百度seo搜索引擎优化工具</p>\n\n<p> </p>\n\n<p>百度链接提交工具: 普通收录_加快网站内容抓取,快速提交数据工具_站长工具_网站支持_百度搜索资源平台 </p>\n\n<p>百度博客提交: http://ping.baidu.com/ping.html</p>\n\n<p>百度信誉申请: http://trust.baidu.com/vstar/feedback</p>\n\n<p>百度死链提交入口: http://zhanzhang.baidu.com/badlink/index</p>\n\n<p>百度数据标注工具: http://zhanzhang.baidu.com/itemannotator/index</p>\n\n<p>百度站点子链工具: http://zhanzhang.baidu.com/sitelink/index</p>\n\n<p>百度站点属性工具: http://zhanzhang.baidu.com/property/index</p>\n\n<p>百度抓取频次检测工具: http://zhanzhang.baidu.com/pressure/index</p>\n\n<p>百度死链提交工具: http://zhanzhang.baidu.com/badlink/index</p>\n\n<p>百度新闻源投诉:http://tool.lusongsong.com/post/497.html<br />\n百度网页申诉:http://zhanzhang.baidu.com/feedback<br />\n百度百科删除工具:http://help.baidu.com/add?prod_id=10#3<br />\n百度百科举报工具:http://quzhanzhang.com/baidu/baikejubao/url/<br />\n百度百科投诉工具:http://quzhanzhang.com/baidu/baiketousu/url/<br />\n百度贴吧投诉工具:http://tieba.baidu.com/helpcenter/index#/index<br />\n百度快照更新工具:http://help.baidu.com/webmaster/add/#1<br />\n百度快照删除:http://quzhanzhang.com/baidu/kuaizhaoshanchu/url/<br />\n百度推广举报工具:http://quzhanzhang.com/baidu/tuiguangjubao/url/<br />\n百度快照更新投诉地址:http://help.baidu.com/webmaster/add/</p>\n\n<p>转自:<a href=\"http://www.tyseo.cn/seo/107.html\" target=\"_blank\">http://www.tyseo.cn/seo/107.html</a></p>\n', '20210302043445.png', '0', '0', '2021-03-02 16:19:33', '百度seo搜索引擎优化工具', '2', null);
INSERT INTO `t_article` VALUES ('50', '李杨勇', '3', '0', '<p>中国菜在国外有迎合老外口味的食物,但我们知道这里的很多中餐并不是传统中餐,像西兰花牛肉、陈皮鸡、炒饭等等食物我们并不喜欢,就曾有老外困惑道“为什么我喜欢的中国菜,中国人不会点?”显然他并不知道这不是符合我们口味的食物。</p>\n\n<p><img src=\"https://t11.baidu.com/it/u=1649321449,3712678580&fm=173&app=49&f=JPEG?w=619&h=411&s=5B932FC3060607531FB5603E03001040\" /></p>\n\n<p>那么外国人必须尝试的中国菜是什么?一位国外美食家就分享了他认为:你应该尝试的8种最受欢迎的中国菜。很奇怪一些外国网友并不满意这位美食家的推荐,他们的回复亮了,现在我们先来看看那些中国菜上榜了。</p>\n\n<p><img src=\"https://t10.baidu.com/it/u=1221878814,2895117533&fm=173&app=49&f=JPEG?w=640&h=352&s=3750653205CA45495CE1D1DB0000C0B1\" /></p>\n\n<p>第一道菜:咕噜肉(糖醋里脊)这位美食家说道:有一个颜色鲜艳的橙红色,和好吃的糖醋味。一开始只有糖醋猪肉,但为了满足需求,这道菜有了一些发展。现在,猪肉可以被鸡肉、牛肉或排骨等其他食材代替。</p>\n\n<p>第二道菜:宫保鸡丁,这位外国美食家说道:一个著名的川味特色菜受中国人和外国人的欢迎。主要成分是鸡丁、干辣椒和炸花生米。一种西式的宫保鸡丁,鸡丁上覆盖着玉米淀粉,再加入蔬菜、糖醋酱和蒜蓉。</p>\n\n<p><img src=\"https://t10.baidu.com/it/u=1676440191,1412392146&fm=173&app=49&f=JPEG?w=639&h=445&s=932044A14E120AC2209249340300D048\" /></p>\n\n<p>第三道菜:麻辣豆腐。他说道:麻辣豆腐描述的是一种来自辣椒粉的豆腐食物,豆腐和棕红色的碎牛肉和切碎的葱花,这真是一道美味佳肴。</p>\n\n<p>第四道菜:馄饨。这位美食家说道:馄饨最通用的形状是简单的直角三角形,类似于意大利饺子。馄饨通常是煮熟后放在汤里吃,有时是油炸的。馄饨的馅可以是猪肉末或虾丁。</p>\n\n<p><img src=\"https://t11.baidu.com/it/u=2652520486,1129685177&fm=173&app=49&f=JPEG?w=637&h=450&s=7E3836C45A232603142B867C0300007B\" /></p>\n\n<p>第五道菜:饺子。他说道:饺子在中国有着1800多年的悠久历史,是一种广受欢迎的传统食品。饺子由肉末和切碎的蔬菜包装在一块薄的面团皮肤。</p>\n\n<p>第六道菜:炒面,这意味着是炒的面。一般来说,这道炒菜由面条、肉(通常是鸡肉、牛肉、虾或猪肉)洋葱和芹菜组成。</p>\n\n<p><img src=\"https://t11.baidu.com/it/u=4261881181,1733979252&fm=173&app=49&f=JPEG?w=640&h=486&s=9F305C87CFF2B6C0566FDD2C03007049\" /></p>\n\n<p>第七道菜:北京烤鸭,这位美食家说道:北京烤鸭享受世界的名声,视为中国国菜之一。北京烤鸭以皮薄脆而著称,通常与薄煎饼、甜豆酱或蒜蓉酱油一起吃。这是一道你必须尝试的中国菜。</p>\n\n<p>第八道菜:春卷。春卷是一个圆柱形状的广东点心。春卷的馅料可以是蔬菜也可以是肉,味道可以是甜的也可以是香的,通过油炸赋予金黄色。</p>\n\n<p><img src=\"https://t11.baidu.com/it/u=3301257643,1369950624&fm=173&app=49&f=JPEG?w=640&h=268&s=6F50E5128FE06D0B42F151CA03007030\" /></p>\n\n<p>现在我们看看这位外国美食家推荐的必须尝试的8道中国菜,实际上这些菜都是老生常谈,像麻婆豆腐、春卷、炒面,在国外非常流行,而且没有传统中餐里的食物,如火锅、肉夹馍、包子等等这样的食物。</p>\n\n<p>所以就有网友回复道:嗯这些都是美式中国菜吧?为什么没有清蒸鱼、麻辣烫、水煮肉片、糖醋排骨、青椒肉菜?你肯定没有去过中国或者吃过真正的中国菜。</p>\n', '20210302015008.png', '0', '1', '2021-03-02 16:19:33', '你必须尝试的8种中国菜', '15', null);
-- ----------------------------
-- Table structure for t_blogger
-- ----------------------------
DROP TABLE IF EXISTS `t_blogger`;
CREATE TABLE `t_blogger` (
`blogger_id` int(11) NOT NULL AUTO_INCREMENT,
`head_portrait` varchar(200) DEFAULT NULL,
`motto` varchar(500) DEFAULT NULL,
`nick_name` varchar(200) DEFAULT NULL,
`site` varchar(200) DEFAULT NULL,
`signature` varchar(500) DEFAULT NULL,
PRIMARY KEY (`blogger_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of t_blogger
-- ----------------------------
INSERT INTO `t_blogger` VALUES ('1', '20180610034905.jpg', '有个被嘲笑的梦想万一有天实现了呢?up up~', 'Single', '湖南 - 湘潭', 'Single,一枚90后的java程序员,好奇心比较强,目前是一个码农,从事Java方向的研究和开发。-- Single');
-- ----------------------------
-- Table structure for t_classify
-- ----------------------------
DROP TABLE IF EXISTS `t_classify`;
CREATE TABLE `t_classify` (
`classify_id` int(11) NOT NULL AUTO_INCREMENT,
`classify_name` varchar(200) NOT NULL,
PRIMARY KEY (`classify_id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of t_classify
-- ----------------------------
INSERT INTO `t_classify` VALUES ('2', '粤菜');
INSERT INTO `t_classify` VALUES ('12', '中华名小吃');
INSERT INTO `t_classify` VALUES ('15', '中餐美食');
-- ----------------------------
-- Table structure for t_comment
-- ----------------------------
DROP TABLE IF EXISTS `t_comment`;
CREATE TABLE `t_comment` (
`comment_id` int(11) NOT NULL AUTO_INCREMENT,
`comment_date` datetime DEFAULT NULL,
`content` varchar(500) DEFAULT NULL,
`article_id` int(11) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL,
PRIMARY KEY (`comment_id`),
KEY `FKlsvvc2ob8lxg2m9qqry15ru0y` (`article_id`),
KEY `FKtamaoacctq4qpko6bvtv0ke1p` (`user_id`),
CONSTRAINT `FKlsvvc2ob8lxg2m9qqry15ru0y` FOREIGN KEY (`article_id`) REFERENCES `t_article` (`article_id`),
CONSTRAINT `t_comment_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `t_user` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of t_comment
-- ----------------------------
INSERT INTO `t_comment` VALUES ('1', '2021-03-02 16:19:33', '<p><span>世界上只有10种人,懂二进制和不懂二进制的。<img src=\"http://www.long225.cn/static/foreground/layui/images/face/3.gif\" alt=\"[可爱]\"></span></p>', null, '1');
INSERT INTO `t_comment` VALUES ('2', '2021-03-02 16:19:33', 'gyhj', '11', '3');
INSERT INTO `t_comment` VALUES ('3', '2021-03-02 16:19:33', 'hdvd ', '11', '1');
INSERT INTO `t_comment` VALUES ('4', '2021-03-02 16:19:33', '<p>这个歌可以不要换一个页面就重播一次嘛,可以换一个页面就换一首歌或者唱完再重播嘛</p><p>给你一个666,嘿嘿</p>', null, '6');
INSERT INTO `t_comment` VALUES ('5', '2021-03-02 16:19:33', '1', '13', '7');
INSERT INTO `t_comment` VALUES ('6', '2021-03-02 16:19:33', 'asd as a', '13', '13');
INSERT INTO `t_comment` VALUES ('7', '2021-03-02 16:19:33', '对学习毫无兴趣了,怎么办。', null, '1');
INSERT INTO `t_comment` VALUES ('8', '2021-03-02 16:19:33', '百度第一页了,老铁,66666', null, '11');
INSERT INTO `t_comment` VALUES ('9', '2021-03-02 16:35:41', 'eqwqweq', '11', '16');
-- ----------------------------
-- Table structure for t_link
-- ----------------------------
DROP TABLE IF EXISTS `t_link`;
CREATE TABLE `t_link` (
`link_id` int(11) NOT NULL AUTO_INCREMENT,
`link_email` varchar(200) DEFAULT NULL,
`link_name` varchar(200) DEFAULT NULL,
`link_url` varchar(200) DEFAULT NULL,
`order_num` int(11) DEFAULT NULL,
PRIMARY KEY (`link_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of t_link
-- ----------------------------
INSERT INTO `t_link` VALUES ('1', 'baidu@qq.com', '百度一下', 'https://www.baidu.com/', '1');
INSERT INTO `t_link` VALUES ('2', 'layui@qq.com', 'Layui', 'http://www.layui.com/', '2');
INSERT INTO `t_link` VALUES ('3', '13262629692@qq.com', '勿扰个人博客', 'http://wurao.xin/index.html', '3');
INSERT INTO `t_link` VALUES ('4', '694076359@qq.com', 'ITcodai博客', 'http://blog.itcodai.com/', '4');
-- ----------------------------
-- Table structure for t_music
-- ----------------------------
DROP TABLE IF EXISTS `t_music`;
CREATE TABLE `t_music` (
`music_id` int(11) NOT NULL AUTO_INCREMENT,
`artist` varchar(200) DEFAULT NULL,
`cover` varchar(500) DEFAULT NULL,
`name` varchar(200) DEFAULT NULL,
`url` varchar(500) DEFAULT NULL,
PRIMARY KEY (`music_id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of t_music
-- ----------------------------
INSERT INTO `t_music` VALUES ('1', '暗杠', 'http://p1.music.126.net/HP69gdNMpzh6yq9_Ws6Nvw==/109951163317309202.jpg?param=130y130', '童话镇', 'http://link.hhtjim.com/163/566443468.mp3');
INSERT INTO `t_music` VALUES ('3', '林宥嘉', 'http://p1.music.126.net/jI1EcP0FrAVpPlZdGXd5Cw==/109951163304640811.jpg?param=130y130', '成全', 'http://link.hhtjim.com/163/562594267.mp3');
INSERT INTO `t_music` VALUES ('2', '李荣浩', 'http://p1.music.126.net/rVkRzdKkIqVxRjDhN4LFHQ==/18342052975051883.jpg?param=130y130', '戒烟', 'http://link.hhtjim.com/163/518686034.mp3');
INSERT INTO `t_music` VALUES ('4', '宋冬野', 'http://p1.music.126.net/GcRunGm02vZBicYmIN6GXw==/109951163200249252.jpg?param=130y130', '安河桥', 'http://link.hhtjim.com/163/27646205.mp3');
INSERT INTO `t_music` VALUES ('5', '宋冬野', 'http://p1.music.126.net/GcRunGm02vZBicYmIN6GXw==/109951163200249252.jpg?param=130y130', '董小姐', 'http://link.hhtjim.com/163/27646198.mp3');
-- ----------------------------
-- Table structure for t_notice
-- ----------------------------
DROP TABLE IF EXISTS `t_notice`;
CREATE TABLE `t_notice` (
`notice_id` int(11) NOT NULL AUTO_INCREMENT,
`grade` int(11) DEFAULT NULL,
`content` varchar(500) DEFAULT NULL,
`publish_date` datetime DEFAULT NULL,
PRIMARY KEY (`notice_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of t_notice
-- ----------------------------
INSERT INTO `t_notice` VALUES ('1', '0', '<p><span style=\"color:#ff0000\">本博客前端采用的是zuoqy博客的界面风格。</span></p>\n', '2021-03-02 16:19:33');
INSERT INTO `t_notice` VALUES ('2', '1', '<p>推荐用谷歌或火狐浏览器</p>\n', '2021-03-02 16:19:33');
INSERT INTO `t_notice` VALUES ('3', '0', '<p><span style=\"color:#ff0000\">亲爱的美食分享者、欢迎您</span></p>\n', '2021-03-02 16:19:33');
-- ----------------------------
-- Table structure for t_reply
-- ----------------------------
DROP TABLE IF EXISTS `t_reply`;
CREATE TABLE `t_reply` (
`reply_id` int(11) NOT NULL AUTO_INCREMENT,
`content` varchar(500) DEFAULT NULL,
`reply_date` datetime DEFAULT NULL,
`comment_id` int(11) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL,
PRIMARY KEY (`reply_id`),
KEY `FKk4ydp71wampdbnguly8iks4rf` (`comment_id`),
KEY `FKslt6r79iw1p9cbxns09erjv6v` (`user_id`),
CONSTRAINT `FKk4ydp71wampdbnguly8iks4rf` FOREIGN KEY (`comment_id`) REFERENCES `t_comment` (`comment_id`),
CONSTRAINT `t_reply_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `t_user` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of t_reply
-- ----------------------------
INSERT INTO `t_reply` VALUES ('1', 'jsbd d ', '2021-03-02 16:19:33', '2', '1');
INSERT INTO `t_reply` VALUES ('2', '上个版本不会重播,但那影响到百度抓取我的页面,所以改了。', '2021-03-02 16:19:33', '4', '1');
INSERT INTO `t_reply` VALUES ('3', '2', '2021-03-02 16:19:33', '5', '7');
INSERT INTO `t_reply` VALUES ('4', '3', '2021-03-02 16:19:33', '5', '1');
INSERT INTO `t_reply` VALUES ('5', '感谢前端大佬光临本站,嘿嘿。', '2021-03-02 16:19:33', '8', '1');
-- ----------------------------
-- Table structure for t_timeline
-- ----------------------------
DROP TABLE IF EXISTS `t_timeline`;
CREATE TABLE `t_timeline` (
`timeline_id` int(11) NOT NULL AUTO_INCREMENT,
`content` varchar(200) DEFAULT NULL,
`publish_date` datetime DEFAULT NULL,
`month` varchar(200) DEFAULT NULL,
`year` varchar(200) DEFAULT NULL,
PRIMARY KEY (`timeline_id`)
) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of t_timeline
-- ----------------------------
INSERT INTO `t_timeline` VALUES ('1', '蓝色牛仔裤博客项目启动!', '2021-03-02 16:19:33', '06', '2018');
INSERT INTO `t_timeline` VALUES ('2', '<p>本博客前台采用Layui框架,后台使用springboot框架1!</p>\n', '2021-03-02 16:19:33', '06', '2018');
INSERT INTO `t_timeline` VALUES ('3', '你就是我不爱别人的理由。', '2021-03-02 16:19:33', '05', '2018');
INSERT INTO `t_timeline` VALUES ('4', '采用shiro作为安全权限框架!', '2021-03-02 16:19:33', '05', '2018');
INSERT INTO `t_timeline` VALUES ('5', 'l love three things in this world. Sun,Moon and You. Sun for morning,Moon for night,and You forever.', '2021-03-02 16:19:33', '05', '2018');
INSERT INTO `t_timeline` VALUES ('6', '博客持续更新中...', '2021-03-02 16:19:33', '03', '2018');
INSERT INTO `t_timeline` VALUES ('7', '感觉自己写的样式太丑了,兼容性不好,发现了zuoqy博客的风格', '2021-03-02 16:19:33', '02', '2018');
INSERT INTO `t_timeline` VALUES ('8', '开始学习java,嘻嘻', '2021-03-02 16:19:33', '09', '2017');
INSERT INTO `t_timeline` VALUES ('10', '<p>发布测试</p>\n', '2021-03-02 16:19:33', '06', '2018');
INSERT INTO `t_timeline` VALUES ('11', '<p><span style=\"color:#ff0000\">文章专栏开通关键词搜索功能,使用Lucene作为全文检索,SmartChineseAnalyzer中文分词器。</span></p>\n', '2021-03-02 16:19:33', '06', '2018');
INSERT INTO `t_timeline` VALUES ('12', '<p>项目考核凉了,B班见。</p>\n', '2021-03-02 16:19:33', '06', '2018');
-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`head_portrait` varchar(200) DEFAULT NULL,
`lately_login_time` datetime DEFAULT NULL,
`nickname` varchar(200) DEFAULT NULL,
`registration_date` datetime DEFAULT NULL,
`sex` varchar(50) DEFAULT NULL,
`open_id` varchar(200) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`username` varchar(255) DEFAULT NULL,
`article_ids` varchar(255) DEFAULT NULL,
`birthday` date DEFAULT NULL,
`momo` varchar(255) DEFAULT NULL,
`phone` varchar(255) DEFAULT NULL,
`user_ids` varchar(255) DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of t_user
-- ----------------------------
INSERT INTO `t_user` VALUES ('1', null, '2021-03-02 16:19:33', '2', '2021-03-02 16:19:33', '男', null, '1', 'xiao', null, null, null, null, null);
INSERT INTO `t_user` VALUES ('2', 'http://qzapp.qlogo.cn/qzapp/101477629/B5D5212D0429E4491D932EEEF814FE99/100', '2021-03-02 16:19:33', 'Mr.Long', '2021-03-02 16:19:33', '男', 'asdasdasds', null, null, null, null, null, null, null);
INSERT INTO `t_user` VALUES ('3', 'http://qzapp.qlogo.cn/qzapp/101477629/0ABFEA14AAF50D3C07B6489440FEE081/100', '2021-03-02 16:19:33', '一念之间', '2021-03-02 16:19:33', '男', 'sdfsdf', null, null, null, null, null, null, null);
INSERT INTO `t_user` VALUES ('4', 'http://qzapp.qlogo.cn/qzapp/101477629/142350DC6080D761759CA72042447829/100', '2021-03-02 16:19:33', '十七', '2021-03-02 16:19:33', '男', 'sdfsdfghg', null, null, null, null, null, null, null);
INSERT INTO `t_user` VALUES ('5', 'http://qzapp.qlogo.cn/qzapp/101477629/E79436B993353FA72023157E21CD2C3F/100', '2018-06-10 20:06:11', 'Single', '2021-03-02 16:19:33', '男', 'sdfsd', null, null, null, null, null, null, null);
INSERT INTO `t_user` VALUES ('6', 'http://qzapp.qlogo.cn/qzapp/101477629/88A9474D1A53563D118543E48F59F721/100', '2021-03-02 16:19:33', '我跑不动啊', '2021-03-02 16:19:33', '女', 'sdfgrsd', null, null, null, null, null, null, null);
INSERT INTO `t_user` VALUES ('7', 'http://qzapp.qlogo.cn/qzapp/101477629/E5DB0905E97D1C1D0429638180659871/100', '2021-03-02 16:19:33', 'the lack of sleep', '2021-03-02 16:19:33', '男', 'dgbtgd', null, null, null, null, null, null, null);
INSERT INTO `t_user` VALUES ('8', 'http://qzapp.qlogo.cn/qzapp/101477629/A4ADB5EFBC940831DE19D512169184A8/100', '2021-03-02 16:19:33', 'Pingchas', '2021-03-02 16:19:33', '男', 'gdfgtrg', null, null, null, null, null, null, null);
INSERT INTO `t_user` VALUES ('9', 'http://qzapp.qlogo.cn/qzapp/101477629/78392FE441D2DBDA7FB2234B5D3EE3FB/100', '2021-03-02 16:19:33', '友人A', '2021-03-02 16:19:33', '男', '345345', null, null, null, null, null, null, null);
INSERT INTO `t_user` VALUES ('10', 'http://qzapp.qlogo.cn/qzapp/101477629/D2EED660C5B57BF4EFD247CC2CA137F0/100', '2021-03-02 16:19:33', 'Ms.Right', '2021-03-02 16:19:33', '男', '345reggdg', null, null, null, null, null, null, null);
INSERT INTO `t_user` VALUES ('11', 'http://qzapp.qlogo.cn/qzapp/101477629/2D4D8F55CF18BD03F1FF9351CB744116/100', '2021-03-02 16:19:33', '如果,雨之后', '2021-03-02 16:19:33', '男', 'dfgrgdrg', null, null, null, null, null, null, null);
INSERT INTO `t_user` VALUES ('12', 'http://qzapp.qlogo.cn/qzapp/101477629/3279E599883D7D2E9468C8A8A7E11E5D/100', '2021-03-02 16:19:33', '绿乄茶', '2021-03-02 16:19:33', '男', 'ghgfhnn', null, null, null, null, null, null, null);
INSERT INTO `t_user` VALUES ('13', 'http://qzapp.qlogo.cn/qzapp/101477629/F2A070ABD05227F5A2AF61CC81A2B5F8/100', '2021-03-02 16:19:33', '超越', '2021-03-02 16:19:33', '男', 'dfgergd', null, null, null, null, null, null, null);
INSERT INTO `t_user` VALUES ('14', 'http://qzapp.qlogo.cn/qzapp/101477629/FFC7B2289731ABCFFB01D21467FF04A5/100', '2021-03-02 16:19:33', 'Arc', '2021-03-02 16:19:33', '男', 'dffff', null, null, null, null, null, null, null);
INSERT INTO `t_user` VALUES ('15', 'http://qzapp.qlogo.cn/qzapp/101477629/F15203D785A4EE987A28B92A617A2DA8/100', '2021-03-02 16:19:33', 'Yuu', '2021-03-02 16:19:33', '男', 'aaaaaa', null, null, null, null, null, null, null);
INSERT INTO `t_user` VALUES ('16', null, '2021-03-02 16:35:36', '123', '2021-03-02 16:19:33', '男', null, '123', 'lyy', null, null, null, null, null);
五、测试实例
测试一:
方案
登陆时,用户名或密码有一项为空或填写错误,系统是否出现预先设定的操作提示
预期效果 输入错误无法登陆
具体操作 用户名、密码、任意一项为空或者填写有误
结果 出现登录失败
结论 要求必须填写正确的用户名和密码,才能进入管理页面,测试成功
当用户名或密码输入错误或为空时提交界面
如图 所示。