news 2026/9/2 21:51:21

【关注可白嫖源码】--课程设计--毕业设计--基于Java的数字图书馆系统设计与实现[编号:project81905](案件分析)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【关注可白嫖源码】--课程设计--毕业设计--基于Java的数字图书馆系统设计与实现[编号:project81905](案件分析)

摘 要

数字阅读方式的普及给传统的图书馆服务模式带来了冲击,用户的获取知识的渠道也由原来的实体空间转变为网络平台。纸质图书的借阅受制于地理位置和开馆时间,馆藏资源的利用率不能得到充分的发挥。创建一个以Java为基础的数字图书馆系统,把图书资源进行数字化处理,并且可以统一管理,用户可以通过浏览器来进行检索、借阅、阅读等一系列的操作。系统使用Spring Boot框架搭建后端服务,用Vue.js创建前端交互界面,用MySQL数据库保存数据。从功能上来说,面向普通用户设置文章资讯浏览、图书信息查询、个人借阅和归还记录查看等功能模块,面向管理员设置用户管理、图书分类维护、图书信息管理、借阅与归还记录审核、采购与盘点记录管理、文章资讯发布等功能模块。系统对图书资源的线上流转以及全过程跟踪进行了实现,把借阅状态、库存数量、用户行为等数据都存入到关系型数据库当中。测试结果说明各个功能模块可以正常工作,数据交互正确,可以满足小型图书馆或者社区图书室日常数字化管理的要求。该系统对Java技术栈在Web信息管理类系统中的应用进行了验证,给同类系统的设计提供可以复用的设计参考。

关键词:数字图书馆;Spring Boot;Vue.js;图书借阅管理;MySQL

Abstract

With the rise in popularity of digital Reading, traditional library Service Models Have also changed, Users' Access To Knowledge Has shifted Online. Borrowing paper books is constrained by the spatial location and operation time; thus, more collections cannot be effectively utilised overall. Build a digital library system using Java, which will enable users to search for, borrow from the library's collections, and access them via a web page. Using Spring Boot as a backend service development platform, building Vue.js based on the front-end interactivity interface; MySQL is used to save and manage data. In terms of functional Design, It offers a module for general Users to browse articles' information or query books' details; For administrators, There is also an User Management function that involves adding, modifying, deleting users, as well as managing book categories, updating book Information, reviewing Borrowing-and-return records, Procuring and Inventory record maintenance, and publishing articles. The system realises the online circulation and all-round traceability of books, unifies the storage of borrow status, inventory quantity, users' behaviour data and other information in a relational database. Based on tests, all components can function smoothly in real applications to meet the digitized management requirements for small libraries or community book rooms daily. This System verifies the feasibility of applying the Java Technology Stack to build Web Information Management Systems, and also serves as an example Reference for other Developers' Developments.

Keywords: Digital Library; Spring Boot; Vue.js; Book Borrowing Management; MySQL

第一章 绪论

1.1 研究背景与意义

1.1.1 研究背景

传统的图书馆服务模式正处在被数字化浪潮所冲击的状态当中,纸质文献的借阅过程被物理空间和人工操作所限制,馆藏资源的查准率以及获取速度不能满足用户即时性的要求[1]。信息技术的发展使阅读的载体由纸质书本向电子终端转变,读者希望不受时间和地点的限制,随时可以获取图书资源。因此图书馆必须重新塑造自身服务形态,把实体藏书和数字资源整合到同一个平台上去,让书目检索、在线借阅、状态追踪等各方面的功能可以自动执行。目前大部分基层图书馆仍然采用人工登记的方式进行借还业务的管理,既耗费人力又容易造成图书错架、库存信息滞后等现象的发生[2]。开发一个基于Java的数字图书馆系统,把图书分类、读者档案、借阅记录等数据放到数据库里统一管理,用前端界面给用户提供标准化的操作入口,使资源流转的状态一目了然。该转变不单是技术工具的更新,更是服务理念的更新,图书馆由原来的被动等待读者上门变为现在的主动推送知识服务[3]。数字图书馆系统建设成为文化机构信息化改造的基础工作,它有三个方面的必要性,即提高资源利用率、降低成本、改善用户体验,为后面智慧化服务的拓展打下数据基础。

