@TOC
ssm042在线云音乐系统的设计与实现+jsp
第1章 绪论
1.1背景及意义
系统管理也都将通过计算机进行整体智能化操作,对于在线云音乐系统所牵扯的管理及数据保存都是非常多的,例如用户管理、歌曲管理、推荐管理等,这给管理者的工作带来了巨大的挑战,面对大量的信息,传统的音乐系统,都是通过笔记的方式进行详细信息的统计,后来出现电脑,通过电脑输入软件将纸质的信息统计到电脑上,这种方式比较传统,而且想要统计数据信息比较麻烦,还受时间和空间的影响,所以为此开发了在线云音乐系统;为用户提供了一个在线云音乐系统平台,管理员可以足不出户就可以获取到系统的数据信息等,而且还能节省用户很多时间,所以开发在线云音乐系统给管理者带来了很大的方便,同时也方便管理员对用户信息进行处理。
本论文在线云音乐系统主要牵扯到的程序,数据库与计算机技术等。覆盖知识面大,可以大大的提高系统人员工作效率。
1.2 国内外研究概况
随着国内经济形势的不断发展,中国互联网进入了一个难得的高峰发展时期,这使得中外资本家纷纷转向互联网市场。 然而,许多管理领域的不合理结构,人员不足以及市场管理需求的增加使得更多的人具备了互联网管理的意识。
在当今高度发达的信息中,信息管理改革已成为一种更加广泛和全面的趋势。 “在线云音乐系统”是基于Mysql数据库,在JSP程序设计的基础上实现的。为确保中国经济的持续发展,信息时代日益更新,服务业仍在蓬勃发展。同时,随着信息社会的快速发展,各种管理系统面临着越来越多的数据需要处理,如何用方便快捷的方式使管理者在广阔的数据海洋里面查询、存储、管理和共享有效的数据信息,对我们的学习,工作和生活具有重要的现实意义。因此,国内外学术界对此进行了深入而广泛的研究,一个新的研究领域——在线云音乐系统诞生了。
1.3 研究的内容
目前许多人仍将传统的纸质工具作为信息管理的主要工具,而网络技术的应用只是起到辅助作用。在对网络工具的认知程度上,较为传统的office软件等仍是人们使用的主要工具,而相对全面且专业的信息管理软件仍没有得到大多数人的了解或认可。本选题则旨在通过标签分类管理等方式,实现在线云音乐系统的各种功能,从而达到对在线云音乐系统的管理。
详细内容介绍,将在以下六章中详细阐述:
第一章、绪论,介绍了研究课题选择的背景及意义、研究现状,简要介绍了本文的章节内容。
第二章、引入技术知识,通过引入关键技术进行开发,向系统中涉及直观表达的技术知识。
第三章、重点分析了系统的分析,从系统强大的供需市场出发,对系统开发的可行性,系统流程以及系统性能和功能进行了探讨。
第四章、介绍了系统的详细设计方案,包括系统结构设计和数据库设计。
第五章、系统设计的实现,通过对系统功能设计的详细说明,论证了系统的结构。
第六章、系统的整体测试,评判系统是否可以上线运行。
第2章 相关技术
2.1 JSP技术介绍
JSP技术本身是一种脚本语言,但它的功能是十分强大的,因为它可以使用所有的JAVA类。当它与JavaBeans 类进行结合时,它可以使显示逻辑和内容分开,这就极大的方便了用户的需求。JavaBeans 可以对JSP技术的程序进行扩展,从而形成新的应用程序,而且JavaBeans的代码可以重复使用,所以就便于对程序进行维护。JavaBean 组件有内部的接口,可以帮助不同的人对系统进行访问。1999年,Sun微系统公司正式推出了JSP技术,这是一种动态技术,是基于整个JAVA体系和JavaServlet提出的,是具有普遍适用性的WEB技术,也是本系统设计的核心技术之一。JSP技术能够极大的提高WEB网页的运行速度。这些内容会与脚本结合,并且由JavaBean和Servlet组件封装。所有的脚本均在服务器端运行,JSP引擎会针对客户端所 提交的申请进行解释,然后生成脚本程序和JSP标识,然后通过HTML/XML页面将结果反馈给浏览器。因此,开发人员亲自设计最终页面的格式和HTML/XML标识时,完全可以使用JSP技术。
所以结合在线云音乐系统的需求及功能模块的实现,使用JSP技术是最合适的,而且JSP的拓展性比较好,对于系统在后期使用过程中可以不断对系统功能进行拓展,是系统更完成,更方便的满足用户管理。
2.2 JAVA简介
Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterprise JavaBeans)的全面支持,java servlet API,JSP(java server pages),和XML技术。JAVA语言是一种面向对象的语言,它通过提供最基本的方法来完成指定的任务,开发者只需要知道一些概念就能够编写出一些应用程序。Java程序相对较小,其代码能够在小机器上运行。Java是一种计算机编程语言,具有封装、继承和多态性三个主要特性,广泛应用于企业Web应用程序开发和移动应用程序开发。
Java语言和一般编译器以及直译的区别在于,Java首先将源代码转换为字节码,然后将其转换为JVM的可执行文件,JVM可以在各种不同的JVM上运行。因此,实现了它的跨平台特性。虽然这使得Java在早期非常缓慢,但是随着Java的开发,它已经得到了改进。
2.3 MyEclipse开发环境
MyEclipse支持广泛、兼容性高并且功能强大,是一个Eclipse 插件集合,普遍适应于JAVA和J2EE的系统开发,支持 JDBC,Hibernate,AJAX,Struts,Java Servlet,Spring,EJB3等市面上存在的几乎所有数据库链接工具和主流Eclipse产品 开发工具。
MyEclipse在业内是所熟知的开发工具,该平台在开发的过程中运用的就是该工具。MyEclipse又被称之为企业级的工作平台,它是以Eclipse IDE为基础的。MyEclipse可以帮助我们进行数据库的研发和J2EE的使用,除此之外,还可以提高系统的运营能力,这突出表现在服务器的整合过程中。MyEclipse的功能相当完备,能够为J2EE的集成提供必要的环境支持,从而完成编码、测试、调试及发布等功能。它可以支持JSP,HTML,SQL,Javascript,Struts, CSS等。
2.4 Tomcat服务器
Tomcat属于一种轻型的服务器,所以说在中小企业中并不具有普适性。但是当程序员需要开发或调试JSP 程序时,则通常会将该服务器作为首选。对于一个仅具有计算机基础知识的人来说,计算机系统具有一个好的Apache服务器,可以很好的对HTML 页面进行访问。Tomcat 虽然是Apache的扩展,但是它们都是可以独立运行的,二者是不互相干扰的。当配置正确的时候,Apache服务器为HTML 页面的运行提供技术支持,Tomcat 的任务则是运行Servle和JSP 页面。Tomca也具有一定的HTML页面处理功能。
2.5 MySQL数据库
Mysql是一个多用户、多线程的服务器,采用SQL的数据库,数据库管理系统是基于SQL的客户以及服务器模式的关系,它的优点有强大的功能、操作简单、管理方便、可靠安全、运行较快、多线程、跨平台性、完全网络化、稳定性等,非常适合Web站点或者其他应用软件,在数据库后端的开发。此外,利用许多语言,会员可以编写和访问Mysql数据库的程序。Mysql数据库也是开放源代码的,开发者越来越喜欢使用Mysql关系数据库,应用范围也被推而广之。这是由于速度快和易用性, Web站点或应用软件的数据库后端的开发也都在使用它。
mysql 数据库它有很多的优点,例如它在操作上能够让人通俗易懂、功能强大、信息储存量高等优点。所以被人们广泛应用,对于mysql数据库来说它一般主要是对数据进行编码和查询,而且在很多的设计当中都应用到了该数据库,在此过程当中我们可以对常规的数据进行查询和组合,所以我们在进行使用mysql数据库的时候只要对编写一小段的数据就能实现相应的功能。数据库,就是数据存储的储藏室,只不过数据是存储在计算机上的,而不是现实中的储藏室,数据的存放是按固定格式,而不是无序的,则定义就是 :长期有固定格式,可以共享的存储在计算机存储器上。数据库管理主要包括数据表的建立,数据存储、修改和增加数据,为了使数据库系统能够正常运行,相关人员进行的管理工作。数据表的建立,可以对数据表中的数据进行调整,数据的重新组合及重新构造,保证数据的安全性。
2.6 SSM三大框架
当今流行的“SSM组合框架”是Spring + SpringMVC + MyBatis的缩写,受到很多的追捧,“组合SSM框架”是强强联手、各司其职、协调互补的团队精神。web项目的框架,通常更简单的数据源。Spring属于一个轻量级的反转控制框架(IoC),但它也是一个面向表面的容器(AOP)。SpringMVC常常用于控制器的分类工作模式,与模型对象分开,程序对象的作用与自动取款机进行处理。这种解耦治疗使整个系统的个性化变得更加容易。MyBatis是一个良好的可持续性框架,支持普通SQL查询,同时允许对存储过程的高级映射进行数据的优化处理。大型Java Web应用程序的由于开发成本太高,开发后难以维护和开发过程中一些难以解决的问题,而采用“SSM组合框架”,它允许建立业务层次结构,并为这个问题提供良好的解决方案。
第3章 系统分析
3.1 需求分析
在线云音乐系统主要是为了提高人们对生活品质的提高和更方便快捷的满足用户,更好存储所有数据信息及快速方便的检索功能,对系统的各个模块是通过许多今天的发达系统做出合理的分析来确定考虑用户的可操作性,遵循开发的系统优化的原则,经过全面的调查和研究。
系统所要实现的功能分析,对于现在网络方便的管理,系统要实现用户可以直接在平台上进行查看自己所有对音乐数据信息,根据自己的需求可以进行添加喜欢的歌曲并评论操作,这样既能节省用户的时间,不用在像传统的方式,需要查询、了解信息都需要去寻找相关负责人了解相关数据信息,耽误时间,由于很多用户的时间的原因,没有办法随时随地进行相应管理,真的很难去满足用户的各种需求。所以在线云音乐系统的开发不仅仅是能满足用户的需求,还能提高管理员的工作效率,减少原有不必要的工作量。
3.2 系统可行性分析
3.2.1技术可行性:技术背景
系统的开发环境和配置都是可以自行安装的,系统使用JSP开发工具,使用比较成熟的Mysql数据库进行对系统用户和管理员之间相关的数据交互,根据技术语言对数据库,结合需求进行修改维护,可以使得系统运行更具有稳定性和安全性,从而完成实现系统的开发。
(1)硬件可行性分析
在线云音乐系统及信息分析的设计对于所使用的计算机没有什么硬性的要求,计算机只要可以正常的使用进行代码的编写及页面设计就可行,主要是对于服务器有些要求,对于平台搭建完成要上传的服务器是有一定的要求的,服务器必须选择安全性比较高的,然后就是在打开系统必须顺畅,不能停顿太长时间;性价比高;安全性高。
(2)软件可行性分析
开发整个系统使用的是云计算,流量的可扩展性和基于流量的智能调整云计算的优点就是流量的可扩展性和基于流量的智能调整,保障系统的安全及数据信息的及时备份。
因此,我们从两个方面进行了可行性研究,可以看出系统的开发没有问题。
3.2.2经济可行性
在线云音乐系统的开发之前所做的市场调研及其他管理相关的系统,是没有任何费用的,都是通过开发者自己的努力,所有的工作的都是自己亲力亲为,在碰到自己比较难以解决的问题,大多是通过同学和指导老师的帮助进行相关信息的解决,所以对于系统的开发在经济上是完全可行的,没有任何费用支出的。
使用比较成熟的技术,系统是基于JSP的开发,采用Mysql数据库。所以系统在开发人力、财力要求不高,具有经济可行性。
3.2.3操作可行性:
可操作性主要是对系统设计完成后,用户的使用体验度,通过界面导航菜单可以简单明了地进行查看所需的信息内容。对于系统的操作,不需要专业人员都可以直接进行功能模块的操作管理,所以在系统的可操作性是完全可以的。本系统的操作使用的也是界面窗口进行登录,所以操作人员只要会简单的电脑操作就完全可以的。
3.3 项目设计目标与原则
1、关于在线云音乐系统的基本要求
(1)功能要求个人中心、用户管理、歌曲信息、推荐信息、我的收藏、管理员管理、系统管理等信息,进行搜索或查看等功能模块。
(2)性能:在不同操作系统上均能无差错实现在不同类型的用户登入相应界面后能不出差错、方便地进行预期操作。
(3)安全与保密要求:用户都必须通过身份验证才能进入系统,并且用户的权限也需要根据用户的类型进行限定。
(4)环境要求:支持多种平台,可在Windows系列、Vista系统等多种操作系统下使用。
2、开发目标
在线云音乐系统的主要开发目标如下:
(1)实现音乐系统信息关系的系统化、规范化和自动化;
(2)减少维护人员的工作量以及实现用户对信息的控制和管理。
(3)方便查询信息及管理信息等;
(4)通过网络操作,改善处理问题的效率,提高人员利用率;
(5)考虑到用户多样性特点,要求界面简单,操作简便。
3、设计原则
本系统采用JSP技术,Mysql数据库开发,充分保证了系统稳定性、完整性。
在线云音乐系统的设计与实现的设计思想如下:
1、操作简便、界面良好:简单明了的页面布局,方便查询相关信息
2、即时可见:对系统信息的处理将立马在对应地点可以查询到,实现了“即时发布、即时见效”的功能。
3、功能的完善性:可以对用户所能用到的各个方面的功能模块的添加、修改、维护操作。
3.4系统流程分析
3.4.1操作流程
管理员想进入系统,首先进入系统登录界面,通过正确的用户名、密码,用户名和密码输入完成后,系统会检查登录信息,信息正确,然后输入相应的功能界面,提示信息错误,登录失败。系统操作流程如图3-1所示。
图3-1操作流程图
3.4.2添加信息流程
添加信息,编号系统使用自动编号模式,没有用户填写,管理员添加信息输入信息,系统将自动确认的信息和数据,验证的成功是有效的信息添加到数据库,信息无效,重新输入信息。添加信息流程如图3-2所示。
图3-2添加信息流程图
3.4.3删除信息流程
用户选择要删除的信息并单击Delete按钮,系统提示是否删除信息。如果用户想要删除信息,系统将删除信息。系统数据库删除信息。删除信息流程图如图3-3所示。
图3-3删除信息流程图
第4章 系统设计
4.1 系统体系结构
架构设计的目的是反映一个结构和其他元素之间的关系,抽象,通常用于指导大型软件系统。将一个巨大的任务细分为多个小任务的过程是系统架构的总体设计。完成小任务后,整个任务就可以完成了。具体的实现过程是分解系统,分析各部分的功能、接口和逻辑关系。页面是一个一个模块组建而成的,层次结构分明,思想运用的是面向对象,一个实体对应一个数据类型,还要对每个数据类添加一个实施类。
在线云音乐系统的实现主要由于系统用户所使用的功能模块相应不同,用户根据需求对系统功能模块进行维护管理操作。
这些功能可以充分满足在线云音乐系统的需求。此系统功能较为全面如下图系统功能结构如图4-1所示。
图4-1系统功能结构图
4.2 开发流程设计
系统流程的分析是通过调查系统所涉及问题的识别、可行性可操作性、系统分析处理能力等具体环节来调节、整理系统的设计方案以确保系统能达到理想的状态。这些操作都要进行一系列的流程测试保证数据库的完整,以把控系统所涉及信息管理的安全、保证信息输入、输出正常转换。然后,通过实际操作完成流程图的绘制工作。
在线云音乐系统的开发对管理模块和系统使用的数据库进行分析,编写代码、系统测试,如图4-2所示。
图4-2开发系统流程图
4.3 数据库设计原则
学习编程,我们都知道数据库设计是基于需要设计的系统功能,我们需要建立一个数据库关系模型,用于存储数据信息,这样当我们在程序中时,就没有必要为程序页面添加数据,从而提高系统的效率。数据库存储了很多信息,可以说是信息管理系统的核心和基础,数据库还提供了添加、删除、修改和检查,使系统能够快速找到自己想要的信息,而不是在程序代码中找到。数据库中信息表的每个部分根据一定的关系精确地组合,排列和组合成数据表。
通过在线云音乐系统的功能进行规划分成几个实体信息,实体信息将通过ER图进行说明,本系统的主要实体图如下:
登录信息实体属性图如图4-3所示。
图4-3登录信息实体属性图
歌曲信息实体属性图如图4-4所示。
图4-4歌曲信息实体属性图
用户信息实体属性图如图4-5所示。
图4-5用户信息实体属性图
4.4 数据表
将数据库概念设计的E-R图转换为关系数据库。在关系数据库中,数据关系由数据表组成,但是表的结构表现在表的字段上。
表4-1:config表
列名 | 数据类型 | 长度 | 约束 | 说明 |
---|---|---|---|---|
id | int | 11 | PRIMARY KEY | 主键 |
name | varchar | 100 | DEFAULT NULL | 配置参数名称 |
value | varchar | 100 | DEFAULT NULL | '配置参数值 |
表4-2:discussgequxinxi表
列名 | 数据类型 | 长度 | 约束 | |
---|---|---|---|---|
id | bigint | 11 | PRIMARY KEY | 主键' |
refid | bigint | 20 | DEFAULT NULL | 关联表id' |
userid | bigint | 20 | DEFAULT NULL | 用户id', |
表4-3:`discusstuijianxinxi表
列名 | 数据类型 | 长度 | 约束 | |
---|---|---|---|---|
id | userid | 20 | PRIMARY KEY | 主键 |
refid | userid | 20 | DEFAULT NULL | 关联表id' |
userid | userid | 20 | DEFAULT NULL | 用户id', |
表4-4:gequxinxi表
列名 | 数据类型 | 长度 | 约束 | |
---|---|---|---|---|
id | bigint | 11 | PRIMARY KEY | 主键 |
gequxinxi | varchar | 200 | DEFAULT NULL | 歌曲编号 |
gequmingcheng | varchar | 200 | DEFAULT NULL | 歌曲名称' |
gequleibie | varchar | 200 | DEFAULT NULL | 歌曲名称' |
geshou | varchar | 200 | DEFAULT NULL | 歌手 |
puqu | varchar | 200 | DEFAULT NULL | 谱曲 |
shizhang | varchar | 200 | DEFAULT NULL | 时长', |
xiangguantupian | varchar | 200 | DEFAULT NULL | 相关图片 |
xiangguanxinxi | varchar | 200 | DEFAULT NULL | 相关信息 |
thumbsupnum | varchar | 200 | DEFAULT NULL | '赞' |
crazilynum | int | 11 | DEFAULT NULL | 踩', |
clicknum | int | 11 | DEFAULT NULL | 踩 |
表4-5:token表
列名 | 数据类型 | 长度 | 约束 | |
---|---|---|---|---|
id | bigint | 20 | PRIMARY KEY | 主键 |
userid | bigint | 20 | DEFAULT NULL | 用户id' |
username | varchar | 100 | DEFAULT NULL | 用户名' |
tablename | varchar | 100 | DEFAULT NULL | 表名 |
role | varchar | 100 | DEFAULT NULL | 角色' |
token | varchar | 200 | DEFAULT NULL | 密码', |
表4-6:users表
列名 | 数据类型 | 长度 | 约束 | |
---|---|---|---|---|
id | bigint | 20 | PRIMARY KEY | 主键 |
username | varchar | 100 | DEFAULT NULL | 用户名 |
password | varchar | 100 | DEFAULT NULL | 密码 |
role | varchar | 100 | DEFAULT NULL | '角色' |
表4-7yonghu 表
列名 | 数据类型 | 长度 | 约束 | |
---|---|---|---|---|
id | bigint | 20 | PRIMARY KEY | 主键', |
zhanghao | varchar | 200 | DEFAULT NULL | 账号', |
mima | varchar | 200 | DEFAULT NULL | 密码' |
xingming | varchar | 200 | DEFAULT NULL | 姓名 |
xingbie | varchar | 200 | DEFAULT NULL | 性别 |
shenfenzhenghaoma | varchar | 200 | DEFAULT NULL | '身份证号码' |
shoujihaoma | varchar | 200 | DEFAULT NULL | 手机号码', |
zhaopian | varchar | 200 | DEFAULT NULL | 照片 |
-
系统实现
5.1前台功能模块
通过点击注册可以进行填写用户名、手密码、姓名、身份证号码、手机号进行用户注册操作,如图5-1所示,用户通过点击登录填写账号、密码进行登录操作,如图5-2所示。
图5-2用户注册界面图
图5-2用户登录界面图
进入在线云音乐系统 ,可以查看首页、歌曲信息、推荐信息、个人中心、后台管理等功能模块,进行相对应的操作。
个人中心:通过页面可以进行修改个人的信息,修改账号、密码、姓名、性别、身份证号、手机号、头像等信息,进行更新操作,如图5-3所示。
图5-3个人信息界面图
用户通过点击歌曲信息可以进行查看歌曲信息的歌曲编号、歌曲类别、歌手、谱曲、时长、相关信息、上架信息、点击次数等信息,进行查看、点赞或踩操作,或通过点击歌曲推荐进行推荐,如图5-4所示。
图5-4歌曲详情界面图
用户通过点击推荐歌曲进入页面可以进行查看歌曲的歌曲编号、歌曲类别、歌手、相关信息、姓名填写推荐理由、推荐日期等信息进行提交推荐歌曲信息操作,如图5-5所示。
图5-5提交歌曲推荐界面图
用户通过点击推荐信息可以在页面找到被推荐的歌曲,点击歌曲进行歌曲详情,可以查看歌曲的详细信息,进行赞一下或踩一下、收藏操作。如图5-6所示。
图5-6推荐信息面图
5.2用户后台功能模块
用户通过点击后台管理进入后台,可以对和人中心、歌曲信息管理、推荐信息管理、我的收藏等信息进行相对应操作。如图5-7所示。
图5-7用户后台系统界面图
歌曲信息管理:通过列表可以获取歌曲编号、歌曲名称、歌曲类别、歌手、谱曲、时长、相关信息、相关图片、上架时间等信息,进行查看详情或歌曲推荐操作,通过输入歌曲名称、歌曲类别、歌手进行查询操作,如图5-8所示。
图5-8歌曲信息管理界面图
推荐信息管理:通过新闻列表可以获取歌曲编号、歌曲名称、歌曲类别、歌手、账号、姓名、推荐理由、推荐日期等信息。进行查看详情操作,并通过输入歌曲名称、歌手进行查询,如图5-9所示;
图5-9推荐信息界面图
5.3管理员功能模块
管理员通过登录页面,可以进行输入用户名、密码、用户权限输入无误后,进入到管理员系统页面,如图5-10所示。
图5-10管理员登录界面图
管理员登录成功后,可以对个人中心、用户管理、歌曲信息、推荐信息、我的收藏、管理员管理、系统管理等信息进行相对应操作。如图5-11所示。
图5-11管理系统界面图
用户管理:管理员通过列表可以获取用户名、姓名、性别、手机、身份证号、照片等信息,进行查看、修改或删除操作,如图5-12所示。
图5-12用户管理界面图
歌曲信息管理:通过列表可以获取歌曲编号、歌曲名称、歌曲类别、歌手、谱曲、时长、相关信息、相关图片、上架时间等信息,进行查看详情或修改、删除。并查看评论或添加歌曲操作,通过输入歌曲名称、歌曲类别、歌手进行查询操作,如图5-13所示。; 管理员点击添加进入页面可以进行输入歌曲编号、歌曲名称、歌曲类别、歌手、谱曲、时长、相关信息、相关图片、上架时间等信息,进行提交添加歌曲,如图5-14所示。
图5-13歌曲信息管理界面图
图5-14添加歌曲界面图
MPUtil.java
package com.utils;import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;import org.apache.commons.lang3.StringUtils;import cn.hutool.core.bean.BeanUtil;import com.baomidou.mybatisplus.mapper.Wrapper;/*** Mybatis-Plus工具类*/
public class MPUtil {public static final char UNDERLINE = '_';//mybatis plus allEQ 表达式转换public static Map allEQMapPre(Object bean,String pre) {Map<String, Object> map =BeanUtil.beanToMap(bean);return camelToUnderlineMap(map,pre);}//mybatis plus allEQ 表达式转换public static Map allEQMap(Object bean) {Map<String, Object> map =BeanUtil.beanToMap(bean);return camelToUnderlineMap(map,"");}public static Wrapper allLikePre(Wrapper wrapper,Object bean,String pre) {Map<String, Object> map =BeanUtil.beanToMap(bean);Map result = camelToUnderlineMap(map,pre);return genLike(wrapper,result);}public static Wrapper allLike(Wrapper wrapper,Object bean) {Map result = BeanUtil.beanToMap(bean, true, true); return genLike(wrapper,result);}public static Wrapper genLike( Wrapper wrapper,Map param) {Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();int i=0;while (it.hasNext()) {if(i>0) wrapper.and();Map.Entry<String, Object> entry = it.next();String key = entry.getKey();String value = (String) entry.getValue();wrapper.like(key, value);i++;}return wrapper;}public static Wrapper likeOrEq(Wrapper wrapper,Object bean) {Map result = BeanUtil.beanToMap(bean, true, true); return genLikeOrEq(wrapper,result);}public static Wrapper genLikeOrEq( Wrapper wrapper,Map param) {Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();int i=0;while (it.hasNext()) {if(i>0) wrapper.and();Map.Entry<String, Object> entry = it.next();String key = entry.getKey();if(entry.getValue().toString().contains("%")) {wrapper.like(key, entry.getValue().toString().replace("%", ""));} else {wrapper.eq(key, entry.getValue());}i++;}return wrapper;}public static Wrapper allEq(Wrapper wrapper,Object bean) {Map result = BeanUtil.beanToMap(bean, true, true); return genEq(wrapper,result);}public static Wrapper genEq( Wrapper wrapper,Map param) {Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();int i=0;while (it.hasNext()) {if(i>0) wrapper.and();Map.Entry<String, Object> entry = it.next();String key = entry.getKey();wrapper.eq(key, entry.getValue());i++;}return wrapper;}public static Wrapper between(Wrapper wrapper,Map<String, Object> params) {for(String key : params.keySet()) {String columnName = "";if(key.endsWith("_start")) {columnName = key.substring(0, key.indexOf("_start"));if(StringUtils.isNotBlank(params.get(key).toString())) {wrapper.ge(columnName, params.get(key));}}if(key.endsWith("_end")) {columnName = key.substring(0, key.indexOf("_end"));if(StringUtils.isNotBlank(params.get(key).toString())) {wrapper.le(columnName, params.get(key));}}}return wrapper;}public static Wrapper sort(Wrapper wrapper,Map<String, Object> params) {String order = "";if(params.get("order") != null && StringUtils.isNotBlank(params.get("order").toString())) {order = params.get("order").toString();}if(params.get("sort") != null && StringUtils.isNotBlank(params.get("sort").toString())) {if(order.equalsIgnoreCase("desc")) {wrapper.orderDesc(Arrays.asList(params.get("sort")));} else {wrapper.orderAsc(Arrays.asList(params.get("sort")));}}return wrapper;}/*** 驼峰格式字符串转换为下划线格式字符串* * @param param* @return*/public static String camelToUnderline(String param) {if (param == null || "".equals(param.trim())) {return "";}int len = param.length();StringBuilder sb = new StringBuilder(len);for (int i = 0; i < len; i++) {char c = param.charAt(i);if (Character.isUpperCase(c)) {sb.append(UNDERLINE);sb.append(Character.toLowerCase(c));} else {sb.append(c);}}return sb.toString();}public static void main(String[] ages) {System.out.println(camelToUnderline("ABCddfANM"));}public static Map camelToUnderlineMap(Map param, String pre) {Map<String, Object> newMap = new HashMap<String, Object>();Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();while (it.hasNext()) {Map.Entry<String, Object> entry = it.next();String key = entry.getKey();String newKey = camelToUnderline(key);if (pre.endsWith(".")) {newMap.put(pre + newKey, entry.getValue());} else if (StringUtils.isEmpty(pre)) {newMap.put(newKey, entry.getValue());} else {newMap.put(pre + "." + newKey, entry.getValue());}}return newMap;}
}
FileUtil.java
package com.utils;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;/**
* 类说明 :
*/public class FileUtil {public static byte[] FileToByte(File file) throws IOException {// 将数据转为流@SuppressWarnings("resource")InputStream content = new FileInputStream(file);ByteArrayOutputStream swapStream = new ByteArrayOutputStream();byte[] buff = new byte[100];int rc = 0;while ((rc = content.read(buff, 0, 100)) > 0) {swapStream.write(buff, 0, rc);}// 获得二进制数组return swapStream.toByteArray();}
}
FileController.java
package com.controller;import java.io.File;
import java.io.IOException;
import java.util.Date;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.entity.EIException;
import com.service.ConfigService;
import com.utils.R;/*** 上传文件映射表*/
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{@Autowiredprivate ConfigService configService;/*** 上传文件*/@RequestMapping("/upload")public R upload(@RequestParam("file") MultipartFile file, String type,HttpServletRequest request) throws Exception {if (file.isEmpty()) {throw new EIException("上传文件不能为空");}String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);String fileName = new Date().getTime()+"."+fileExt;File dest = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+fileName);file.transferTo(dest);if(StringUtils.isNotBlank(type) && type.equals("1")) {ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));if(configEntity==null) {configEntity = new ConfigEntity();configEntity.setName("faceFile");configEntity.setValue(fileName);} else {configEntity.setValue(fileName);}configService.insertOrUpdate(configEntity);}return R.ok().put("file", fileName);}/*** 下载文件*/@IgnoreAuth@RequestMapping("/download")public void download(@RequestParam String fileName, HttpServletRequest request, HttpServletResponse response) {try {File file = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+fileName);if (file.exists()) {response.reset();response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName+"\"");response.setHeader("Cache-Control", "no-cache");response.setHeader("Access-Control-Allow-Credentials", "true");response.setContentType("application/octet-stream; charset=UTF-8");IOUtils.write(FileUtils.readFileToByteArray(file), response.getOutputStream());}} catch (IOException e) {e.printStackTrace();}}}
声明
本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。