如何使用ssm实现校园二手交易平台的设计与开发+vue

news2025/4/10 13:58:11

@TOC

ssm641校园二手交易平台的设计与开发+vue

研究背景与现状

时代的进步使人们的生活实现了部分自动化,由最初的全手动办公已转向手动+自动相结合的方式。比如各种办公系统、智能电子电器的出现,都为人们生活的享受提供帮助。采用新型的自动化方式可以减少手动的办公时间,增加正确率从而增加人们的幸福指数。时代进步中计算机技术的发展尤为突出,渗透进生活的方方面面,各种App、 网站、管理系统、小程序迅速占领市场。

对于二手商品的购买问题,大多数用户采用在校园网上进行。校园网内容丰富,想要找二手商品需要时间。现实购买二手商品也有大量的二手交易平台,这些平台大多都是第三方平台,需要借助第三方,不能针对本学校,所以需要一种商家直接对接用户的校园二手交易平台。

1.2课题实现目的和研究意义

时代的发展也为人们提出了更高的要求,只有不断的学习和发展才可以前进。目前我们正在科技和网络发展的关键点,网络已实现普及。然而还是有大量的企业、机构采用传统的办公方式进行处理事务,当然传统的方式对于小规模的企业、机构来说更为适合,但想要发展就需要以发展的目光来看待问题。如果可以采用更科学、省力的方式进行办公将会带来变革。

二手商品购买方式关系着需要二手商品的用户购买效率。相关单位对商品信息的准确性要严格把关,更要考虑到信息查询的方便。以往都是由用户提供商品名称、形状等信息来购买商品,用户占主导地位,工作人员负责查询信息然后结账。信息传递有时候会不准确,造成查询商品的麻烦。如果采用共享的平台,把用户、商家、管理员都结合到一起,起到信息共享就可以解决这类问题。商品的所有信息都可以由管理员、商家直接管理,用户的购买过程也可由相关管理员、商家负责把控,把用户的购买实现流程化、清晰化,减少恶意操作,提供更为透明的工作流程,实现校园二手交易平台的真正价值。

1.3课题研究内容

  本系统从校园二手交易管理的工作出发,包括管理员和用户、商家三种权限。管理员的功能为商品管理、商品求购管理和用户管理,实现系统里用户的全面管控,还可以管理论坛信息、校园新闻信息等。用户可以在线选择需要的商品进行在线购买,还可以把需要的商品都加到购物车里一起结算。商家负责商品的发布和订单管理。三种权限的用户功能相辅相成,不可缺少,共同帮助网上二手商品的交易管理。本系统中加入论坛功能,实现用户与用户之间的交流。

1.4论文结构安排

本篇论文的结构分为摘要、目录、正文部分、总结、致谢和参考文献。正文部分为核心。正文部分分为:

第1章绪论,从课题的开发背景、现状、目的意义等进行本课题的介绍;

第2章系统分析,从系统的开发技术、环境、可行性、操作流程等进行系统的详细分析;

第3章系统设计,从系统的功能图、数据库设计、ER图、数据库表进行系统的设计;

第4章系统实现,主要介绍系统的实现界面和实现内容;

第5章系统测试,讲解主要功能的测试过程以及测试结果。

第2章 系统分析

2.1系统开发中使用相关技术介绍

2.1.1Java介绍

Java语言是从C++进行衍生出来的一种新型编程语言,他保留了c++语言中很多核心技术,继承了他的面向对象的优点,而且舍弃了很多缺点,比如在Java语言中去掉了指针,这样可以减少很多错误,还去掉了运算符,这样提高了运行处理效率。还增加了很多优点,添加了垃圾回收功能,提高了代码的使用率,总体来说,Java语言是一个分布式的、高性能的、多线程的开发语言。Java从开发之初就是打算作为一个开放性的语言技术,这就要求需要有很高的兼容性,首先就需要同样的代码程序可以在不同的计算机上运行,还要支持不同的网络,同时还要注重安全性,方便用户使用。Java语言最突出的特点就是面向对象,可以把一个对象当成很多代码状态的物体,然后进行自定义类型进行关联操作,这样进行集合起来的代码就叫对象,面向对象的方法可以使设计根据的简单,方便管理,还可以减少失败。C++最大的一个缺点就是没有垃圾回收机制,通常在编程的过程中,初始化对象时候系统会自动分配一个内存地址,如果不需要这个对象的时候,系统不能进行自动删除和回收,这样造成了很大的内存浪费,导致系统卡顿,会让系统非常的不稳定,严重的话甚至会系统崩溃,而Java语言就是在这个基础上设置了垃圾回收机制,当一个使用过的对象没有引用的时候,系统可以自动删除,回收内存,这样就可以很好的避免了内存泄漏,保障了程序的安全,同时提高了运行效率。

