如何使用ssm实现基于bootstrap的课程辅助教学网站的设计与实现+vue

news2024/11/26 17:41:02

@TOC

ssm782基于bootstrap的课程辅助教学网站的设计与实现+vue

第1章 绪论

1.1研究背景与意义

在科学技术水平还比较低下的时期,学校通常采用人工登记的方式对相关的课程信息进行记录,而后对这些信息记录进行管理和控制。这种采用纸质存储信息的管理模式,对于学校管理人员来说,即不方便后期的数据记录查找,以及进行必要的个人信息资料更新与管理操作,也容易在登记过程中出现失误,严重的影响了信息的真实性和可靠性[1]。所以,传统的使用纸质的方式对系统的数据信息进行管理,不利于使用对象查询和处理相关的数据记录,并且也滞后于信息化社会的进步与发展。

现今,科学技术正在飞速的发展,其所迸发的力量是无穷的,并且发挥出了巨大的作用,由此促进了信息化的时代诞生[2]。信息化的管理模式正是信息化时代的产物,通过使用信息化的管理模式,可以解除时空的限制,在任何时间和任何地点,均可对数据资源进行管理,由此可见,信息化的管理模式具有极大的现实意义和使用价值。为了提高学校管理人员的管理质量和水平,避免错误的记录课程信息,确保数据的真实性和可维护性,本人设计了一款基于bootstrap的课程辅助教学网站。

1.2国内外研究现状

在国外,尤其是美国为首的发达国家,对信息化管理模式的研究比较早,这些国家对学校、企业、医院、军事等领域的信息化管理建设非常重视。随后许多国家紧随其后,不断地发展和完善信息化管理模式。上个世纪末,德国等国家,重点研究了将信息化建设应用到相关行业的日常办公工作,英国等国家也加强了对信息化的基础设施的投资[3]。近几十年,随着互联网的发展与普及,使得信息化的管理模式将取代纸质化的管理模式成为了必然趋势。当下,信息化管理模式的相关技术已经非常成熟了[4]。

与国外相比,我国虽然对信息化管理模式的起步比较晚,但是在极短时间内,信息化管理模式发展迅猛,与之相关的技术和工具也由此展露头角,到稳步发展,再到趋于成熟,目前也正在逐渐与发达国家缩小差距[5]。近些年,我国的相关技术人员也研究和设计出了支付宝、微信等应用软件,随后,在较短的时间内,被人们所接受和认可,再到当下,人们的日常生活也离不了这些应用软件的使用,并且正在被不断地推广到全球各地,也逐渐被各个地方各个国家的人们所支持和认可,从这一方面可以看出来,我国的信息化技术的发展,以及专业能力和水平的提高是值得被世界所肯定的[6]。

1.3论文组织结构

本文介绍了设计和实现基于bootstrap的课程辅助教学网站的全过程,从研究系统的研发现状、理论依据,到分析系统的使用需求、可行性,再到设计系统的主要功能和数据表格,最后设计系统的详细功能,测试检验系统的主要功能实现。本文具体的组织结构内容安排如下:

第一章绪论,本章主要介绍了系统研发价值、设计现状、技术依据等内容。通过本章所介绍的相关内容,便于相关用户了解系统的相关发展过程,并且说明系统开发是具有一定的现实依据和使用价值。再根据研究内容的介绍,可以了解本文对系统的哪些内容进行了具体的研究。

第二章相关技术介绍,本章主要介绍了Java语言、JSP技术、MySQL数据库等关键开发技术以及工具。其中,Java语言用于编码设计系统功能,JSP技术用于设计用户使用界面,MySQL数据库用于管理系统后台数据信息。本章通过介绍的相关开发技术工具,为系统的设计和实现提供技术支持。

第三章系统分析,本章主要介绍了对系统进行需求、可行性等方面的分析内容。通过需求分析阶段,规划设计出系统的主要功能需求,便于设计出一款能满足使用需求的系统,为系统验收阶段提供参考依据。在经济、技术、操作等方面分析系统设计的可行性,确认系统的开发是完全具备实现的可能性的。

第四章系统设计,本章主要介绍了系统的总体设计和数据库设计。通过设计总体功能阶段,基本上规划设计出系统的所需要的相关功能,提高系统设计的合理性和规划性,增加系统实现的可能性。本系统主要使用MySQL数据库管理数据资源,通过将现实世界的各个实体转换为设计人员能够理解的概念模型,再将概念模型转化为数据库能够识别和存放的数据表,便于后续设计人员对相关数据记录进行管控和维护。

