当前位置: 首页 > news >正文

【JavaEE进阶】图书管理系统 - 贰

目录

🌲前言

🎄设计数据库

🍃引⼊MyBatis和MySQL驱动依赖

🌳Model创建

🎍约定前后端交互接口

🍀服务器代码

🚩控制层

🚩业务层

🚩数据层

🌴前端代码

🎄测试页面


🌲前言

前面我们基本实现了前后端交互与相应简单的逻辑,后面经过一系列的学习,我们需要对我们的代码进行优化。

我们先对我们的登录界面进行优化。

🎄设计数据库

数据库表是应⽤程序开发中的⼀个重要环节,数据库表的设计往往会决定我们的应⽤需求是否能顺利实现,甚⾄决定我们的实现⽅式.如何设计表以及这些表有哪些字段,这些表存在哪些关系也是⾮常重要的

对于数据库表的设计,我认为有两种表,一个是实体表(从需求中查看),一个是关系表(实体直接的关系,一对一,一对多,多对一)

那么当前的图书管理系统的实体表有几个张呢,分为用户表和图书表

我们的⽤⼾表有⽤⼾名和密码即可

创建如下:

🍃引⼊MyBatis和MySQL驱动依赖

pom.xml依赖:

配置数据库与日志,yml文件如下:

🌳Model创建

创建一个model类的文件夹,创建一个UserInfo类如下:

🎍约定前后端交互接口

[请求]
/user/login
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
[参数]
name=zhangsan&password=123456
[响应]
响应失败:用户名或者密码错误;响应成功:返回空

浏览器给服务器发送 /user/login 这样的HTTP请求,服务器给浏览器返回了⼀个Boolean类型的数据,返回true,表⽰账号密码验证正确

🍀服务器代码

查看之前的登录接口代码:

之前由于没有学习数据库的操作,通过硬编码,采用mock的方式来验证账号密码;此时我们就通过从数据库获取用户名和密码来进行验证

该代码我们使用应用分层的思想进行分层书写

🚩控制层

该层我们首先需要对传入数据进行判断合法

合法后,更具名称查询用户,如果可以查到,并且密码一致,就认为登录成功,并存入session

查询相关逻辑实现我们交给业务层实现

创建UserController书写代码如下

🚩业务层

该层代码简单。

具体查询我们交给数据层查询,我们只需要进行接收返回即可

UserService代码如下:  

🚩数据层

创建UserMapper,使用注解方式进行查询,代码如下:  

🌴前端代码

        

🎄测试页面

错误登录:

输入正确用户名与密码正确跳转:  
  

相关文章:

【JavaEE进阶】图书管理系统 - 贰

目录 🌲前言 🎄设计数据库 🍃引⼊MyBatis和MySQL驱动依赖 🌳Model创建 🎍约定前后端交互接口 🍀服务器代码 🚩控制层 🚩业务层 🚩数据层 🌴前端代码…...

Vue学习教程-14内置指令

文章目录 前言一、v-text指令二、v-html指令三、v-cloak指令四、v-once指令五、v-pre指令六、其他指令 前言 Vue.js 提供了许多内置指令(Directives),这些指令用于在模板中添加特殊功能。内置指令以 v- 前缀开始。 v-text : 更新元素的 tex…...

【蓝桥杯单片机】客观题

一、第十三届省赛(一) 二、第十三届省赛(二)...

C++ 设计模式-访问者模式

C++访问者模式 一、模式痛点:当if-else成为维护噩梦 开发动物园管理系统,最初的需求很简单: class Animal {}; class Cat : public Animal {}; class Dog : public Animal {};// 处理动物叫声 void makeSound(Animal* a) {if (auto c = dynamic_cast<Cat*>(a)) {st…...

靶场之路-Kioptix Level-1 mod_ssl 缓冲区溢出漏洞

声明 学习视频来自B站UP主 泷羽sec,如涉及侵泷羽sec权马上删除文章笔记的只是方便各位师傅学习知识,以下网站涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 一、准备工作 首先使用 vmware 导入靶机文件&#xff0c; 然后网络模式改成 nat 模式即可 我们打…...

【Viewer.js】vue3封装图片查看器