2.1.2Mysql数据库介绍

Mysql数据库是目前比较流行的一种开源数据库,可以支持多种编译器进行在线测试,从而保证了代码的可移植性,而且支持多种操作系统有很好的跨平台性,为编程语言提供所需要的API,可以多线程同时运行,这样有效的减少了内存占用率,提高了使用效率。运行的过程中还能自动优化sql查询算法,这样使数据查询速度达到了显著的提高,而且Mysql数据库还可以作为一个独立的程序在客户端中单独使用,也可以嵌入到其他程序中搭配一起使用。Mysql数据库效率非常的高,可以处理上千万条数据,可以同时支持多种不同的数据引擎,而且是开源的软件,不需要支付任何费用,而且可以进行定制,使用GPL协议进行代码修改,开发属于自己的Mysql系统。综上所述,Mysql数据库是一个非常受欢迎的一个数据库,体积小,速度快,最重要的还是免费,非常适合中小型项目的开发使用。

2.1.3B/s架构介绍

B/s架构是随着网络快速发展而开发出来的一种网络框架,跟传统的c/s框架最大的区别就是,直接把代码部署到网络服务器中,这样方便了系统的后期开发和维护,然后用户可以直接通过浏览器进行代码的访问,不需要额外安装任何的软件客户端,简化了用户的使用。B/s结构是指Browser/Server结构,意思就是只需要安装一个服务器就行了, 客户端方面主要就是采用浏览器进行访问,主要是对传统的c/s架构的一种改进,采用www浏览器技术和其他Script语言技术,把系统实现需要的代码全部部署到了服务器上面,是一种新型的架构技术,可以直接借助浏览器进行数据访问和数据交互。最大的优点就是,不需要安装客户端,不受环境影响,可以实时实地的进行访问,其次就是维护非常的方便。当然了有优点也有不可避免的缺点,首先是在访问速度方面,比较受网络的影响,不像cs架构一样,处理速度非常的快,直接在本机就可以完成数据交互,而B/s需要借助网络才能进行服务器访问,必须保证有顺畅的网络,才能有好的使用体验,其次就是安全性,因为所有数据存储在网络服务器中,比较容易受到攻击,从而造成数据泄漏,这是目前B/s架构存在的最大的弊端。所以说B/s架构适合一些电子商务类的网站,适合比较有用户共享交互的,开放性的网站的设计与开发。所以我开发本系统采用B/s架构是非常适合的,可以达到多人同时登录系统,可以实现信息交互,而且方便随时随地的进行数据访问,而且本人对B/s架构开发比较熟悉,所以本系统就采用B/s架构来进行开发设计。

2.1.4 Tomcat服务器介绍

Tomcat服务器属于Apache服务器的一部分。Tomcat服务器作为Java语言项目的运行条件非常受欢迎。因为Tomcat服务器非常小,可以内置到运行软件里使用,不需要单独安装,这样可以减少多种环境的安装,从而简化项目的调试。Tomcat服务器由Sun公司创立,可以处理Html页面,在运行中处理Vue和Servlet页面。

2.1.5Vue技术介绍

Vue技术是开发的一种用来创建动态页面的技术。Vue技术通过服务器来响应要求,再根据要求生成Html、Xml来进行转换成Web页面。Vue技术也属于一种脚本语言,常用来搭配Java语言使用,可以和静态的页面一起使用,把静态的页面改成动态的页面。Vue技术在使用时可以转换成Servlet代码,然后再编译成二进制的机器码,当然也可以直接编译成二进制的机器码。Vue技术的特点为简单好用,可以快速的把静态页面变成动态的页面,它使用Javabean来把常用的代码来复制,可以减少编程人员的重复工作,同时Vue技术还拥有很多标签,可以支持更多的外在标签和内在的标签,还可以自定义标签,使编程人员在使用时更加的灵活,加快项目开发的速度。Vue技术的功能非常简单,只负责页面数据,负责页面的传输,所以更加的单纯,不容易出错。