1.1.2 研究意义

该系统把图书借阅的全过程由人工登记转变为线上自动处理,读者提交借阅申请之后系统立刻对库存状况加以检验并作出记载,管理员在后台实施批量审核取代逐本扫码的做法,图书上架以及盘点数据经由表单录入直接关联到库存总数上。这样一种运作方式把事务处理的时间缩短,借还操作所产生的数据及时更新到数据库中,防止手工记账出现的漏登、错填情况。图书馆属于知识传递的节点,此系统使它能凭借标准接口同更多的数字资源平台达成对接,图书分类及编目数据采用通用格式,有利于今后的跨馆共享以及统计分析模块的接入。系统设计考虑不同大小的机构使用,小型社区图书室可以迅速地完成主要的功能,不需要专门的技术人员来维持。读者端界面简洁,检索和借阅操作路径清楚,中老年人经过简单的引导就可以独立使用。该系统给同类信息管理系统开发提供分层架构范本,业务逻辑和数据访问分离的思想可以迁移到设备管理、档案登记等其它场景。

1.2 国内外研究现状

1.2.1 国内研究现状

国内有关数字图书馆系统的研究开始于文献资源的数字化存储,早期主要是解决纸质资料的电子化转换和书目数据的建立问题。随着Web技术的发展,研究方向也由原来的读者服务功能的在线化实现,即书目检索、借阅预约、个人借阅历史查询等模块的集成。有学者关注数字资源的异构整合,把不同的电子图书、期刊论文放进同一个平台里开展跨库检索。近些年来研究重点向个性化服务发展,经由剖析读者借阅行为改良推荐算法,加强资源推送的精确程度。技术选型上Java企业级框架占主导地位,分层架构和关系型数据库的结合成了建立稳定业务系统的主要方案。

陈敏仪在2023年详细论述了数字图书馆系统模块化设计思想,把系统分成读者管理、图书管理、借阅管理、系统设置这四个相对独立的功能模块,用Java Web技术实现各个模块之间的低耦合交互[4]。该种设计方法给本系统架构分层提供直接的启示,业务逻辑和数据访问的分离使得后续的功能扩展更加灵活。2022年李火苗设计出基于用户行为挖掘的个性化服务系统,通过读者检索关键词、借阅频次等数据来建立兴趣模型,用机器学习算法加入到数字图书馆当中[5]。本研究认为,在借阅记录模块中应该收集用户的使用行为数据,为之后增加推荐功能留有数据接口。徐杰铭2022年硕士论文中主要研究图书错位查询问题,采用RFID标签和定位算法来完成馆藏图书精确查找工作,把物联网技术同数字图书馆系统结合起来[6]。该思路对于系统中盘点记录模块的设计有借鉴意义,用记录图书当前位置和库存数量对应关系的方式提高馆藏清查效率。张洺源于2024年研究了云计算技术在数字图书馆存储系统中的应用,提出将用户访问频率高的电子资源迁移到云端,减少本地服务器的存储负担[7]。由此启发本系统用OSS对象存储来保存图书封面图片,在图书信息管理系统中减少了数据库直接存储大文件造成的性能开销。金光龙、张光照(2024)设计出一套专门用于图书馆数字资源用户信息行为采集系统的前端埋点方式来获取读者在检索界面的点击流数据,用以作为界面布局改进的量化依据[8]。该研究认为本系统对于文章资讯查看模块应该统计出用户对于各种类别的资讯的点击次数,以此来决定资讯的显示优先级。

以上研究涉及数字图书馆系统各个技术方面,从基本的借阅管理、个性化的推荐、数据的采集与分析等各方面都有所涉及,形成了一条比较完整的道路。本系统功能设计吸取已有成果,把图书分类、借阅记录、采购盘点等主要业务模块集中到一起实现,保留用户行为数据的采集字段,为之后的扩展分析功能打下基础。

1.2.2 国外研究现状

国外数字图书馆领域研究较早进入实用化阶段,技术发展由早期的书目数据库建设转变为服务智能化、资源共享网络创建。欧美国家的高校图书馆一般会用微服务架构对现有的系统进行重构,把检索、借阅、推荐等功能拆分成独立部署的服务单元来提高系统的维护效率和扩展性[10]。研究者对数字资源的长期保存和互操作性问题进行研究,用标准化元数据方案来实现各个机构数据库之间数据的交换。人工智能技术被广泛地应用到了用户的行动追踪、个性化的推送之上,部分系统甚至能够凭借自然语言处理的智能问答功能来完成。