效果图 需求 点击图片放大可关闭放大的 图片 下载 cnpm in viewerjs状态管理方法 stores/imgSeeStore.js import { defineStore } from pinia export const imgSeeStore defineStore(imgSeeStore, {state: () > ({showImgSee: false,ImgUrl: ,}),getters: {},actions: {…...

stm32mp采用spi接口扩展can

在 STM32MP 系列微处理器中,通过 SPI 转 CAN 功能扩展 CAN 接口需要结合硬件设计(如使用 SPI 接口的 CAN 控制器芯片)和 Linux 驱动配置。以下是详细的实现步骤和关键点: 硬件选型与连接 常用 SPI 转 CAN 芯片MCP2515:经典 SPI 转 CAN 控制器,支持 CAN 2.0B。MCP2517FD:…...

forge-1.21.x模组开发(二)给物品添加功能

功能效果 创建一个兑换券&#xff0c;当使用兑换券对着兑换机右键时&#xff0c;获得一条烤鱼 创建兑换券 创建ExchangeCouponsItem.java&#xff0c;继承Item&#xff0c;定义兑换券内容 public class ExchangeCouponsItem extends Item {public ExchangeCouponsItem(Prop…...

创建第一个 Maven 项目(一)

一、引言 在 Java 开发的广袤天地中&#xff0c;Maven 宛如一位全能的管家&#xff0c;发挥着举足轻重的作用。它是一个基于项目对象模型&#xff08;POM&#xff09;的项目管理和构建自动化工具&#xff0c;极大地简化了 Java 项目的开发流程。 Maven 的核心优势之一在于其强…...

网络运维学习笔记 022 HCIA-Datacom新增知识点03园区网典型组网架构及案例实战

园区网典型组网架构及案例实战 园区网&#xff1a;内部运行了园区网协议的一个主体网络 园区网络典型架构 园区网络常用协议与技术&#xff1a; 接入层&#xff1a; VLAN、生成树、链路聚合、AAA、dhcp-snooping等 汇聚层&#xff1a;DHCP、堆叠、链路聚合、生成树、OSPF、静…...

python-leetcode-二叉树的直径

543. 二叉树的直径 - 力扣&#xff08;LeetCode&#xff09; # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solutio…...

ubuntu中打包与压缩命令详解

Ubuntu 中打包与压缩命令详解 在 Ubuntu 系统中&#xff0c;打包和压缩文件是常见的操作。通过打包和压缩&#xff0c;可以将多个文件或目录合并为一个文件&#xff0c;并减小文件大小以节省存储空间或方便传输。本文将详细介绍 Ubuntu 中常用的打包与压缩命令及其用法。 目录…...

Linux MySQL 8.0.29 忽略表名大小写配置

Linux MySQL 8.0.29 忽略表名大小写配置 问题背景解决方案遇到的问题&#xff1a; 问题背景 突然发现有个大写的表报不存在。 在Windows上&#xff0c;MySQL是默认支持忽略大小写的。 这个时候你要查询一下是不是没有配置&#xff1a; SHOW VARIABLES LIKE lower_case_table…...

【c++】【线程池】线程池模式

【c】【线程池】线程池模式 1 L/F领导者与跟随者模式 概述&#xff1a;在此模式中&#xff0c;线程池中的线程分为&#xff1a;领导者&#xff08;Leader&#xff09;&#xff0c;跟随者&#xff08;Follower&#xff09;和工作者&#xff08;Processor&#xff09; 领导者线…...

Next.js 学习-1

Next.js学习 引用&#xff1a;https://www.nextjs.cn/learn/basics/create-nextjs-app 先试试水吧&#xff0c;正好dify用的这个构建的前端项目。 使用 如果您尚未安装 Node.js&#xff0c;请 从此处安装。要求 Node.js 10.13 或更高版本。 好吧得用新的了&#xff0c;记得…...

bat命令在b站下载单个音视频

文章目录 单个音频第一行代码第二行代码下载后效果图 单个视频第一行代码第二行代码第三行代码第四行代码第五行代码下载后效果图 单个音视频第一行代码第二行代码第三行代码第四行代码第五行代码第六行代码下载后的效果图 单个音频 chcp 65001 you-get -o D:\Files\pydownloa…...

函数中的形参和实参(吐槽)

def greet_user(user_name):print(f"Hello,{user_name.title()}!")greet_user("zhangsan") 在以上函数中&#xff0c;user_name是形参&#xff0c; 在greet_user("zhangsan")中&#xff0c;值“zhangsan”是实参。这本身没什么大问题。 但是这…...

运维Ansible面试题及参考答案

目录 简述 Ansible 的工作原理,它是如何实现对远程主机管理的? Ansible 是基于什么语言开发的?这门语言的特性对 Ansible 的功能实现有哪些帮助? 解释 Agentless 在 Ansible 中的含义,与基于 Agent 的自动化工具相比,优势体现在哪? Ansible 中的 Inventory 文件是什…...

3、优先级翻转问题

FreeRTOS优先级翻转是当高优先级任务因等待低优先级任务占用的资源&#xff08;如互斥锁&#xff09;被阻塞&#xff0c;而中优先级任务趁机执行&#xff0c;导致高优先级任务无法及时运行的调度异常。 场景示例&#xff1a; 任务优先级&#xff1a;存在三个任务&#xff0c;优…...

python 进程池的基本使用

Python 进程池&#xff1a;Pool任务调度实现 在现代计算机系统重&#xff0c;处理器核心数量的增加为并行计算提供了强大的硬件基础。Python的 multiprocessing 模块中的进程池&#xff08;Pool&#xff09;机制&#xff0c;为开发者提供了 一个高效且易用的并行处理框架。 通…...

Vue 3 中集成 Three.js 场景的完整实现指南

本文详细讲解如何在 vue 3&#xff08;javascript 版本&#xff09;项目中正确集成 three.js&#xff0c;完成基础 3d 场景渲染&#xff0c;涵盖 dom 挂载时机、渲染循环管理、响应式容器适配等关键实践。 本文详细讲解如何在 vue 3&#xff08;javascript 版本&#xff0…...

完成Flash到WebGL渲染核心重构,实现技术向新时代的转移。

这是一个从 Flash&#xff08;ActionScript&#xff09;迁移到 WebGL 游戏引擎时&#xff0c;开发者必须面对的核心技术重构问题。迁移的本质是从一个高层次的、基于显示列表的 2D 渲染模型&#xff0c;转向一个底层的、基于 GPU 的、可处理 2D/3D 的渲染管线。以下是需要重写的…...

AI 应用软件的开发技术

开发现代 AI 应用软件的技术栈早已超越了简单的“前端后端”模式。在 2026 年&#xff0c;一个完整的 AI 原生&#xff08;AI-Native&#xff09;应用通常由以下四大技术层级驱动。1. 模型与算力层这是应用的底层核心&#xff0c;负责推理与生成。大模型引擎&#xff1a; 开发者…...

递归神经网络与RTRL算法原理及优化实践

1. 递归神经网络与RTRL算法基础解析递归神经网络&#xff08;RNN&#xff09;与传统前馈神经网络的核心差异在于其反馈连接结构。这种结构赋予了RNN独特的"记忆"能力&#xff0c;使其能够处理时间序列数据中的动态模式。图1展示了二者的架构差异&#xff1a;前馈网络…...

【Docker 27边缘容器部署终极指南】:20年运维专家亲授轻量化落地的7大避坑法则

第一章&#xff1a;Docker 27边缘容器轻量化部署全景认知 Docker 27&#xff08;代号“EdgeLight”&#xff09;是专为边缘计算场景深度优化的轻量级容器运行时&#xff0c;其核心设计摒弃了传统守护进程模型&#xff0c;转而采用无守护、按需加载的模块化架构。该版本将镜像拉…...

手把手教你为华大HC32F460并口屏(ILI9341)配置emWin:直接访问与间接访问两种模式详解

华大HC32F460并口屏(ILI9341)的emWin驱动设计&#xff1a;直接访问与间接访问模式深度解析 在嵌入式GUI开发中&#xff0c;显示性能往往是决定用户体验的关键因素。当使用华大半导体HC32F460这类高性能MCU驱动320x240分辨率的ILI9341并口屏时&#xff0c;如何通过emWin图形库实…...

Simulink项目复用实战:一个模型适配多个客户需求,全靠可变子系统

Simulink项目复用实战&#xff1a;一个模型适配多个客户需求&#xff0c;全靠可变子系统 在工业自动化、汽车电子和航空航天等领域&#xff0c;系统工程师常常面临一个棘手问题&#xff1a;如何用同一套控制模型满足不同客户的定制化需求&#xff1f;传统做法是为每个客户单独维…...

Ai2Psd终极指南:如何彻底解决Illustrator到Photoshop的矢量转换难题

Ai2Psd终极指南&#xff1a;如何彻底解决Illustrator到Photoshop的矢量转换难题 【免费下载链接】ai-to-psd A script for prepare export of vector objects from Adobe Illustrator to Photoshop 项目地址: https://gitcode.com/gh_mirrors/ai/ai-to-psd 你是否曾为Il…...

DeepSeek-OCR-2轻松上手:解决文字识别痛点,提升工作效率实测

DeepSeek-OCR-2轻松上手&#xff1a;解决文字识别痛点&#xff0c;提升工作效率实测 1. 为什么你需要一个更好的OCR工具 如果你经常需要处理纸质文档、扫描件或者图片里的文字&#xff0c;肯定遇到过这样的烦恼&#xff1a;识别出来的文字错漏百出&#xff0c;格式乱七八糟&a…...

别再混淆了!一文讲清Xilinx 7系列FPGA中HP Bank与HR Bank的SelectIO区别(含IDELAY/ODELAY详解)

深入解析Xilinx 7系列FPGA中HP与HR Bank的SelectIO架构差异 在Xilinx 7系列FPGA的设计实践中&#xff0c;IO Bank的选择往往直接影响着系统性能和信号完整性。许多工程师在初次接触HP&#xff08;High Performance&#xff09;和HR&#xff08;High Range&#xff09;两种Bank…...