2.1.6 SSM框架介绍

SSM框架是由Spring、SpringMVC、MyBatis组成,目的是简化Spring框架。SSM框架减少了定义样板的时间,可以通过特定的样式进行配置,使框架搭建更加快速。这种特点使SSM框架很快成为了热门。SSM框架属于开源的Java语言的常使用的框架之一。提供了多种开发系统的解决方法,并且可以面向编程进行事务处理。SSM框架的特性之一就是拥有控制反转,可以使用特定的容器来管理编程对象的生命周期,这就使得系统的开发具有面向切面编程的特点。SSM框架可以通过AOP特点来进行项目的运行配置,并进行集成以此来满足用户的需求。

2.2系统可行性分析

系统的可行性关系着系统开发的成功和市场,没有经过详细可行性分析的系统开发过程会非常艰难。系统的可行性分析也是在系统开发前的必要研究过程。通过研究已有的大量论文和文献发现,系统可行性从系统的经济方面、操作方面和技术方面进行分析。

2.2.1经济可行性分析

系统开发所需要的经济主要在系统的成本问题、运行问题和维护问题上。本系统在开发中不需要经济的支撑,所需要的开发软件和设备都是在已有条件上。本系统在运行里所需要的环境也都为免费就可以下载的。本系统在后期的维护上也只需要技术支持就可以完成。所以本系统在经济可行性上可以通过。

2.2.2操作可行性分析

本系统在开发中充分调查了所使用用户的操作习惯和风格,所有的操作流程也都为简单的流程,在操作中也设置了提醒。用户在使用本系统时只要按照提示就可以完成,非常简单。所以本系统在操作可行性上可以通过。

2.2.3技术可行性分析

本系统所需要的技术支持为Java语言,Mysql数据库,Vue技术和SSM框架等。所使用的技术都为开源成熟的技术,也是目前流行的技术之一。使用这些技术开发的系统可以保证系统的前詹性和稳定性、安全性。所以本系统在技术可性性上可以通过。

2.3系统需求分析

目前计算机、网络技术已进入到各行各业。二手商品做为学生消费的重要组成部分更应身体力行,校园二手交易平台里的所有工作都是围绕商品而展开,每种商品的简介信息都非常多,如果采用传统的管理方式非常容易造成混乱,而且对于商品的信息查询非常不便。对于商品订单的管理工作需要额外的严谨,如果还是采用传统的商品订单管理方式对商品内容、购买用户都做不到百分百的监管,工作步骤、内容也实现不了透明。所以非常需要新的管理方式出现。

2.4系统性能分析

系统在设计时也需要注意系统的性能,一般系统的性能方面包括系统的稳定性、安全性、界面设计方面、操作方面、协调等方面。

  1. 本系统在界面设计方面尊重所有的使用权限,多方面参考不同使用权限的使用习惯以及风格,综合不同的情况整理出符合大众要求的系统界面。做到自己的最大能力;
  2. 在系统的稳定性、安全性方面采用必要的登录验证,不同权限采用不同的账号和密码。为了使系统更为稳定采用成熟的开发环境和技术,在代码编写时尽可能的减少冗余,保证系统的运行效率;
  3. 在系统的操作流程方面,尽可能的采用简单的流程来实现用户要求的反馈,当用户提出需求时,可以用最少的步骤进行提问操作;
  4. 本系统采用数据库和功能界面分开设计,这样可以保证当系统的功能运行出错时不会影响系统里的数据,也就保证了数据的安全。

2.5系统功能分析

系统的功能分析决定了系统的功能设计,完整详细的系统功能分析可以使系统的开发事半功倍。本系统的功能围绕用户、管理员、商家三种权限设计。根据不同权限的不同需求设计出更符合用户要求的功能。本系统中管理员主要负责审核管理用户,审核商家发的商品,发布新闻等,用户可以对需要的商品进行购买、加入购物车等。商家负责商品的发布和订单的处理。本校园二手交易平台管理员的用例图如下图2-1所示:

图2-1管理员用例图

用户可以管理个人资料、查询商品、在线购买和加入购物车、管理订单、发布求购等,用户的个人资料是由用户注册时产生,用户的订单内容由用户在购买商品时产生,用户购物车内容由用户在加入购物车操作时产生。用户用例图如下图2-2所示:

图2-2用户用例图

商家可以管理商品信息和订单信息等。商家用例图如下图2-3所示:

图2-3商家用例图

2.6系统操作流程分析

  信息从如何产生到反馈结果的过程可以称为信息的流程。分析好系统的操作流程才可以使系统正确运行不会出现Bug。本系统的流程为管理员先进行登录,登录后管理注册用户的账号、密码等信息,审核商品,管理新闻、论坛、商品求购等,用户可以查询商品、购买商品、管理购物车等,商品的销售订单和发布由商家负责。系统里展示的商品数据都是由管理员负责审核。本校园二手交易平台的操作流程如下图2-4所示:

图2-4校园二手交易平台操作流程图

第3章 系统设计

3.1系统功能结构设计

系统的功能结构是采用树形图来绘制功能设计。根据分析所得,本系统的功能设计为管理员、用户、商家三部分。管理员为商品管理、校园新闻管理、商家管理、用户管理、论坛信息管理、个人中心管理等,用户的功能为查询商品,在线购买、订单管理、管理个人信息、购物车信息、商品求购等,商家为商品管理、订单管理等。用户可以注册进行登录。本校园二手交易平台的功能结构设计图如下图3-1所示:

图3-1校园二手交易平台功能结构图

3.2数据库设计

数据库为数据的仓库,决定了数据的保存和修改、删除、调用等。数据库的稳定决定了系统里数据的安全。为了保证数据的查询效率,在建立数据库时需要按照一定的规则。数据不单指文本类型的,也包括音乐、图片甚至是声音都可以称为数据。为了使数据库更加安全,在建立数据库时就需要使用正规的数据库管理系统和在设置权限时需要设置严格的角色分权,更要阻止一切外部端口的探测形为。

本系统采用Mysql数据库,在建立数据库时采用Root用户名。数据库的建立过程为先进行数据的ER图设计然后进行数据库表的实现。

3.2.1数据ER图设计

数据ER图中记录了关系、实体、属性。实体与实体的关系决定了数据在调用时的正确与否,实体的属性决定了该实体的内容。数据ER图的设计同样重要,也是数据库建立的基础。

通过系统中的功能数据分析,本系统的实体主要有商品、管理员、用户、订单等。

  1. 管理员的ER图中的属性有账号、密码、权限。管理员ER图如下图3-2所示:

图3-2管理员ER图

  1. 用户的ER图里的属性有性别、姓名、编号等,用户的ER图如下图3-3所示:

图3-3用户ER图

  1. 商品的ER图里的属性有商品编号、名称、厂家、生产日期等,商品的ER图如下图3-4所示:

图3-4商品ER图

(4)订单的ER图里的属性有订单人、编号、订单时间、商品等,订单ER图如下图3-5所示:

图3-5订单ER图

3.2.2数据库表设计

数据库表是把ER图进行详细化、实体化。不同的表名下保存着相对应的表信息数据。在数据库表里记录着数据的主键、外键、数据类型、长度等。本校园二手交易平台所创建的数据库表有用户信息表、商品信息表、订单信息表、管理员信息表等。本校园二手交易平台的数据库表如下表3-1—3-15所示:

表3-1 address

表3-2 cart

表3-3 config

表3-4 dictionary

表3-5 forum

表3-6 goods

表3-7 goods_collection

表3-8 goods_commentback

表3-9 goods_order

表3-10 goodsqiugou

表3-11 news

表3-12 shangjia

表3-13 token

表3-14 users

表3-15 yonghu

第4章 系统详细实现

4.1用户登录功能的详细实现

用户登录界面起到验证身份的作用,本界面采用图片背景进行设计。在用户登录界面里设置了提示词和用户、密码的文本框。在文本框下是登录、注册用户按钮。用户在信息输入完成后可以使用登录按钮进行相对应的操作。用户登录功能的实现界面如下图4-1所示:

图4-1用户登录实现界面

4.2管理员权限的功能实现

4.2.1商品求购管理功能的详细实现

管理员负责用户商品求购信息的审核,管理员也可以发布商品求购信息。管理员查询商品求购的功能实现如下图4-2所示:

图4-2管理员查询商品求购信息的实现界面