第五章系统实现,本章主要介绍了系统主要的功能模块实现内容。通过介绍系统的用户界面设计和功能处理步骤,便于使用对象理解如何对系统的主要功能进行操作,并且根据系统给出的相关提示对话框,正确地操作和使用系统的功能按钮,以达到满足自己一定的使用需求的目的。

第六章系统测试,本章主要介绍了系统测试等相关内容。本人主要通过使用功能模块的方式,检验系统的功能设计是否能够达到用户的实际使用要求,根据测试的结果,分析并证明系统的详细功能是否成功实现。如果在测试过程中,遇到错误或问题,则需要反馈给技术人员,并对系统的设计进行改进和完善。

第七章总结与展望,本章主要内容是对本系统的开发设计过程进行总结,并对未来的系统完善工作提出展望。通过总结发现系统实现过程中存在的不足,不断地改进和完善本系统。并且展望未来学习和掌握更加先进的技术,将其运用到本系统的设计中,开发出一款功能更强大、应用范围更广的系统。

第2章 相关技术介绍

2.1 B/S架构

浏览器/服务器结构,可以被简写为B/S结构(Browser/Server结构),是目前最受欢迎的软件开发结构之一[7]。B/S结构主要通过将系统网址发布到浏览器的方式,由用户在浏览器上进行网站访问,即可实现对系统的相关操作,进而满足实际的功能需求。服务器/客户机结构,可以被简写为C/S结构(Client/Server结构),其主要通过运行客户端程序面向系统的使用对象,进而实现系统的功能操作[8]。通过C/S结构开发的客户端应用程序具有较快的处理速度和响应时间,其在运行安全方面和性能稳定方面具有较大的优势。但是,由于用户需要下载客户端程序,并且通过进行正确的安装步骤,才可运行和使用系统,安装步骤繁琐,工作量大,灵活性不好,并且与系统相关的软、硬件均需要定期的升级和维护,所需的成本极高。相比之下,开发人员一般首先考虑使用C/S结构实现系统。

2.2 Java语言

Java语言是一门面向对象的程序设计语言,这一点与C语言不相同,C语言是一种面向过程的程序设计语言[9]。面向过程是指将需要解决的问题分解成一个个具体的解决步骤,然后通过编写功能函数分阶段地实现这些步骤,使用时在对函数进行调用。面向对象最主要的目的不是分阶段地实现每个步骤,而是以对象的方式对需要解决的问题进行分解,再通过描述对象的行为,实现问题的解决。面向对象的编程语言是科技进步的产物,它的出现顺应了社会的发展。面向对象的系统设计,可以继承和封装相关对象及其属性,提高功能代码的使用率,减轻软件开发的设计压力。因此,开发人员通常会选择使用面向对象的编程语言,来解决实际的问题。

Java语言具有跨平台性和可移植性,故而使用Java语言开发的应用程序,可以支持发布在不同的浏览器平台上,并且代码也可以被转移到其他开发环境中执行,便于在更多的其他任务中使用系统,以此可以延长软件的使用周期。Java语言具有较强的健壮性和稳定性,当系统因为输入错误或外界操作不正常而发生故障时,不会导致死机、崩溃现象的出现,而会给用户一定的错误提示信息,帮助用户找到出错的原因,然后在较短的时间内解决问题。语法简单,容易被理解和掌握[10]。除了上述特点外,Java语言还具有使用简单、容易学习、操作便捷等优点,因此许多开发人员会优先考虑使用Java语言对系统进行功能设计。

2.3 MySQL数据库

MySQL数据库是一种轻量级的关系型数据库,因为它占用的内存资源非常少,而且能够在较短的时间内,快速地响应用户需求,所以非常适应于中小型的系统的开发[11]。MySQL数据库代码具有开源性,设计人员可以在经过源代码设计人员的同意下,个性化地选择使用和修改相关代码,以适应所设计系统的开发和运行。MySQL数据库具有免费性,设计人员不需要额外支付数据库软件使用费用,就可以直接使用MySQL数据库,设计系统相关的数据表格,存储和管理一定的数据记录,由此极大地节约了系统的开发成本[12]。除此之外,MySQL数据库还具有定时刷新功能以及较强的灵活性,在一定的时间范围内,对数据进行刷新操作,便于及时更新和存储数据,并且可以将不同的信息记录存放在不同的数据表格中,较为灵活支持关联不同的数据表格。