Liu Y于2024年设计出一套基于Vue 3和Spring Boot的校园二手教材交易平台,把商品发布、订单管理、用户评价等模块前后端分离实现,并且使用RESTful接口进行数据交互[9]。该研究证明了Spring Boot和Vue.js的结合可以稳定地应用于信息管理类系统,为本系统的技术选择提供实践上的参考。2024年Borrego D等人的DPGraphJ Java包发布,将动态规划算法封装成可调用的类库,降低了开发人员实现复杂算法的技术门槛。尽管该工具包主要用作算法研究,但是它的模块化封装思想提示本系统业务逻辑层应该保持独立,便于将来加入新的功能模块。Kowalska L A与Kadziński M在2024年开发了名为robustDEA的Java库,专注于效率分析算法的实现与调用[11]。该库的设计体现出了Java生态中专业工具包的开发模式,本系统在数据统计模块可以借鉴其接口设计思想,把借阅量排行、热门图书统计等功能做成独立的服务。Virtriana R等人于2024年对基于地形变化的土地利用分类进行了研究,虽然属于地理信息领域,但是其数据分类和分层存储的方法可以给图书分类管理模块提供一定的借鉴[12]。Haro D L G C等人于2024年发布JDLL库,用Java生物信息学平台实现了深度学习模型的运行,显示了Java技术与前沿AI框架的结合能力[13]。该结果说明Java技术在智能化方面还有继续发展的空间,本系统以后可以将推荐算法模块加入到相关工具包中使用。

国外的研究具有明显的以技术为驱动的特征,微服务架构和人工智能的融合是主要的发展方向。本系统在保证基础借阅管理功能稳定的基础上,采用前后端分离模式以及RESTful接口的设计方式,为之后接入推荐算法或者升级为微服务架构提供技术上的可行性。系统对于图书分类以及借阅记录模块给予了用户行为方面的预留空间,依照国外研究中对于数据价值的认识,让基本业务系统拥有智能发展所需的数据根基。

1.3 主要研究内容

本文研究工作主要针对设计并实现一个以Java为开发语言的数字图书馆系统,该系统对普通读者和管理员两种用户类型开放,可以完成从图书资源的在线管理到借阅服务全部功能。研究工作从需求分析阶段开始,整理出读者端资讯浏览、图书检索、借阅与归还记录查询等交互需求,明确管理员端对用户信息、图书分类、图书数据、借还流程、采购与盘点业务、文章资讯的统一管控要求。系统设计阶段采用前后端分离架构,后端用Spring Boot框架组织业务逻辑和数据访问接口,前端用Vue.js创建单页应用界面,数据库选择MySQL存储用户档案、图书信息、借还记录、采购与盘点数据等主要业务表。实现阶段主要对各个功能模块进行代码实现,将图书分类维护、图书信息增删改查、借阅与归还流程状态跟踪、采购与盘点记录台账管理、文章资讯发布展示等各个功能封装成可以独立调用的服务单元。系统测试环节按照核心业务流程来创建测试用例,检查数据交互是否正确、功能逻辑是否完整。研究边界限定在中小型图书馆或者社区图书室日常管理场景,不包含跨馆资源共享、海量数据并发处理和复杂的推荐算法。预期交付成果为一个可以运行的数字图书馆Web系统、数据库设计文档和系统测试报告,技术路线采用成熟的稳定Java企业级开发栈,保证系统具有较好的可维护性和扩展性。


第五章 系统实现

5.1 读者用户角色功能实现

5.1.1 文章资讯查看

文章资讯查看功能就是对图书馆发布的新闻公告、行业动态等进行集中展示。读者进入系统首页之后,前端会向后端发送请求来获取资讯列表,后端返回的数据会按照发布时间倒序排列。列表项展示文章标题、封面图片和发布时间,读者点击任意一条目跳转到详情页。详情页加载的时候,又向后端请求该篇文章完整的正文内容、来源出处和累计阅读次数。在阅读的过程中读者可以对文章进行点赞,点赞的状态会实时显示在按钮上,并且还会显示当前的点赞数。文章资讯查看界面如图5-1所示。