4.2.2商品管理功能的详细实现

管理员可以对商品信息审核和修改、删除。可以查询商品评价、商品留言、商品订单等信息。查询商品信息功能的实现界面如下图4-3所示:

图4-3查询商品管理功能的实现界面

4.2.3基础数据管理功能的详细实现

管理员可以管理新闻类型、商品类型。基础数据管理功能的实现界面如下图4-4所示:

图4-4基础数据管理功能的实现界面

4.2.4商家管理功能的实现界面

管理员可以查看商家和管理、审核商家,还可以重置商家的密码。商家管理功能的实现界面如下图4-5所示:

图4-5商家管理功能的实现界面

4.2.5论坛管理功能的实现界面

管理员可以审核用户的帖子以及发布论坛的版块。论坛管理功能的实现界面如下图4-6所示:

图4-6论坛管理功能的实现界面

4.2.6校园新闻管理功能的实现界面

管理员可以发布新闻和对新闻进行核实。实现界面如下图4-7所示:

图4-7校园新闻管理功能的实现界面

4.3用户权限的功能详细实现

4.3.1个人资料管理功能的详细界面实现

当用户登录进系统后可以修改自己的资料,可以使自己信息的保持正确性。用户修改个人资料的实现界面如下图4-8所示:

图4-8修改个人资料功能的运行界面

4.3.2商品查询功能的详细实现

用户可以根据商品名称搜索相对应的商品,用户查询商品的界面实现如下图4-9所示:

图4-9商品查询功能的运行界面

4.3.3论坛功能的详细实现

在论坛里用户可以浏览帖子和发表自己的帖子。论坛功能的实现界面如下图4-10所示:

图4-10论坛功能的运行界面

4.3.4购物车管理功能的详细实现

在购物车里用户可以选择提交订单和清空购物车,购物车管理功能的实现界面如下图4-11所示:

图4-11购物车管理功能的实现界面

4.3.5订单管理功能的详细实现

用户可以管理自己的订单,在订单管理界面里也可以进行查看详情操作。订单管理功能的实现界面如下图4-12所示:

图4-12订单管理功能的实现界面

4.3.6用户注册功能的详细实现

非用户可以在注册功能里实现成为用户。在注册界面里按照要求填写信息就可以完成。用户注册的实现界面如下图4-13所示:

图4-13用户注册功能的运行界面

4.3.7商家功能的实现界面

用户在前台可以浏览所有的商家信息,了解商家的资质。商家功能的实现界面如下图4-14所示:

图4-14商家功能的实现界面

4.3.8商品求购功能的实现界面

用户可以发布和浏览商品求购信息,实现界面如下图4-15所示:

图4-15商品求购功能的实现界面

4.4商家角色功能的实现界面

商家的功能为进行商品发布和管理订单以及管理商家资料、论坛信息等,实现界面如下图4-16所示:

图4-16商家角色的功能实现界面

第5章 系统测试

系统测试的方

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;

/**
* @author yangliyuan
* @version 创建时间:2020年2月7日 下午8:01:14
* 类说明 : 
*/

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();
	}
}

ConfigController.java

package com.controller;


import java.util.Arrays;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.service.ConfigService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;

/**
 * 登录相关
 */
@RequestMapping("config")
@RestController
public class ConfigController{
	
	@Autowired
	private ConfigService configService;

	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,ConfigEntity config){
        EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
    	PageUtils page = configService.queryPage(params);
        return R.ok().put("data", page);
    }
    
	/**
     * 列表
     */
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,ConfigEntity config){
        EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
    	PageUtils page = configService.queryPage(params);
        return R.ok().put("data", page);
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        ConfigEntity config = configService.selectById(id);
        return R.ok().put("data", config);
    }
    
    /**
     * 详情
     */
    @IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") String id){
        ConfigEntity config = configService.selectById(id);
        return R.ok().put("data", config);
    }
    
    /**
     * 根据name获取信息
     */
    @RequestMapping("/info")
    public R infoByName(@RequestParam String name){
        ConfigEntity config = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
        return R.ok().put("data", config);
    }
    
    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody ConfigEntity config){
//    	ValidatorUtils.validateEntity(config);
    	configService.insert(config);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody ConfigEntity config){
//        ValidatorUtils.validateEntity(config);
        configService.updateById(config);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
    	configService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

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;
	}
}