2.4 JSP技术

Java服务器页面,简写为JSP技术(Java Server Pages技术),其是一种使用较为频繁的动态页面设计技术[13]。由于JSP技术主要是基于Java进行编写的创建动态页面技术,故而其能够支持在不同的Java应用服务器上运行,并且可以在不同的网页上实现数据传递、信息记录、信息共享等功能。JSP技术继承了Java servlet的所有功能,所生成的web网页内容是与平台和协议无关,可以响应多种类型的请求,也能够交互式地生成数据和浏览页面[14]。除此之外,JSP技术具有预编译的特点,也就是首次运行时需要对JSP代码进行编译处理,而后再运行时,就无需再次进行编译,直接使用之前已经编译好的程序即可。JSP技术以在相关的HTML代码嵌入JSP标签的方式,在相应的用户页面中生成相关的JSP文件,对应用程序的相关显示界面进行创建。

第3章 系统分析

3.1系统需求分析

需求分析是以用户的使用需求为基础,将用户的真实期望转化为实际的功能设计过程。本人主要通过问卷调查、现场调研的方式,对系统所需要设计的功能进行需求分析。本系统的使用对象主要分为管理员角色和用户角色,管理员主要的角色职能是管理学校相关的课程信息记录,用户主要的角色功能是查看和保存个人信息记录。需求分析主要包括功能需求、业务需求、性能需求、安全需求等内容。

(1)功能需求

功能需求是指为了能够满足不同使用者的具体使用需求,调研人员据此分析系统实际的功能需求,技术人员再根据需求分析的结果,对系统的相关功能进行详细设计,系统主要的功能需求包括用户管理、课程资源管理、新闻信息管理等模块。

(2)业务需求

业务需求是指为了更快更好地实现对课程信息的交互和管理过程,相关人员将整个课程辅助教学网站的分解为多个便于实现的子功能模块,每个子功能模块的设计就能够实现相应的系统业务流程,系统主要的业务需求包括用户注册、登录、查询、更新等流程。

(3)性能需求

性能需求是指为了保证系统的实现能够满足设计期望,以及避免因为不合格的系统性能而造成的软件或网络问题,而对系统进行组件检查、网络服务、信息存储、处理器运作、响应时间等必要的性能需求分析。如果系统在运行过程中,组件检查正常、网络服务正常、信息存储安全、处理器运作正常、响应时间快,那么可以说本次所设计的系统是具备良好的使用性能的。

(4)安全需求

安全需求是指为了查验所设计的系统是否具有安全性和可靠性,而对系统进行健壮性、可用性、防病毒、数据保密等必要的安全需求分析。由系统授权的合法的用户正常的访问本系统,并且可以选择查看、修改相关信息记录,但是未经授权的非法用户是不能随意修改信息记录。

3.2系统可行性分析

3.2.1经济可行性

对于开发者来说,研发一款系统最主要的目的是能够获取一定的利润。对于使用者来说,设计一款系统,最关键的作用是能够满足一定的使用需求。本系统主要通过使用Java语言编码设计功能,因为Java语言简单易懂,稳定强高,移植性大,所以本系统不受限与浏览器类别,能够运行在不同的浏览器中。本系统使用MySQL数据库设计和存放数据表格资源,MySQL数据库是免费的,占用内存少,语法简单,操作简便,所以在保证运行速度和响应速率的同时,也大大降低了系统开发的成本。本人尽最大可能地降低开发成本,设计出一款能够满足用户实际使用需求的系统,便于提高相关人员的管理质量和工作效率。根据上述分析可知,基于bootstrap的课程辅助教学网站的开发是具备经济可行性的。

3.2.2技术可行性

本系统主要通过使用Java语言编码设计系统功能,JSP技术设计用户使用界面,MySQL数据库管控相关数据记录。由于系统是主要使用Java语言编码实现的,所以本系统能够发布在各种浏览器上,并且代码具有较高的可移植性,便于技术人员将代码运用到更高级别的任务中,增加代码的可重复使用率。JSP技术以Java语言为基础,编写自己的脚本语言,因此其具有可扩充性、跨平台性的特点,可以支持多种网页格式,并且相关代码也有着较强的稳定性和健壮性。MySQL数据库是开源的小型关系型数据库,它所占用的系统内存资源较少,所以具有较快的处理速度,便于在较短的时间内,响应用户的使用需求,所以非常适用于中小型应用系统的开发。根据上述分析可知,开发一款基于bootstrap的课程辅助教学网站是具备技术可行性的。

