@TOC
ssm026校园美食交流系统+vue
第1章 概述
1.1 研究背景
随着现代网络技术发展,对于校园美食交流系统现在正处于网络发展的阶段,所以对它的要求也是比较严格的,要从这个系统的功能和用户实际需求来进行对系统制定开发的发展方式,依靠网络技术的的快速发展和现代通讯技术的结合为用户带来方便,可以方便管理员网上管理,校园美食交流系统信息,还可以通过这些技术实现发布校园美食交流系统等过程。当今社会互联网急速发展,电子商务系统也在国内爆炸式的发展起来。这种网络模式对长期使用互联网社会产生了深远的影响,在这种社会环境下开发一个适用于用户都可以操作的、简单的、便捷的校园美食交流系统的发展前景是非常好的。
校园美食交流系统是一个典型的管理系统,在整个系统的发展来看包括数据库的设计、分析、连接、功能实现和系统维护以及用户的正确操作方式,对于上述的问题我们根据用户的实际情况来设计出一个典型的校园美食交流系统,在一定的基础上保证了这个系统的完整性和安全性。在整个系统程序当中的功能我们要保证用户方便使用而且易于操作的特点。在当今社会当中随着现代科学技术网络的快速发展和用户对网络技术意识不断提高,网络给用户带来强大的功能早已经被用户所接受,就拿这个校园美食交流系统来说,在整个系统当中开发它的要求是越来越高,同时所用的软件环境也是要不断提高。对于这个校园美食交流系统来说它已经满足现代化的信息化、潮流化的管理。能够有效的提高校园美食交流系统人员的工作效率和工作信心。
1.2 研究目的
为了解决好这个校园美食交流系统,也更好的能够维护校园美食交流系统中出现的问题,同时也能够让用户能够正确的了解本校园美食交流系统。所以设计本系统。
本系统主要根据管理人员的需求做出分析,让用户更好的在线管理校园美食交流系统信息等,管理员后台管理系统数据等功能。从这个系统的操作来说,能够有效的进行信息的添加、修改、查询、删除一些校园美食交流系统信息,在一定的程序上能够实现了自动化。设计该系统的主要目的是为实现通过网络来减少人力和财力的投入,不断提高工作效率。最终我们希望通过校园美食交流系统可以达到以下目的:
提高校园美食交流系统的管理效率,实现管理上的井井有条。
实现用户通过计算机平台及时更新校园美食交流系统信息,实现校园美食交流系统等。
解决传统校园美食交流系统存在的弊端。
1.3 研究内容
在目前所使用的软件开发主要是应用的java,校园美食交流系统开发来看它具有很大的意义,具体该系统的主要任务是:
(1)对于这个系统网络环境它主要是让用户学会多种需求和业务上的流程以及各个角色的功能问题,同时对每一个业务和技术做出了解。
(2)对于这系统的整个程序应用做出高效的升级、扩展和维护。
(3)掌握系统的整体设计和结构计划,在一定的需求方面上满足用户的需求,确保在各个层次当中各功能的紧密配合后最终的功能实现,同时保证这个程序的独立性和各层次之间的紧密联系。
(4)在整个系统框架的设计我们要进行深入的学习和设计,保证这个系统在使用过程中的灵活性和了扩展性,同时不断提高系统的安全性和满足用户的实际需求。
从这个校园美食交流系统来看主要是满足用户的各自需求,同时根据这两方面进行了深入的研究,就拿本系统来说主要是对校园美食交流系统的背景选题意义、市场需求、数据库分析、功能模块的介绍和所用的开发技术来进行研发和介绍的。最后在对该系统做出测试分析和总结。
第二章 开发技术介绍
2.1 Java技术
Java技术它是一个容易让人学会和使用的一门服务器语言。它在编程的过程当中只需要很少的知识就能建立起一个真正的交互站点。对于这个教程来说它并不需要你完全去了解这种语言,只要能快速融入web站点就可以,还可以进行一些基本知识的编程就可以。
现代社会中,使用Java语言做动态网页是最常用的,主要是Java比较简单易懂,用户掌握的web 服务器编写脚本。Java语言技术在编程技术中具有一定的安全性和跨平台性功能,并且它可以直接支持分布式的网络应用和效率。在Java语言技术当中它的功能是方便简单的。对于这个语言技术来说它就像万花筒一样在进行开发的时候可以随机进行组合最后变成不同颜色的花瓣。随着现在互联网的快速发展和电子商务的不断发展,在各行各业的设施基础上都开始应用到了计算机,对于过去传统的的管理方式和客户需求都不能满足现在正常的供求关系,所以我们必须通过添加现在的新技术来满足客户的需求。从目前来看,Java技术已经在动态网页中应用的是比较广泛的一门技术。
Java语言具有非常多种的特性:(1)跨平台的无关性;(2)面向对象; (3)安全性得以保障;(4)支持多个任务;(5)多种编写方式,代码编写简单。对比其他的低级语言、高级语言,Java语言具有明显的显著优势以及未来开阔的前景,可以广泛的应用在个人笔记本电脑、大数据、大型游戏等等。
Java语言具有面向对象的特性,并且易于理解。关于对象,其实可以理解成每一种事物都是一种对象,包括我们人类自身都是一种对象。利用面向对象语言的基本特征来解决软件开发中的实际问题,为有效软件开发提供了技术支持。
2.2 Mysql数据库
Mysql是一个多用户、多线程的服务器,采用SQL的数据库,数据库管理系统是基于SQL的客户以及服务器模式的关系,它的优点有强大的功能、操作简单、管理方便、可靠安全、运行较快、多线程、跨平台性、完全网络化、稳定性等,非常适合Web站点或者其他应用软件,在数据库后端的开发。此外,利用许多语言,可以编写和访问Mysql数据库的程序。Mysql数据库也是开放源代码的,开发者越来越喜欢使用Mysql关系数据库,应用范围也被推而广之。这是由于速度快和易用性, Web站点或应用软件的数据库后端的开发也都在使用它。
mysql 数据库它有很多的优点,例如它在操作上能够让人通俗易懂、功能强大、信息储存量高等优点。所以被用户广泛应用,对于mysql数据库来说它一般主要是对数据进行编码和查询,而且在很多的设计当中都应用到了该数据库,在此过程当中我们可以对常规的数据进行查询和组合,所以我们在进行使用mysql数据库的时候只要对编写一小段的数据就能实现相应的功能。数据库,就是数据存储的储藏室,只不过数据是存储在计算机上的,而不是现实中的储藏室,数据的存放是按固定格式,而不是无序的,则定义就是 :长期有固定格式,可以共享的存储在计算机存储器上。数据库管理主要包括数据表的建立,数据存储、修改和增加数据,为了使数据库系统能够正常运行,相关人员进行的管理工作。数据表的建立,可以对数据表中的数据进行调整,数据的重新组合及重新构造,保证数据的安全性。
2.3 B/S结构
BROWSER/SERVER程序架构方式是使用电脑中安装的各种浏览器来进行访问和使用的,相比C/S的程序结构不需要进行程序的安装就可以直接使用。BROWSER/SERVER架构的运行方式是在远程的服务器上进行安装一个,然后在任何接入互联网的电脑上访问和使用。BROWSER/SERVER架构的开发方式给用户带来了极大的便利,在任何时间和地点都可以使用开发的程序系统。
在B/S的结构中,用户可以在任何可以上网的地方访问和使用系统网站的功能,没有地域和时间等方面的限制,B/S结构是把程序完整放置到计算机网络的服务器上,通过计算机互联网给用户提供远程的网络服务。在三层体系结构的B/S系统中,通过浏览器,会员可以对很多服务器发出请求, B/S系统会很大程度的降低工作量,用户只需要安装运行较少的客户端即可,大量的工作将由服务器承担,另外,服务器也完成包括访问数据库,执行应用程序的工作等等。
B/S结构主要有三层,分别为数据层、控制逻辑层和视图层。用户通过视图层,让控制层调用数据层的数据,从而达到整个访问过程。三层相互独立,维护方便,使用安全,三层有互相调用,提高效率。
2.4 SSM框架
当今流行的“SSM组合框架”是Spring + SpringMVC + MyBatis的缩写,受到很多的追捧,“组合SSM框架”是强强联手、各司其职、协调互补的团队精神。web项目的框架,通常更简单的数据源。Spring属于一个轻量级的反转控制框架(IoC),但它也是一个面向表面的容器(AOP)。SpringMVC常常用于控制器的分类工作模式,与模型对象分开,程序对象的作用与自动取款机进行处理。这种解耦治疗使整个系统的个性化变得更加容易。MyBatis是一个良好的可持续性框架,支持普通SQL查询,同时允许对存储过程的高级映射进行数据的优化处理。大型Java Web应用程序的由于开发成本太高,开发后难以维护和开发过程中一些难以解决的问题,而采用“SSM组合框架”,它允许建立业务层次结构,并为这个问题提供良好的解决方案。
第三章 系统分析
整个系统的功能模块主要是对各个项目元素组合、分解和更换做出对应的单元,最后在根据各个系统模块来做出一个简单的原则,系统的整体设计是根据用户的需求来进行设计的。为了更好的服务于用户要从校园美食交流系统的设计与实现方面上做出相应的功能模块和内部信息保持一致的联系。所以我们在设计时候要避免一些代码的相互的重复和耦合的情况发生。
3.1 可行性分析
可行性分析主要是针对这个项目开发是否有意义和价值观来进行的全面分析,在分析的过程当中发现这个系统所存在的不足之处。就拿这次校园美食交流系统的设计与实现来说主要是针对一些用户在发布校园美食交流系统信息时遇到不方便的操作和问题来进行解决问题的,最后能够让校园美食交流系统开发得到最大的用处。而且对于用户方面我们可以提供给一个简单方便操作的校园美食交流系统。所以我们要计算开发这个系统它能否有效的解决好这个系统经济问题,在开发完成以后所带来的利益是否大于开发过成当中的成本。所以可行性的研究与分析是这个系统在开发和设计上是必不可缺少的一部分。从该系统文章的全部来看,我们要从以下几个方面进行分析:
技术可行性:在技术方面我们要从现有自己掌握的技术能否设计出我们当初所预定的目标。
经济可行性:在这次系统开发和设计过程当中所用的经费是否大于以后给社会带来的价值观。
操作可行性:系统在用户使用过程当中是否方便、简单,能否达到大部分的用户会使用。
3.1.1 技术可行性
技术的可行性分析主要是针对开发该系统所用到技术进行分析,对于校园美食交流系统的设计,可以在任何一个地方都进行使用和管理。通过当前我们所学的程序开发和语言介绍利用以上的技术开发该系统是比较合适的。而且我们在使用的数据库也是要保证这个系统的完整性、数据安全性好的条件。
3.1.2 经济可行性
经济可行性主要是决定这个系统是否具有价值存在,是否具有开发意义,如果开发的项目不能够节约物品和资源,反而使用的大量的人力、财力和物力不成正比甚至小于投资成本,那么该项目是不具备开发意义和价值的。在开发本项目的初期,节约成本是最基本的,设计和开发都是由本人一人完成的,并且在开发中使我学习到了很多的知识,也开拓了自己的眼界,在通过可行性分析之后,该项目的利大于弊,所以该项目是具有开发意义和价值的。
3.1.3 操作可行性
校园美食交流系统的开发登录界面它是我们最常见的一种登录窗口来完成的,用户可以使电脑来进行登录并简单的访问不需要做任何的操作。对于此次的系统开发它主要是基于B/S结构和java技术及MySQL数据库来完成,让系统开发更加完美和完善,所以我们开出的系统界面更加人性化,用户使用也更加方便。而且系统在使用过程当中也拥有方便操作、易管理等特点。
经过以上的叙述,所以开发此系统在经济上、技术上是满足开发条件的。
3.2 系统性能分析
1.如果我们想要对前后台处理的层次分明那么我们就要采用B/S模式来进行系统的开发这样就可以方便用户的使用。
2.对于系统的开发和设计我们就要采用大家日常所需要的要求,这样一来可以提高系统的适用性也能保证系统利用价值。对于一个系统来说一个好的框架是很重要的,因为一个好的框架它可以提高系统的稳定和高效性。
3.在系统界面上也要设计一个方便快捷的登录界面,这样就可以提高用户对系统操作性和适用性。
4.在系统模块设计当中我们要对系统各个模块进行合理简化和设计,这样就能提高系统使用性。
5.对于一个完整的系统来说对于它的测评和测试是比较重要的,所以我们在软件设计程序中要保持软件占用的时间和速度快的特点。
6.对于这个系统来说我们首先要考虑所设计出的系统它具有那些突破和体现,所以我们尽力去改进这个系统去适应用户。
3.3 系统功能需求分析
对于一个新的网站来说开发新网站我们就要做出这个系统的任务需求分析,因为对系统分析的质量好坏它可以决定这个网站开发的意义,俗话说得好一个好的开头是成功的一半,对于开发这个校园美食交流系统来说前期的分析是比较重要的,所以任务分析它可以决定这系统的开展和设计,这样就可以保证用户满意性。
任务的需求它能决定这个系统开发过程当中一个重要环节,所以我们在系统开发过程所用质量是比较重要的,因为我们在系统应用过程当中不一定那会出现问题,所以我们在进行对系统分析是比较重要的,因为它可以决定这个系统功能和需求。
本课题要求实现一套校园美食交流系统的开发与实现,主要实现功能包括;管理员:首页、个人中心、美食分类管理、美食信息管理、用户管理、管理员管理、论坛中心、系统管理,
前台首页:首页、美食信息、论坛中心、美食资讯、个人中心、后台管理、网站建议,用户:首页、个人中心、我的收藏管理。
(1)管理员用例需求如图3-1所示:
图3-1管理员用例需求图
- 用户用例需求如图3-2所示:
图3-2用户用例图
- 前台首页用例需求如图3-3所示:
图3-3前台首页用例图
3.4 业务流程分析
在系统流程分析当中调查分析它是比较重要的环节,因为在这个系统当中它都涉及到每个环节的业务流程,所以从校园美食交流系统的整体设计上要保证各个信息的正确输入和输出以及对数据储存的完整,并结合实际的操作步骤来绘制出具体的流程图。具体流程图如下图3-4所示:
图3-4系统开发流程图
3.4.1登录流程
为了保证系统的安全,用户要想进入校园美食交流系统必须进行登录操作,用户登录流程图如图3-5所示
图3-5 登录流程图
第四章 系统设计
4.1 系统的功能结构图
通过系统需求分析,本校园美食交流系统主要实现功能包括;管理员:首页、个人中心、美食分类管理、美食信息管理、用户管理、管理员管理、论坛中心、系统管理,用户:首页、个人中心、我的收藏管理等功能。其功能结构图如下图4-1所示:
图4-1 系统功能图
4.2 系统数据库设计
4.2.1 数据库E-R图
在该系统的信息中,由于数据库的支持,我们可以对数据库进行收集、整理、更新和加工等操作。由于数据库的存储功能强大,所以数据库已经成为了计算机必不可少的一部分,一个数据库的好坏直接影响该系统的质量和效率。一个系统中的数据库是必不可少的,并且起着决定性因素。通过之前的系统分析,可以规划出本系统中使用的主要等,下面设计出这几个关键实体的实体关系图:
(1)用户信息实体E-R图如图4-2所示:
图4-2用户信息实体图
(2)美食信息实体E-R图如图4-3所示:
图4-3美食信息实体图
(3)论坛中心信息实体E- R图,如图4-4所示:
图4-4论坛中心信息实体图
4.2.2 数据表字段设计
每个数据库的使用都是隔开的,当它们在程序中运行时,他们就会与自己相关的协议和用户端进行通讯。而且系统会自动将这些数据进行连接。如果我们想要对某个数据库进行了解,那么我们就应选择该桥段,然后就会自动讲解。在点击完成按钮之后就会自动在对话框内弹出数据源的名称,然后进行下一步操作,输入正确的密码和账号进行登录。根据系统功能设计的要求和功能模块的划分,校园美食交流系统的设计与实现一共涉及到多个数据表。下面就介绍一下各别主要数据库表的设计结构及其功能建立数据库表:
表4-1 allusers表
列名 | 数据类型 | 长度 | 约束 |
---|---|---|---|
id | int | 11 | NOT NULL |
username | varchar | 50 | default NULL |
pwd | varchar | 50 | default NULL |
cx | varchar | 50 | default NULL |
表4-2 meishifenlei表
列名 | 数据类型 | 长度 | 约束 |
---|---|---|---|
id | int | 11 | NOT NULL |
addtime | varchar | 50 | default NULL |
fenlei | varchar | 50 | default NULL |
表4-3:meishixinxi表
列名 | 数据类型 | 长度 | 约束 |
---|---|---|---|
id | int | 11 | NOT NULL |
addtime | varchar | 50 | default NULL |
meishimingcheng | varchar | 50 | default NULL |
fenlei | varchar | 50 | default NULL |
tupian | varchar | 50 | default NULL |
kouwei | varchar | 50 | default NULL |
tese | varchar | 50 | default NULL |
shipin | varchar | 50 | default NULL |
xiangqing | varchar | 50 | default NULL |
表4-4 yonghu表
列名 | 数据类型 | 长度 | 约束 |
---|---|---|---|
id | int | 11 | NOT NULL |
addtime | varchar | 50 | default NULL |
yonghuming | varchar | 50 | default NULL |
mima | varchar | 50 | default NULL |
xingming | varchar | 50 | default NULL |
xingbie | varchar | 50 | default NULL |
touxiang | varchar | 50 | default NULL |
shouji | varchar | 50 | default NULL |
youxiang | varchar | 50 | default NULL |
第五章 系统功能实现
5.1登录
管理员登录,通过填写用户名、密码、角色等信息,输入完成后选择登录即可进入校园美食交流系统,如图5-1所示。
图5-1管理员登录界面图
5.2管理员功能实现
5.2.1 美食分类管理
管理员对美食分类管理进行填写分类并进行详情、删除、修改。美食分类管理效果图如图5-2所示。
图5-2美食分类管理界面图
5.2.2 美食信息管理
管理员对美食信息管理进行查看美食名称、分类、图片、口味、特色、视频等信息进行详情、删除、修改操作。美食信息管理效果图如图5-3所示。
图5-3美食信息管理界面图
5.2.3用户管理
管理员对用户管理进行编辑用户名、密码、姓名、性别、头像、手机、邮箱等信息进行详情、删除、修改操作。用户管理效果图如图5-4所示。
图5-4用户管理界面图
5.2.4 管理员管理
管理员对管理员管理进行编辑用户名、密码、角色等信息进行详情、删除、修改操作。管理员管理效果图如图5-5所示。
图5-5管理员管理界面图
5.2.5 论坛中心
管理员对论坛中心进行编辑帖子标题、用户名、状态等信息进行详情、删除、修改操作。论坛中心效果图如图5-6所示。
图5-6论坛中心界面图
5.2.6美食资讯
管理员对美食资讯进行编辑标题、简介、图片等信息进行详情、删除、修改操作。美食资讯效果图如图5-7所示。
图5-7美食资讯界面图
5.3前台首页功能实现
校园美食交流系统,在系统首页可以查看首页、美食信息、论坛中心、美食资讯、个人中心、后台管理、网站建议等内容,如图5-8所示。
图5-8系统功能界面图
5.3.1登录、用户注册
登录、用户注册,用户通过输入用户名、密码、姓名、手机、邮箱等信息进行注册、登录,如图5-9所示。
图5-9登录、用户注册界面图
5.3.2美食信息
美食信息进行填写美食名称、分类、图片、口味、特色、视频等信息进行点我收藏操作如图5-10所示。
图5-10美食信息界面图
5.3.3个人中心
个人中心,在个人中心页面可以填写用户名、密码、姓名、性别、头像、手机、邮箱等内容进行更新信息、退出登录,如图5-11所示。
图5-11个人中心界面图
5.3.4论坛中心
论坛中心,在论坛中心页面可以填写标题、类型、内容等内容进行发布帖子,如图5-12所示。
图5-12论坛中心界面图
5.4用户功能实现
5.4.1个人信息
用户进入个人信息可以查看用户名、密码、姓名、性别、头像、手机、邮箱等操作。个人信息效果图如图5-13所示。
图5-13个人信息界面图
5.4.2我的收藏管理
用户对我的收藏管理进行查看收藏名称、收藏图片等操作。我的收藏管理效果图如图5-14所示。
图5-14我的收藏管理界面图
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{
@Autowired
private 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();
}
}
}
ConfigServiceImpl.java
package com.service.impl;
import java.util.Map;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.dao.ConfigDao;
import com.entity.ConfigEntity;
import com.entity.UserEntity;
import com.service.ConfigService;
import com.utils.PageUtils;
import com.utils.Query;
/**
* 系统用户
*/
@Service("configService")
public class ConfigServiceImpl extends ServiceImpl<ConfigDao, ConfigEntity> implements ConfigService {
@Override
public PageUtils queryPage(Map<String, Object> params) {
Page<ConfigEntity> page = this.selectPage(
new Query<ConfigEntity>(params).getPage(),
new EntityWrapper<ConfigEntity>()
);
return new PageUtils(page);
}
}
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;
}
}
声明
本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。