图5-1文章资讯查看界面

核心代码如下所示:

Map<String, String> query = service.readQuery(request);

Map<String, String> config = service.readConfig(request);

List resultList = service.selectBaseList(service.select(query, config));

if (resultList.size() > 0) {

JSONObject jsonObject = new JSONObject();

jsonObject.put("obj", resultList.get(0));

return success(jsonObject);

}

5.1.2 图书信息查看

图图书信息查看功能给读者赋予了图书资源检索和浏览的途径。页面顶部添加分类标签栏,点击不同的分类会向后端发起对应类别的图书列表请求。用卡片的形式来表现图书的封面、名称、作者以及目前的库存状况。右侧有搜索框可以按照图书名称进行模糊查询,输入关键词后立即发出请求并刷新列表。点击任意一个图书卡片跳转到详情页,详情页展示该图书的所有信息,即出版社、出版年份、内容简介、收藏量、点赞量。详情页底部给出同类其他图书的推荐。图书信息查看界面如图5-2所示。

图5-2图书信息查看界面

核心代码如下所示:

Map<String, String> mapbook_number = new HashMap<>();

mapbook_number.put("book_number", String.valueOf(paramMap.get("book_number")));

List listbook_number = service.selectBaseList(service.select(mapbook_number, new HashMap<>()));

if (listbook_number.size() > 0) {

return error(30000, "字段图书编号内容不能重复");

}

book_information.setBook_name(paramMap.get("book_name") == null ? null : String.valueOf(paramMap.get("book_name")));

5.1.3 借阅记录查看

借阅记录查看功能将当前登录的读者所有的借阅历史集中起来。页面用表格的形式列出每笔借阅的图书名称、借阅日期、应还天数和目前的状态。状态列分为待审核、借阅中、已归还三类,待审核记录带有审核中标签,借阅中记录有剩余天数。超期的借阅记录用红色字体显示逾期天数。表格可以按照时间范围进行筛选,顶部有一个起止日期的选取器,选择之后表格的数据就会被重新请求和渲染。单击每条记录右上角的详情按钮可以查看本次借阅全部信息。借阅记录查看界面如图5-3所示。

图5-3借阅记录查看界面

核心代码如下所示:

Map<String, Object> paramMap = service.readBody(request.getReader());

paramMap.entrySet().removeIf(entry -> {

Object value = entry.getValue();

return value instanceof String && ((String) value).isEmpty();

});

BorrowingRecord borrowing_record = new BorrowingRecord();

borrowing_record.setBook_number(paramMap.get("book_number") == null ? null : String.valueOf(paramMap.get("book_number")));

borrowing_record.setBook_name(paramMap.get("book_name") == null ? null : String.valueOf(paramMap.get("book_name")));

5.1.4 归还记录查看

归还记录查看功能可以显示读者所有的完成的图书归还操作。页面布局同借阅记录一样,表格的列有图书名称、借阅日期、归还日期、借阅数量。数据来源是后端归还记录表,每一个记录都是一个完整的借还循环。表格默认是按照归还日期倒序排列,最新归还的记录在最上面。顶部为图书名称搜索框,输入图书名称即可得到所有的归还记录。读者可以利用此模块核对历史借还情况,查看有无漏记或者错误的记录。点击详情按钮来显示该次归还操作的全部信息。归还记录查看界面如图5-4所示。

图5-4归还记录查看界面

核心代码如下所示:

Map<String, Object> paramMap = service.readBody(request.getReader());

paramMap.entrySet().removeIf(entry -> {

Object value = entry.getValue();

return value instanceof String && ((String) value).isEmpty();

});

ReturnRecords return_records = new ReturnRecords();

return_records.setBook_number(paramMap.get("book_number") == null ? null : String.valueOf(paramMap.get("book_number")));

return_records.setBook_name(paramMap.get("book_name") == null ? null : String.valueOf(paramMap.get("book_name")));

5.2 系统管理员角色功能实现

5.2.1 管理员管理