3.2.3操作可行性

用户在使用本系统时,不需要通过下载、安装客户端程序等复杂的步骤,也不需要掌握一定的计算机专业知识和技能,直接通过在浏览器上访问系统网址,即可根据相关的提示信息,运行和使用本系统,进而满足自己的使用需求。本系统的实现以人性化设计为主要目的,界面设计具有较高的友好性,数据库连接也具有较强的交互性。对于用户来说,只需要懂得Windows应用程序最基本的操作流程步骤,比如当用户双击选择某个功能时,就可以成功地使用该功能模块了,由此实现对本系统所进行地具体功能操作。综合上述分析可知,基于bootstrap的课程辅助教学网站具备操作可行性的。

第4章 系统设计

4.1系统总体设计

本系统的设计是建立在B/S模式的基础之上的,通过Java语言、MySQL数据库等关键技术对系统的相关功能进行实现。系统功能设计完成后,再使用Tomcat服务器将系统发布在浏览器中,使用对象通过使用浏览器访问网址的方式,运行和使用系统。通过需求分析的相关内容,基本上规划设计出系统的主要功能。基于bootstrap的课程辅助教学网站的使用对象主要分为管理员角色和用户角色,主要的功能需求包括用户管理、课程资源管理、新闻信息管理等,系统总体功能设计图如图4-1所示。

基于bootstrap的课程辅助教学网站

用户信息管理

论坛信息管理

课程资源管理

学生成绩管理

基础数据管理

用户信息修改

用户信息新增

基础数据添加

基础数据删除

基础数据修改

学生成绩添加

学生成绩修改

学生成绩删除

论坛信息添加

论坛信息删改

论坛信息删除

课程资源添加

课程资源修改

课程资源删除

新闻信息管理

新闻信息修改

新闻信息删除

新闻信息添加

图4-1 系统总体功能设计图

4.2数据库设计

4.2.1概念设计

MySQL数据库是免费的面向使用对象,其源代码对外也是公开发布的,也就是说设计人员在经过源代码设计人员的同意之后,就可以根据自身的一定需求,对相关代码进行使用和修改,由此极大的节约了软件开发成本[15]。而且,MySQL数据库占用极少的内存资源,系统与用户之间的交互性强,响应速度和运行速度也比较快,非常适用于中小型系统的开发和设计。从一定意义上说,MySQL数据库的使用价值是非常高的,其相关的语法语义也比较容易理解和掌握,因此本人使用MySQL数据库完成对相关的系统数据的存储和管控。

概念设计阶段主要目的是将真实世界的工作任务转化为抽象世界的概念模型,通过设计实体-联系图(E-R图)的方式,来表示实际生活中的工作功能中的实体和属性[16]。这样一来,在课程辅助教学网站中,就可以对每一个工作流程进行设计,进而实现对相关的用户信息传递和共享,并由此构建出与系统有关的实体及其属性。本阶段的设计内容是将现实世界中用户对系统的相关功能需求,描述成为便于数据库设计人员理解的概念模型。各实体属性图设计如图4-2、图4-3、图4-4、图4-5、图4-6、图4-7、图4-8、图4-9、图4-10所示,系统总体E-R图如下图4-11所示。

图4-2管理员信息实体属性图

图4-3教师信息实体属性图

图4-4学生信息实体属性图

图4-5字典信息实体属性图

图4-6 课程资源信息实体属性图

图4-7教案信息实体属性图

图4-8学生成绩信息实体属性图

图4-9论坛信息实体属性图

图4-10 新闻信息实体属性图

图4-11系统总体E-R图

4.2.2逻辑设计

逻辑设计阶段主要的目的是将概念设计中已经构建好的概念数据模型,转变成数据库能够识别和存储的二维数据表格的形式[17]。本阶段的设计内容是数据库设计人员将理解好的概念模型,描述成为MySQL数据库能够识别的数据表格。本阶段具体的实现方式是将上一阶段设计的E-R图转变成方便数据库进行存储和管理的数据表格。

表4-1 管理员信息表

序号列名数据类型说明允许空
1idInt编号
2usernameString用户名
3passwordString密码
4roleString角色
5addtimeDate新增时间

表4-2 教师信息表