svgo.yml
# replace default config
# 基于svgo对svg文件进行压缩:https://panjiachen.github.io/vue-element-admin-site/zh/feature/script/svgo.html
# multipass: true
# full: true

plugins:

  # - name
  #
  # or:
  # - name: false
  # - name: true
  #
  # or:
  # - name:
  #     param1: 1
  #     param2: 2

- removeAttrs:
    attrs:
      - 'fill'
      - 'fill-rule'

声明

本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2146945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

速通汇编(六)认识栈,SS、SP寄存器,push和pop指令的作用

一&#xff0c;栈 &#xff08;一&#xff09;栈的特点 栈是一种具有特殊访问方式的存储空间&#xff0c;特殊在于&#xff0c;进出这块存储空间的数据&#xff0c;“先进后出&#xff0c;后进先出” 由于栈的这个“先进后出”的特点&#xff0c;我们可以利用其来很好的操作内…

传输层协议 —— TCP协议(上篇)

目录 1.认识TCP 2.TCP协议段格式 3.可靠性保证的机制 确认应答机制 超时重传机制 连接管理机制 三次握手 四次挥手 1.认识TCP 在网络通信模型中&#xff0c;传输层有两个经典的协议&#xff0c;分别是UDP协议和TCP协议。其中TCP协议全称为传输控制协议&#xff08;Tra…

Java毕业设计 基于SpringBoot和Vue自习室管理系统

Java毕业设计 基于SpringBoot和Vue自习室管理系统 这篇博文将介绍一个基于SpringBoot框架和Vue开发的自习室管理系统&#xff0c;适合用于Java毕业设计。 功能介绍 学生 登录 个人中心 修改密码 系统首页 自习室浏览 学生预约记录 管理员  登录 个人中心 修改密码 系统…

零信任安全架构--持续验证

随着网络安全威胁的不断演变&#xff0c;传统的“信任但验证”安全模式已无法应对现代复杂的攻击。零信任安全架构&#xff08;Zero Trust Architecture, ZTA&#xff09;应运而生&#xff0c;作为一种全新的安全理念&#xff0c;它彻底改变了企业的网络安全防护方式。核心思想…

file的判断和获取,创建和删除

常见成员方法 1.length 返回文件的大小(字节数量) 细节1:这个方法只能获取文件的大小&#xff0c;单位是字节如果单位我们要是M&#xff0c;G&#xff0c;可以不断的除以1024 细节2:这个方法无法获取文件夹的大小如果我们要获取一个文件夹的大小&#xff0c;需要把这个文件夹…

项目管理系统的期限提醒功能如何确保项目按时推进?

在竞争激烈的项目申报垂直领域&#xff0c;时间就是效率&#xff0c;效率关乎成败。每一个申报项目的截止日期都是一道不容错过的关卡&#xff0c;错过即意味着失去了宝贵的机会。为了确保项目能够按时推进&#xff0c;避免因时间管理不当而导致的延误&#xff0c;项目管理系统…

SpringCloud系列之一---搭建高可用的Eureka注册中心

前言 本篇文章主要介绍的是SpringCloud相关知识、微服务架构以及搭建服务注册与发现的服务模块(Eureka)以及Eureka集群。 GitHub源码链接位于文章底部。 什么是SpringCloud Spring Cloud 是一系列框架的有序集合。 它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设…

如何使用ssm实现基于web的物流配送管理系统的设计与实现+vue

TOC ssm646基于web的物流配送管理系统的设计与实现vue 第一章 绪论 1.1研究背景与意义 在科学技术水平还比较低下的时期&#xff0c;企业通常采用人工登记的方式对相关的物流配送信息进行记录&#xff0c;而后对这些信息记录进行管理和控制。这种采用纸质存储信息的管理模式…

平安养老险广东分公司:防范非法集资,守护消费者“钱袋子”

随着经济的不断发展&#xff0c;非法集资犯罪案件频频发生。非法集资案件受害人多&#xff0c;涉及资金广&#xff0c;犯罪手段多元化&#xff0c;涉案财物追缴困难等等。为提升金融消费者风险防范意识&#xff0c;保障其合法经济利益&#xff0c;今天我们一起来学习防范非法集…

利用条件编译解决vivado下verilog代码中ila与仿真的共存问题