管理员管理功能主要是对可以登录后台的系统账号进行管理。显示当前所有的管理员信息列表,包含用户名、昵称、邮箱和上次登录时间。顶部为添加按钮点击之后弹出的表单,输入用户名和初始密码进行新增。每行下面有2个按钮,一个叫“编辑”,一个叫“删除”。编辑可以修改管理员的昵称或者重置密码,删除必须经过两次确认才能执行。权限控制模块同管理员管理联动,不同的管理员操作权限不一样。管理员管理界面如图5-7所示。

图5-7管理员管理界面

核心代码如下所示:

@PostMapping("/add")

@Transactional

public Map<String, Object> add(HttpServletRequest request) throws IOException {

Map<String, Object> map = service.readBody(request.getReader());

map.put("password", String.valueOf(map.get("password")));

service.insert(map);

return success(1);

}

5.2.2 用户管理

用户管理功能对读者用户的档案进行查看、修改。显示所有的注册读者用户名、读者姓名、读者性别、读者电话和审核状态。审核状态列分为待审核和已审核,待审核用户右侧有通过按钮,点击之后状态变为已审核,此时可以登录系统。编辑按钮打开表单修改读者姓名或者联系电话,删除按钮移除不再使用的读者档案。列表上方提供搜索框按读者姓名或电话筛选用户。用户管理界面如图5-8所示。

图5-8用户管理界面

核心代码如下所示:

Map<String, Object> paramMap = service.readBody(request.getReader());

paramMap.entrySet().removeIf(entry -> {

Object value = entry.getValue();

return value instanceof String && ((String) value).isEmpty();

});

ReaderUser reader_user = new ReaderUser();

reader_user.setName_of_reader(paramMap.get("name_of_reader") == null ? null : String.valueOf(paramMap.get("name_of_reader")));

reader_user.setReader_gender(paramMap.get("reader_gender") == null ? null : String.valueOf(paramMap.get("reader_gender")));

5.2.3 图书分类管理

图书分类管理功能是对图书类别名称进行增删改查的功能。页面用树形或者列表的形式展示所有的分类,每一行显示分类名称、创建时间、更新时间。顶部增加一个添加按钮,点击该按钮会弹出输入分类名称对话框,提交后将数据保存到数据库中并刷新列表。每个分类右侧都设有编辑、删除按钮,编辑可以修改分类名称,删除之前需要检查该分类下是否有图书关联,关联存在时不能删除并提示先转移或者删除图书。分类显示顺序可以移动。图书分类管理界面如图5-9所示。

图5-9图书分类管理界面

核心代码如下所示:

Map<String, Object> paramMap = service.readBody(request.getReader());

paramMap.entrySet().removeIf(entry -> {

Object value = entry.getValue();

return value instanceof String && ((String) value).isEmpty();

});

BookClassification book_classification = new BookClassification();

book_classification.setBook_class_nameification(paramMap.get("book_class_nameification") == null ? null : String.valueOf(paramMap.get("book_class_nameification")));

5.2.4 图书信息管理

图书信息管理模块对图书的基本数据进行录入和修改。表格中给出了所有的图书编号、名称、分类、作者、出版社和当前的库存。顶部增加按钮实现表单填写图书编号、名称、选择分类、输入作者和出版社、上传封面图片、录入库存数量的功能,提交之后生成新的图书记录。每行右边都设置编辑和删除两个按钮,编辑可以修改任意一个字段,删除时需要确认并且同时删除对应的借阅记录和收藏记录。在列表上方加上分类筛选和图书名称搜索的功能。图书信息管理界面如图5-10所示。

图5-10图书信息管理界面

核心代码如下所示:

Map<String, String> queryMap = service.readQuery(request);

Map<String, String> configMap = service.readConfig(request);

Map<String, Object> paramMap = service.readBody(request.getReader());

paramMap.entrySet().removeIf(entry -> {

Object value = entry.getValue();

return value instanceof String && ((String) value).isEmpty();

});

BookInformation book_information = new BookInformation();

book_information.setBook_number(paramMap.get("book_number") == null ? null : String.valueOf(paramMap.get("book_number")));

5.2.5 借阅记录管理