序号列名数据类型说明允许空
1idInt编号
2jiaoshi_uuid_numberString工号
3usernameString账户
4passwordString密码
5jiaoshi_nameString教师姓名
6jiaoshi_photoString头像
7sex_typesInteger性别
8jiaoshi_phoneString联系方式
9jiaoshi_emailString邮箱
10jiaoshi_deleteInteger假删
11create_timeDate创建时间

表4-3 学生信息表

序号列名数据类型说明允许空
1idInt编号
2

yonghu_uuid_

number

String学号
3usernameString账户
4passwordString密码
5yonghu_nameString学生姓名
6yonghu_photoString头像
7sex_typesInteger性别
8yonghu_phoneString联系方式
9yonghu_id_numberString学生身份证号
10yonghu_emailString邮箱
11yonghu_deleteInteger假删
12create_timeDate创建时间

表4-4 字典信息表

序号列名数据类型说明允许空
1idInt编号
2dic_codeString字段
3dic_nameString字段名
4code_indexInteger编码
5index_nameString编码名字
6super_idInteger父字段编号
7beizhuString备注
8create_timeDate创建时间

表4-5 课程资源信息表

序号列名数据类型说明允许空
1idInt编号
2kechengziyuan_nameString课程名称
3kechengziyuan_photoString课程封面
4kechengziyuan_videoString课程视频
5kechengziyuan_fileString课程文件
6kechengziyuan_typesInteger课程类型
7kechengziyuan_contentString课程详情
8create_timeDate创建时间

表4-6 教案信息表

序号列名数据类型说明允许空
1idInt编号
2fabujiaoan_nameString教案名称
3fabujiaoan_photoString教案图片
4fabujiaoan_typesInteger教案类型
5fabujiaoan_contentString教案详情
6create_timeDate创建时间

表4-7 学生成绩信息表

序号列名数据类型说明允许空
1idInt编号
2yonghu_idInteger学生
3jiaoshi_idInteger教师
4chengjiInteger成绩
5xuekeInteger学科
6xueshengchengji_contentString成绩详情
7create_timeDate创建时间

表4-8 论坛信息表

序号列名数据类型说明允许空
1idInt编号
2forum_nameString帖子标题
3yonghu_idInteger学生
4jiaoshi_idInteger教师
5users_idInteger管理员
6forum_contentString发布内容
7super_idsInteger父编号
8forum_state_typesInteger帖子状态
9insert_timeDate发帖时间
10update_timeDate修改时间
11create_timeDate创建时间

表4-9 新闻信息表

序号列名数据类型说明允许空
1idInt编号
2news_nameString新闻标题
3news_typesInteger新闻类型
4news_photoString新闻图片
5insert_timeDate新闻时间
6news_contentString新闻详情
7create_timeDate创建时间

第5章 系统功能实现

5.1 个人中心

个人中心模块设计的主要目的是方便用户对密码等个人信息进行管理,用户可以根据自己的实际需求,选择每隔一段时间,更新个人账户的用户名和密码,修改密码界面设计如图5-1所示,个人信息界面如图5-2所示。

图5-1修改密码界面

图5-2个人信息界面

5.2管理员管理

管理员管理模块设计的主要目的是方便管理用户对相关的管理员信息进行管理,管理用户可以选择查看管理员的用户名,修改管理员的密码,管理员管理界面设计如图5-3所示。

图5-3管理员管理界面

5.3基础数据管理

基础数据管理模块设计的主要目的是方便管理用户对相关的教案类型、课程类型、新闻类型信息进行管理,管理用户可以选择查看教案类型、课程类型、新闻类型信息的详细资料,修改教案类型、课程类型、新闻类型的名称信息,删除已经失效的教案类型、课程类型、新闻类型信息记录等操作,教案类型管理界面设计如图5-4所示,课程类型管理界面设计如图5-5所示,新闻类型管理界面设计如图5-6所示。

图5-4教案类型管理界面

图5-5课程类型管理界面

图5-6新闻类型管理界面

5.4教案信息管理

教案信息管理模块设计的主要目的是方便管理用户对相关的教案信息进行管理,管理用户可以选择查看教案的详细内容,修改教案名称,删除失效的教案信息记录,教案信息管理界面设计如图5-7所示。

图5-7教案信息管理界面

5.5论坛管理

论坛管理模块设计的主要目的是方便管理用户对相关的论坛信息进行管理,管理用户可以选择查看论坛的详细内容,修改帖子的发帖时间,删除失效的论坛信息记录,论坛管理界面设计如图5-8所示。