vivado自带的仿真工具已经接近Modelsim的功能&#xff0c;且与原生开发环境的紧密结合&#xff0c;对仿真非常方便。 我的习惯是在实现工程中另外建一个仿真工程&#xff0c;保存仿真的testbench文件等&#xff0c;而实现工程中保存实际功能的源码文件。 这样仿真时会存在一个问…

PyQGIS开发 1 环境配置

PyQGIS 开发环境配置 1 安装QGIS QGIS官方下载地址 Windows环境下载对应版本的msi文件双击进行安装。 2 安装 PyCharm PyCharm官方下载地址 PyCharm官方提供专业版&#xff08;收费&#xff09;和社区版&#xff08;免费&#xff09;两个版本&#xff0c;自行选择下载、安…

Oracle EBS form个性化中调用带参数的存储过程或者函数

方式1 通过活动-消息 调用 这个方式的特点是会有一个消息弹框&#xff0c;不需要弹框时可以用方式2 方式2 通过 内置-执行过程 这个地方【变元】中的引用有点复杂&#xff0c;其中参数要用如下格式进行 #三个单引号||项目的表达式 ||${item.BLOCKNAME.FIELDNAME.value}|| #如…

从入门到精通,玩转Python的print函数(探索Python print函数的隐藏功能)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 基础用法参数详解示例📝 高级用法自定义分隔符和结束符输出到文件追加模式📝 覆盖打印与进度条简单覆盖打印动态进度条示例代码⚓️ 相关链接 ⚓️📖 介绍 📖 刚开始学习编程时,我们接触到的第一个方…

运行npm install 时,卡在sill idealTree buildDeps没有反应

一直停留在sill idealTree buildDeps 解决方法 npm config set registry https://registry.npm.taobao.org 配置后用下面命令看是否配置成功 npm config get registry 如果配置还不好使 就执行下行的ssl npm set strict-ssl false 然后执行 npm install 成功执行

线程池的类型和状态

一、线程池的类型 1.通过Executors工具类创建的线程池对象 Executors.newFixedThreadPool(nThreads)&#xff1a;固定线程数目的线程池&#xff1b; 核心线程数和最大线程数一致&#xff1b;只要非核心线程空闲&#xff0c;则立刻被回收&#xff1b;工作队列为无界队列。 Exe…

基于yolov8的DMS驾驶员抽烟打电话喝水吃东西检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的DMS&#xff08;驾驶员监控系统&#xff09;驾驶员抽烟、打电话、喝水、吃东西检测系统是一种利用先进计算机视觉技术的实时监测系统。该系统通过YOLOv8算法&#xff0c;一种在速度和准确性上均表现优异的实时目标检测算法&#xff0c;实现对驾驶员行…

Spring Controller

服务器控制 响应架构 Spring Boot 内集成了 Tomcat 服务器&#xff0c;也可以外接 Tomcat 服务器。通过控制层接收浏览器的 URL 请求进行操作并返回数据。 底层和浏览器的信息交互仍旧由 servlet 完成&#xff0c;服务器整体架构如下&#xff1a; Server&#xff1a; Tomcat…

达梦数据库配置SSL通信加密

相关概念&#xff1a; SSL通过在发送方和接收方之间建立加密通道&#xff0c;确保数据在传输过程中的安全性和完整性。 SSL的关键特点 加密通信&#xff1a;SSL使用对称和非对称加密技术来加密数据&#xff0c;确保数据在传输过程中不被窃听或篡改。 身份验证&#xff1a;通…

若依VUE项目安全kind-of postcss vite漏洞扫描和修复

npm install unplugin-auto-import0.16.7 npm install vite3.2.11 升级vite、unplugin-auto-import npm install 报错New major version of npm available! 8.5.5 -> 10.8.3&#xff0c;使用命令npm install --force npm install --force

源代码防泄密的危害有哪些?担心源代码泄露?教你五种方法彻底阻止源代码泄密问题!

在数字经济蓬勃发展的今天&#xff0c;源代码&#xff0c;这个企业的核心技术资产&#xff0c;其安全性直接关系到企业的竞争力与生存。 一旦源代码泄露&#xff0c;不仅可能导致巨大的经济损失&#xff0c;更可能让企业陷入法律纠纷与声誉危机。 那么&#xff0c;源代码防泄密…