借阅记录管理模块是对读者的借阅申请做审核。显示所有待审核和借阅中的记录,即图书名称、读者姓名、借阅日期、申请状态。待审核记录每行右边都有通过和拒绝两个按钮,点击通过后状态变成交付中并记录审核时间,拒绝操作需要填写拒绝原因反馈给读者。根据提交时间倒序排列,管理员能迅速对最近的申请进行处理。根据图书名称或者读者姓名来搜索记录,便于查找某个借阅。借阅记录管理界面如图5-11所示。

图5-11借阅记录管理界面

核心代码如下所示:

Map<String, String> queryMap = service.readQuery(request);

Map<String, String> configMap = service.readConfig(request);

Map<String, Object> paramMap = service.readBody(request.getReader());

paramMap.entrySet().removeIf(entry -> {

Object value = entry.getValue();

return value instanceof String && ((String) value).isEmpty();

});

BorrowingRecord borrowing_record = new BorrowingRecord();

borrowing_record.setBook_number(paramMap.get("book_number") == null ? null : String.valueOf(paramMap.get("book_number")));

5.2.6 归还记录管理

归还记录管理模块记录读者归还图书的事件。页面展示所有的已还书信息,即图书名称、读者姓名、借阅日期、归还日期。管理员在收到读者归还图书的时候点击添加归还按钮,输入图书编号或者扫描条码,系统会自动填写图书名称和读者信息,管理员确认之后生成归还记录并更新对应的借阅状态。列表可以按照日期范围来查询归还历史,便于月末统计归还数量。归还记录管理界面如图5-12所示。

图5-12归还记录管理界面

核心代码如下所示:

Map<String, String> queryMap = service.readQuery(request);

Map<String, String> configMap = service.readConfig(request);

Map<String, Object> paramMap = service.readBody(request.getReader());

paramMap.entrySet().removeIf(entry -> {

Object value = entry.getValue();

return value instanceof String && ((String) value).isEmpty();

});

ReturnRecords return_records = new ReturnRecords();

return_records.setBook_number(paramMap.get("book_number") == null ? null : String.valueOf(paramMap.get("book_number")));

5.2.7 采购记录管理

采购记录管理模块对每一本图书的采购情况都进行记载。表格形式地将采购记录的种类、采购日期、采购数量以及采购备注列出来。顶部增加一个按钮打开表单,选择图书类别、输入采购数量、输入日期并添加备注信息之后提交,就可以得到一份采购记录。如果采购的图书不在图书信息表中,则提示先录入图书基本信息。采购记录生成之后不能自动增加库存,需要管理员在图书信息管理中手动修改对应图书的库存,保证采购数据和实际到货一致。采购记录管理界面如图5-13所示。

图5-13采购记录管理界面

核心代码如下所示:

this.addEntity(procurement_records);

String sql = "SELECT MAX(procurement_records_id) AS max FROMprocurement_records";

Integer max = service.selectBaseCount(sql);

sql = "UPDATEbook_informationINNER JOINprocurement_recordsON book_information.book_number=procurement_records.book_number SET book_information.book_inventory = book_information.book_inventory + procurement_records.purchase_quantity WHERE procurement_records.procurement_records_id = " + max;

service.updateBaseSql(sql);

System.out.println("采购记录新增成功");

return success(1);

5.2.8 盘点记录管理

盘点记录管理模块是对库存清点结果进行录入和核对的。页面列表显示历史盘点记录,包含图书名称、盘点日期、系统库存、盘点数量和差异备注。管理员在进行盘点的时候点击添加盘点按钮,系统会自动填充当前库存数量,管理员输入实际清点数量并填写差异备注。提交后生成盘点记录供以后查看,系统库存不会自动更改,需要管理员确认差异原因之后再进行调整或者保留差异记录作为审计依据。盘点记录管理界面如图5-14所示。

图5-14盘点记录管理界面

核心代码如下所示:

Map<String, Object> paramMap = service.readBody(request.getReader());

paramMap.entrySet().removeIf(entry -> {

Object value = entry.getValue();

return value instanceof String && ((String) value).isEmpty();

});

CountingRecords counting_records = new CountingRecords();

counting_records.setBook_number(paramMap.get("book_number") == null ? null : String.valueOf(paramMap.get("book_number")));

counting_records.setBook_name(paramMap.get("book_name") == null ? null : String.valueOf(paramMap.get("book_name")));