图5-8论坛管理界面

5.6教师管理

教师管理模块设计的主要目的是方便管理用户对相关的教师用户信息进行管理,管理用户可以选择查看教师用户的联系电话,修改教师用户的真实姓名,教师管理界面设计如图5-9所示。

图5-9教师管理界面

5.7课程资源管理

课程资源管理模块设计的主要目的是方便管理用户对相关的课程资源信息进行管理,管理用户可以选择查看课程资源的详细内容,修改课程资源的课程文件,删除失效的课程资源信息记录,课程资源管理界面设计如图5-10所示。

图5-10课程资源管理界面

5.8新闻管理

新闻管理模块设计的主要目的是方便管理用户对相关的新闻信息进行管理,管理用户可以选择查看新闻的详细内容,修改新闻图片,删除失效的新闻信息记录,新闻管理界面设计如图5-11所示。

图5-11新闻管理界面

5.9学生成绩管理

学生成绩管理模块设计的主要目的是方便管理用户对相关的学生成绩信息进行管理,管理用户可以选择查看学生成绩的详细内容,修改学生成绩,删除失效的学生成绩信息记录,学生成绩管理界面设计如图5-12所示。

图5-12学生成绩管理界面

5.10学生管理

学生管理模块设计的主要目的是方便管理用户对相关的学生用户信息进行管理,管理用户可以选择查看学生用户的联系电话,修改学生用户的真实姓名,学生管理界面设计如图5-13所示。

图5-13学生管理界面

5.11轮播图管理

轮播图管理模块设计的主要目的是方便管理用户对相关的轮播图信息进行管理,管理用户可以选择查看轮播图的详细内容,修改轮播图值,删除失效的轮播图信息记录,轮播图管理界面设计如图5-14所示。

图5-14轮播图管理界面

ForumServiceImpl.java
package com.service.impl;

import com.utils.StringUtil;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.*;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import com.utils.PageUtils;
import com.utils.Query;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import com.dao.ForumDao;
import com.entity.ForumEntity;
import com.service.ForumService;
import com.entity.view.ForumView;

/**
 * 论坛 服务实现类
 */
@Service("forumService")
@Transactional
public class ForumServiceImpl extends ServiceImpl<ForumDao, ForumEntity> implements ForumService {

    @Override
    public PageUtils queryPage(Map<String,Object> params) {
        if(params != null && (params.get("limit") == null || params.get("page") == null)){
            params.put("page","1");
            params.put("limit","10");
        }
        Page<ForumView> page =new Query<ForumView>(params).getPage();
        page.setRecords(baseMapper.selectListView(page,params));
        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;
	}
}

PoiUtil.java
package com.utils;

import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;

import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * 文件导入到处
 */
