【JavaEE进阶】 图书管理系统开发日记——贰

文章目录

  • 🌲前言
  • 🎄设计数据库
  • 🍃引⼊MyBatis和MySQL驱动依赖
  • 🌳Model创建
  • 🎍约定前后端交互接口
  • 🍀服务器代码
    • 🚩控制层
    • 🚩业务层
    • 🚩数据层
  • 🌴效果展示
  • ⭕总结

🌲前言

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

本篇博客我们先对我们的登录界面进行优化。

🎄设计数据库

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

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

创建如下:

--创建数据库
DROP DATABASE IF EXISTS book_test;
CREATE DATABASE book_test DEFAULT CHARACTER SET utf8mb4;--创建用户表
DROP TABLE IF EXISTS user_info;
CREATE TABLE user_info (`id` INT NOT NULL AUTO_INCREMENT,`user_name` VARCHAR ( 128 ) NOT NULL,`password` VARCHAR ( 128 ) NOT NULL,`delete_flag` TINYINT ( 4 ) NULL DEFAULT 0,`create_time` DATETIME DEFAULT now(),`update_time` DATETIME DEFAULT now() ON UPDATE now(),PRIMARY KEY ( `id` ),
UNIQUE INDEX `user_name_UNIQUE` ( `user_name` ASC )) ENGINE = INNODB DEFAULT
CHARACTER
SET = utf8mb4 COMMENT = '⽤⼾表';--初始化数据
INSERT INTO user_info ( user_name, PASSWORD ) VALUES ( "陈平安", "888888" );
INSERT INTO user_info ( user_name, PASSWORD ) VALUES ( "李星云", "666666" );

🍃引⼊MyBatis和MySQL驱动依赖

pom文件引入如下:

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope>
</dependency>

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

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/book_test?characterEncoding=utf8&useSSL=falseusername: rootpassword: 666666driver-class-name: com.mysql.cj.jdbc.Drivermybatis:configuration:map-underscore-to-camel-case: true #配置驼峰⾃动转换log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句
# 设置⽇志⽂件的⽂件名
logging:file:name: /logger/spring-library.log

🌳Model创建

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

@Data
public class UserInfo {//自增idprivate Integer id;//用户名private String userName;//密码private String password;//删除 0-有效 1-无效private Integer deleteFlag;private Date createTime;private Date updateTime;
}

🎍约定前后端交互接口

[请求]
/user/login
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
[参数]
name=李星云&password=666666
[响应]
true //账号密码验证正确, 否则返回false

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

🍀服务器代码

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

🚩控制层

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

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

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

创建UserController书写代码如下:

@RequestMapping("/user")
@RestController
public class UserController {@Autowiredprivate UserService userService;@RequestMapping("/login")public boolean login(String name, String password, HttpSession session){//账号或密码为空if (!StringUtils.hasLength(name) || !StringUtils.hasLength(password)){return false;}UserInfo userInfo = userService.queryUserByName(name);//判断用户名是否存在,及用户名与密码是否正确if(userInfo != null && userInfo.getPassword().equals(password)) {userInfo.setPassword("");session.setAttribute("session_user_key",userInfo);return true;}return false;}
}

🚩业务层

该层代码简单。

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

UserService代码如下:

@Service
public class UserService {@Autowiredprivate UserInfoMapper userInfoMapper;public UserInfo queryUserByName(String name) {return userInfoMapper.queryUserByName(name);}
}

🚩数据层

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

@Mapper
public interface UserInfoMapper {@Select("select id, user_name,`password`, delete_flag, create_time,update_time "+ "from user_info where delete_flag=0 and user_name=#{name}")UserInfo queryUserByName(String name);
}

🌴效果展示

密码错误,登录失败

在这里插入图片描述
输入正确用户名与密码正确跳转
在这里插入图片描述

⭕总结

关于《【JavaEE进阶】 图书管理系统开发日记——贰》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!

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

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

相关文章

01- k8s基础网络知识 之 underlay与overlay网络

前言&#xff1a; 我们在学习k8s网络之前&#xff0c;必须要了解k8s网络相关的一些基础知识&#xff0c;比如什么是underlay网络、overlay网络等&#xff0c;只有把基础知识掌握之后&#xff0c;后续学习k8s网络的时候&#xff0c;一些知识点就不会再云里雾里了。 1 underlay与…

协作办公开源神器:ONLYOFFICE

目录 前言ONLYOFFICE为什么选择ONLYOFFICE强大的文档编辑功能多种协作方式多人在线协同支持跨端多平台连接器安全性极高本地部署 ONLYOFFICE 8.0版本震撼来袭可填写的 PDF 表单显示协作用户头像更新插件界面设计更快更强大 总结 前言 近几年来&#xff0c;随着互联网技术的不断…

如何解决 docker registry x509 证书不信任问题?

最近想尝试一下极狐GitLab&#xff08;可以理解为 GitLab 在中国的发行版&#xff09;内置的容器镜像仓库&#xff0c;这样就不用自己安装 Harbor 之类的了。于是找了个服务器安装了一个极狐GitLab 的私有化部署版本&#xff0c;安装过程可以参考过往的技术文章使用Omnibus 安装…

2024前端技术趋势分析

文章目录 前端技术趋势分析无代码/低代码开发优点主要应用场景目前代表性技术 WebAssembly优点应用场景代表性技术 跨平台技术优点应用场景代表性技术 人工智能在前端的应用优点应用场景 总结 前端技术趋势分析 前端技术是 Web 开发的重要组成部分&#xff0c;它负责呈现用户界…

nodejs制作一个简单线程池

ThreadPool 类 const { Worker,parentPort,isMainThread } require(worker_threads) //主线程 if(isMainThread){class ThreadPool {size 5;queue [];workerGroup [];free0;maxFree2;monitornull;constructor(size) {this.size size;}//初始化子线程init(){for (let i 0…

在Windows搭建gRPC C++开发环境

本文介绍在Windows下使用Visual Studio 2017编译gRPC 1.48.0并配置开发环境&#xff0c;以及开发、配置一个简单的c服务端以及.net客户端。 0、前置条件 1、下载gRPC源码 使用git命令行在预备存放grpc源码的目录下执行, 此处我们下载的是 grpc 1.48.0 git clone -b v1.48.0 …

Pycharm python用matplotlib 3D绘图显示空白解决办法

问题原因&#xff1a; matplotlib版本升级之后显示代码变了&#xff0c;修改为新的 # ax Axes3D(fig) # 原代码 ax fig.add_axes(Axes3D(fig)) # 新代码import numpy as np import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import Ax…

测试环境搭建整套大数据系统(一:基础配置,修改hostname,hosts,免密,时间同步)

一&#xff1a;使用服务器配置。 二&#xff1a;修改服务器名称hostname&#xff0c;hosts。 在 Linux 系统中&#xff0c;hostname 和 /etc/hosts 文件分别用于管理主机名和主机名解析。 在三台服务器上&#xff0c;分别执行以下命令。 vim /etc/hostnamexdso-hadoop-test-0…

android 11 自定义Android device owner 接口

在设置里面自定义广播 去处理下面的事情 ComponentName mComponentnew ComponentName(packageName,receiverName); DevicePolicyManager mDPM.setDeviceOwner(mComponent,"d_owner_"mUserId); int mUserId android.os.Process.myPid(); int uid android.os…

༺༽༾ཊ—Unity之-04-原型模式—ཏ༿༼༻

首先创建一个项目&#xff0c; 在这个初始界面我们需要做一些准备工作&#xff0c; 建基础通用文件夹&#xff0c; 创建一个Plane 重置后 缩放100倍 加一个颜色&#xff0c; 任务1&#xff1a;使用 建造者模式 创建三种 金刚猿猴 零部件 拼接组合 首先资源商店下载 金刚猿猴 模…

常见的词法分析和语法分析的开源库收集

文章目录 一、词法及语法分析器汇总1.Flex2.Bison3.ANTLR3.Ply4.JFlex 一、词法及语法分析器汇总 1.Flex Flex是一个用于生成词法分析器的工具。它可以根据用户定义的正则表达式规则&#xff0c;将输入的字符流分割成一个个的词法单元。Flex是GNU项目的一部分&#xff0c;可以…

Redis数据淘汰策略

Redis作为一种高性能的键值存储数据库&#xff0c;通常用于缓存和提高数据检索速度。然而&#xff0c;由于内存资源有限&#xff0c;当内存不足以容纳所有数据时&#xff0c;Redis就需要采取一些策略来删除部分数据&#xff0c;以确保新的数据能够被写入。这就引入了数据淘汰策…

刨析数据结构(二)

&#x1f308;个人主页&#xff1a;小田爱学编程 &#x1f525; 系列专栏&#xff1a;数据结构————"带你无脑刨析" &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于数据结构的优质内容&#xff01;&#x1f3c6;&#x1f3c6; &#x1f600;欢迎…

strlen函数详解

&#x1f388;个人主页&#xff1a;甜美的江 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;c语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&a…

猜凶手

日本某地发生了一件谋杀案&#xff0c;警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词: A说&#xff1a;不是我。 B说&#xff1a;是C。 C说&#xff1a;是D。 D说&#xff1a;C在胡说 已知3个人说了真话&#xff0c;1个人说的是假话。 现在请根据这…

动态微信小程序码和开发者工具解析小程序码

一、动态生成微信小程序码 1、方式一 微信官方网站&#xff0c;对已发布的小程序&#xff0c;提供了一个快捷的入口&#xff0c;输入微信小程序的page页面即可。 page页面可以通过右侧开启入口获取 也可以通过开发者工具左下角的页面地址和参数地址那里获取到 二、生成的小…

【软件设计师笔记】计算机系统基础知识考点

【考证须知】IT行业高含金量的证书(传送门) &#x1f496; 【软件设计师笔记】程序语言设计考点(传送门) &#x1f496; 【软件设计师笔记】操作系统考点(传送门) &#x1f496; &#x1f413; 计算机系统组成 计算机系统是由硬件和软件组成的&#xff0c;它们协同工作来运…

(Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息

国家青藏高原科学数据中心下载中国1千米分辨率逐日全天候地表土壤水分数据集&#xff08;2003-2022&#xff09; 问题&#xff1a;数据在arcgis打开特别大&#xff0c;无法和矢量数据重合&#xff0c;没有设置地理坐标系 数据在网站上提供了投影信息&#xff0c;提示可以进行py…

WAF 无法防护的八种风险

一、目录遍历漏洞 测试用例&#xff1a;Apache 目录遍历漏洞 测试环境搭建&#xff1a; apt intsall apache2 && cd /var/www/html/ && rm index.html无法拦截原因&#xff1a; 请求中无明显恶意特征&#xff0c;无法判断为攻击行为 实战数据&#xff1a; 截…

MongoDB聚合操作

文章目录 聚合操作单一作用聚合聚合管道什么是 MongoDB 聚合框架管道&#xff08;Pipeline&#xff09;和阶段&#xff08;Stage&#xff09;常用的管道聚合阶段聚合表达式数据准备$project$match$count$group accumulator操作符$unwind$limit$skip$sort$lookup案例聚合操作案例…