5.2.9 文章资讯管理

文章资讯管理模块主要是对前台展示的新闻、公告内容进行维护。表格显示所有已发布的文章标题、分类、发布时间和点击数。顶部添加按钮进入编辑页面填写标题、选择分类、上传封面图片、使用富文本编辑器录入正文,发布后文章出现在前台列表。已发布的文章可以进行编辑修改,修改之后再保存覆盖原来的文本。删除操作把文章从数据库中移除,前台不再显示。在列表上方设有按分类筛选以及标题搜索功能。文章资讯管理界面如图5-15所示。

图5-15文章资讯管理界面

核心代码如下所示:

Map<String, Object> addMap = service.readBody(request.getReader());

checkParameter(addMap, "type", "分类不能为空");

checkParameter(addMap, "title", "标题不能为空");

addMap.keySet().removeIf(key -&gt; key.equals("create_time") || key.equals("update_time"));

this.service.insert(addMap);

System.out.println("文章新增成功");

return success(1);

点赞+收藏+关注 →私信领取本源代码、数据库

关注博主下篇更精彩

一键三连!!!

一键三连!!!

一键三连!!!

感谢一键三连!!!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 21:51:19

ROS2工业巡检仿真系统:SL层与安全逻辑深度耦合设计

简介&#xff1a;本资源是一套基于ROS2与Navigation2框架构建的智能巡检机器人仿真系统&#xff0c;面向机器人开发初学者、ROS2进阶学习者及工业自动化领域工程技术人员&#xff0c;聚焦解决工业场景下高危环境人工巡检效率低、风险高等实际问题。系统完整实现多目标点循环导航…

作者头像 李华
网站建设 2026/9/2 21:48:08

天猫精灵CC10深度体验:带屏智能音箱如何成为家庭智能中枢与助眠神器

最近这段时间&#xff0c;工作室和家里陆陆续续添了不少智能家居设备。要说使用频率最高、最不后悔的一件&#xff0c;反而是摆在床头柜上那台天猫精灵CC10。之前一直觉得带屏音箱是个“伪需求”&#xff0c;真用下来才发现&#xff0c;它跟手机是两种完全不同的体验。尤其睡前…

作者头像 李华
网站建设 2026/9/2 21:46:51

硬派越野短视频全链路制作:拍摄、剪辑到发布复盘

一条“山巅云海翻涌时&#xff0c;牧马人正碾过碎石唱征服”的硬派越野短视频&#xff0c;能几秒钟抓住观众&#xff0c;靠的从来不是运气&#xff0c;而是一整套从拍摄、素材管理、后期、标题标签到数据复盘的技术链路。这次我们就把“这条片子从出发到发布”当作一个完整创作…

作者头像 李华
网站建设 2026/9/2 21:44:56

技术教程选题之道:Spring Security与Python IndexError

抱歉&#xff0c;我无法基于这条新闻标题撰写技术教程。您提供的主题属于新闻报道类内容&#xff0c;与我的 CSDN 技术教程写作定位不匹配。请提供具体的技术主题&#xff0c;例如“Spring Security 环境搭建”“Apollo 配置发布流程”“Python IndexError 解决方法”等&#x…

作者头像 李华
网站建设 2026/9/2 21:43:44

YOLOv8实例分割实战:食品图像识别与像素级分割全流程解析

简介&#xff1a;本资源是一个基于YOLOv8框架实现的食品图像分割与识别系统&#xff0c;面向人工智能初学者、计算机视觉开发者及食品智能分析应用场景的研究者&#xff0c;解决食品图像中多类别目标的精准定位、像素级分割与语义识别问题&#xff0c;适用于饮食辅助、营养评估…

作者头像 李华
网站建设 2026/9/2 21:43:27

语音抽奖系统实战:从语音技能到原子库存扣减与异步发奖

秋天第一杯奶茶的话题每年都会刷屏一次&#xff0c;但这位用户晒的却是“秋天的第一个堡堡”&#xff0c;还自称欧皇之堡。乍看只是一条中奖后的庆祝动态&#xff0c;但把镜头拉远一点&#xff0c;这类抽奖/限量福利活动背后其实牵着一整套技术链路&#xff1a;语音入口、活动资…

作者头像 李华