public class PoiUtil {
    /**
     * 导入
     *
     * @param url
     * @return
     * @throws Exception
     */
    public static List<List<String>> poiImport(String url) throws Exception {
        List<List<String>> list = new ArrayList<>();
        // 创建Excel 读取文件内容
        HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(new File(url)));
        /**
         * 第一种方式读取Sheet页
         */
//      HSSFSheet sheet = workbook.getSheet("Sheet0");
        /**
         * 第二种方式读取Sheet页
         */
        HSSFSheet sheet = workbook.getSheetAt(0);//获取工作表
        for (int i = 0; i < sheet.getLastRowNum()+1; i++) {
            HSSFRow row = sheet.getRow(i);//获取行
            List<String> rowlist = new ArrayList<>();//行数据
            for (int j = 0; j < row.getLastCellNum(); j++) {
                HSSFCell cell = row.getCell(j);
                cell.setCellType(Cell.CELL_TYPE_STRING);
                String value = cell.getStringCellValue();
                rowlist.add(value);//行中数据添加到行中
            }
            list.add(rowlist);//将行数据添加到list中
        }
        return list;
    }






    // 导出
    public static void poiExport(List<List<String>> list, String url) throws Exception {
        //创建Excel工作薄
        HSSFWorkbook workbook = new HSSFWorkbook();
        //创建一个工作表shheet
        HSSFSheet sheet = workbook.createSheet();
        for (int i = 0; i < list.size(); i++) {
            HSSFRow row = sheet.createRow(i);
            List<String> dataList = list.get(i);
            for (int j = 0; j < dataList.size(); j++) {
                HSSFCell cell = row.createCell(j);
                cell.setCellValue(dataList.get(j));
            }

        }
        FileOutputStream stream = FileUtils.openOutputStream(new File(url));
        workbook.write(stream);
        stream.close();
    }


    public static void main(String[] args) {
        try {
            //导入
            List<List<String>> lists = PoiUtil.poiImport("C:/Users/Administrator/Desktop/工作1.xls");
            System.out.println();


            //导出

            PoiUtil.poiExport(lists, "C:/Users/Administrator/Desktop/工作1.xls");

//
//            List<List<String>> list = new ArrayList<>();
//            ArrayList<String> dataList = new ArrayList<>();
//            dataList.add("标题1");
//            dataList.add("标题2");
//            dataList.add("标题3");
//            list.add(dataList);
//            // 追加数据
//            for (int i = 1; i < 10; i++) {// 这里的int 起始是1 也就是第二行开始
//                ArrayList<String> dataList111 = new ArrayList<>();
//                dataList111.add("内容" + i);
//                dataList111.add("内容1111111121222222222333333333377777777411111111477777777" + i);
//                dataList111.add("内容" + i);
//                list.add(dataList111);
//            }
//            PoiUtil.poiExport(list, "C:/Users/Administrator/Desktop/工作1.xls");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

声明

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

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

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

相关文章

Linux基础项目开发1:量产工具——显示系统

文章目录 数据结构抽象使用场景disp_mannger.h Framebuffer编程Framebuffer.c 显示管理最终disp_manager.hdisp_manager.c 测试单元测试代码 数据结构抽象 我们添加的显示管理器中有Framebuffer和web输出&#xff0c;对于两个不同的设别我们需要抽象出同一个结构体类型&#x…

市面上8款AI论文大纲一键生成文献的软件推荐

在当前的学术研究和写作领域&#xff0c;AI论文大纲自动生成软件已经成为提高写作效率和质量的重要工具。这些工具不仅能够帮助研究人员快速生成论文草稿&#xff0c;还能进行内容优化、查重和排版等操作。本文将分享市面上8款AI论文大纲一键生成文献的软件&#xff0c;并特别推…

YOLOv11改进 | 卷积模块 | 分布移位卷积DSConv替换Conv

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 本文介绍DSConv&#xff0c; DSConv 将…

算法1:双指针思想的运用(2)--C++

1.盛水最多的容器 题目链接&#xff1a;11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 题目解析&#xff1a; 在解析题目时&#xff0c;我们可以把最直接的方法先列举出来&#xff0c;然后再根据相应的算法原理&#xff0c;来进行优化 思路一&#xff1a;暴力…

Docker 启动 Neo4j:详细配置指南和浏览器访问

Docker 启动 Neo4j&#xff1a;详细配置指南和浏览器访问 文章目录 Docker 启动 Neo4j&#xff1a;详细配置指南和浏览器访问一 Neo4j compose 得 yml 配置二 配置描述三 浏览器访问 这篇文章详细介绍了如何使用 Docker Compose 启动 Neo4j 数据库&#xff0c;包括 docker-com…

菜鸟笔记003 获取目标对象的颜色值

在illustrator中,我们时常要获取一些对象的颜色值,但是一时不知道如何获取,下面我就来讲讲如何获取目标对象的颜色值。 下面以选择对象的最上层对象为例,我们通过查阅javascript编程手册,可以很容易获取下面代码: var sel=app.activeDocument.selection[0]; //获取最上…

【S32K3 RTD MCAL 篇1】 K344 KEY 控制 EMIOS PWM

【S32K3 RTD MCAL 篇1】 K344 KEY 控制 EMIOS PWM 一&#xff0c;文档简介二&#xff0c; 功能实现2.1 软硬件平台2.2 软件控制流程2.3 资源分配概览2.4 EB 配置2.4.1 Dio module2.4.2 Icu module2.4.4 Mcu module2.4.5 Platform module2.4.6 Port module2.4.7 Pwm module 2.5 …

SCTF2024(复现)

SCTF2024&#xff08;复现&#xff09; web SycServer2.0 开题&#xff1a; 需要登录&#xff0c;进行目录扫描&#xff0c;得到/config&#xff0c;/hello&#xff0c;/robots.txt 等&#xff0c;访问/hello 显示需要 token&#xff0c;查看源码发现存在 sqlwaf 可以通过抓…

基于ucontext库实现协程类

文章目录 前言协程基础知识协程上下文对称协程与⾮对称协程有栈协程与⽆栈协程 ucontext库接口熟悉一个简单的函数切换自动调用 协程类的实现接口全局变量线程局部变量malloc封装协程切换构造函数协程执行的方法 测试协程切换手动切换复用 前言 协程&#xff08;Coroutine&…

Maven安装使用

说明&#xff1a;Maven是Apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。一般来说&#xff0c;它帮助我们管理依赖、构建项目。本文介绍在Windows系统下安装Maven。 下载&安装&验证 下载 首先&#xff0c;在Maven官网&#xff08;https:…

【第十五周】PyTorch深度学习实践2

目录 摘要Abstract1.多分类问题1.1.Softmax1.2.维度问题1.3.NLLLoss v.s. CrossEntropy1.4.代码实践1.4.1.导入相应的包1.4.2.准备数据集1.4.3.模型设计1.4.4.构造损失和优化器1.4.5.模型训练 2.卷积神经网络基础篇2.1.代码实践2.1.1.导入相应的包&#xff1a;2.1.2.准备数据集…

我谈巴特沃斯滤波器

目录 写在前面的内容我谈巴特沃斯滤波器巴特沃斯滤波器的幅频响应频率变换巴特沃斯各种滤波器例子 写在前面的内容 先看看冈萨雷斯对巴特沃斯滤波器的介绍。 低通 高通 带阻 带通 第一个问题&#xff0c;截止频率处的增益。 0.5的增益是不是陡度小了&#xff1f;巴特沃…

ai智能论文生成系统有用吗?分享5款ai文献综述自动生成器

近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术在学术写作领域的应用越来越广泛&#xff0c;尤其是在文献综述的自动生成方面。AI智能论文生成系统通过深度学习和自然语言处理技术&#xff0c;能够帮助研究人员快速生成高质量的文献综述&#xff0c;从而提高写作效…

深度扩展AntSK,让.NET Aspire助力您的AI项目

引言 在现今飞速发展的技术世界中&#xff0c;引用最新的工具和框架来提升项目的性能和可管理性至关重要。作为一名开发者&#xff0c;我最近在自己的AI知识库项目AntSK中集成了.NET Aspire&#xff0c;这为我的项目注入了新的活力。如果你还不清楚什么是.NET Aspire&#xff0…

[单master节点k8s部署]32.ceph分布式存储(三)

基于ceph rbd生成pv 在集群中认证ceph 用下面代码生成ceph的secret .创建 ceph 的 secret&#xff0c;在 k8s 的控制节点操作&#xff1a; 回到 ceph 管理节点创建 pool 池&#xff1a; [rootmaster1-admin ~]# ceph osd pool create k8stest 56 pool k8stest created [rootm…

BERT论文解读及情感分类实战(论文复现)

BERT论文解读及情感分类实战&#xff08;论文复现&#xff09; 本文所涉及所有资源均在传知代码平台可获取 文章目录 BERT论文解读及情感分类实战&#xff08;论文复现&#xff09;简介BERT文章主要贡献BERT模型架构技术细节任务1 Masked LM&#xff08;MLM&#xff09;任务2 N…

【web安全】——常见框架漏洞

1.ThinkPHP框架漏洞 thinkphp是一个国内轻量级的开发框架&#xff0c;采用phpapache&#xff0c;在更新迭代中&#xff0c;thinkphp也经常爆出各种漏洞&#xff0c;thinkphp一般有thinkphp2、thinkphp3、thinkphp5、thinkphp6版本&#xff0c;前两个版本已经停止更新&#xff…

【详细教程】如何使用YOLOv11进行图像与视频的目标检测

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

m4a怎么转换成mp3?音频转换MP3只需要这6个小工具!

m4a怎么转换成mp3&#xff1f;M4A和MP3是两种常见的音频格式&#xff0c;M4A通常使用AAC&#xff08;高级音频编码&#xff09;进行压缩&#xff0c;提供更高的音质和更小的文件体积&#xff0c;特别适合在Apple设备上使用。而MP3则以其高压缩比和广泛的兼容性著称&#xff0c;…

TM1618数码管控制芯片使用共阳极数码管过程中的问题和解决办法

控制芯片的基本了解 相比于不用控制芯片的电路&#xff1a;这里带2根电源线和3个信号线&#xff0c;共使用了5根线&#xff0c;但可以控制4个8段数码管显示。若是电路直接控制4个8段数码管需要84113个接口&#xff0c;这对于MCU的珍贵引脚简直是浪费。 这里不会出现余晖效应也…