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

news2025/2/3 5:50:42

文章目录

  • 🌲前言
  • 🎄设计数据库
  • 🍃引⼊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=false
  username: root
  password: 666666
  driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
 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 {
    //自增id
    private 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 {
    @Autowired
    private 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 {
    @Autowired
    private 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.coloradmin.cn/o/1427592.html

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

相关文章

亚马逊速卖通shein测评补单,轻松获得高评店铺订单暴涨人气火爆

测评之所以被认为是最快速有效的推广方式&#xff0c;是因为它能够迅速影响多个关键因素。通过测评&#xff0c;您能够快速提升关键词的转化率&#xff0c;从而获得更好的搜索排名。优质的评价有助于增加产品的权重和转化率&#xff0c;进一步提升排名。同时&#xff0c;增加的…

whistle抓包时如何过滤掉无用的链接

whistle在抓包的时候经常会有一些图片等我们不需要的地址&#xff0c;过多时会影响到我们抓的接口的速度&#xff0c;如何能快速的过滤掉无用的链接呢 可以在setting下进行如下设置 Exclude Filter&#xff1a;排除筛选器&#xff0c;即勾选后会排除勾选框下的地址链接Includ…

重写Sylar基于协程的服务器(3、协程模块的设计)

重写Sylar基于协程的服务器&#xff08;3、协程模块的设计&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务器&#xff08;1、日志模…

千卡训练有效时间占比超过95%,蚂蚁集团AI Infra技术开源

近日&#xff0c;蚂蚁集团AI创新研发部门NextEvo全面开源AI Infra技术&#xff0c;可帮助大模型千卡训练有效时间占比超过95%&#xff0c;能实现训练时“自动驾驶”&#xff0c;这推动了AI研发效率。 &#xff08;图&#xff1a;蚂蚁集团的自动化分布式深度学习系统DLRover现已…

7+双样本孟德尔随机化“得分神器”的双向孟德尔果然名不虚传

今天给同学们分享一篇生信文章“Bidirectional Mendelian randomization analysis of the genetic association between primary lung cancer and colorectal cancer”&#xff0c;这篇文章发表在J Transl Med期刊上&#xff0c;影响因子为7.4。 结果解读&#xff1a; MR分析结…

【开源】基于JAVA+Vue+SpringBoot的智慧家政系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询家政服务4.2 新增单条服务订单4.3 新增留言反馈4.4 小程序登录4.5 小程序数据展示 五、免责说明 一、摘要 1.1 项目介绍 基于微信小程序JAVAVueSpringBootMySQL的智慧家政系统&#xff0…

Jmeter学习系列之五:基础线程组(Thread Group)

前言 线程组是一系列线程的集合,每一个线程代表着一个正在使用应用程序的用户。在 jmeter 中,每个线程意味着模拟一个真实用户向服务器发起请求。 在 jmeter 中,线程组组件运行用户设置线程数量、初始化方式等等配置。 例如,如果你设置线程数为 100,那么 jmeter 将创建…

【前端模板】bootstrap5实现蓝色数码网站BigTech(电商适用,附带源码)

一、需求分析 数码电商网站是指专门销售数码产品的在线商城。它们提供了一个平台&#xff0c;供消费者浏览、选择和购买各种数码产品&#xff0c;如智能手机、电脑、相机、家电等。这些网站通常提供以下功能&#xff1a; 产品展示&#xff1a;数码电商网站展示各种数码产品的详…

现货白银交易k线图发生突破时如何入场?

在分析现货白银交易K线图的时候&#xff0c;我们经常会碰到突破这种行情。突破是一种强烈的具有指向性和预期性的行情&#xff0c;但同时它也是一个潜在交易风险较大的行情。碰到突破之后&#xff0c;现货白银投资者应该如何入场呢&#xff1f;下面我们就来讨论一下。 突破发生…

量化学习5(量化回测)

1 pandas计算策略评估指标 本章节介绍关于金融量化分析的一些基本概念&#xff0c;如年华收益率、基准年化收益率、最大回撤等。在严格的量化策略回测中&#xff0c;这些概念都是需要掌握并熟练使用的&#xff0c;这样能够全面的评估量化策略。市面上&#xff0c;很多策略回测…

C++游戏开发的优势

C作为一种高效的编程语言&#xff0c;在游戏开发领域有着独特的优势。通过充分利用C的特性&#xff0c;游戏开发人员可以实现更高的性能、可移植性和灵活性。下面简单的介绍C游戏开发的优势&#xff0c;并探讨它在游戏开发中的应用。 性能优势 游戏是对计算机系统资源要求很高…

深入理解指针(2)

⽬录 1. 字符指针变量 2. 数组指针变量 3. ⼆维数组传参的本质 4. 函数指针变量 5. 函数指针数组 6. 转移表 1. 字符指针变量 在指针的类型中我们知道有⼀种指针类型为字符指针 char* ; ⼀般使⽤: int main() {char ch w;char *pc &ch;*pc w;return 0; } 还有…

雨云游戏云VPS服务器用Linux搭建MCSM面板和Minecraft Mohist 1.20.2服务器教程,我的世界MOD和插件服开服教程。

雨云游戏云VPS服务器用Linux搭建MCSM面板和Minecraft Mohist 1.20.2服务器教程&#xff0c;我的世界MOD和插件服开服教程。 本教程演示安装的MC服是Mohist 1.20.2版&#xff0c;其他版本也可以参考本教程&#xff0c;差别不大。 本教程使用Docker来运行mc服&#xff0c;可以方…

51单片机编程应用(C语言):模块化编程

下面我们模块化几个函数&#xff1a; Delay.c //延时子函数 void Delay(unsigned int xms) {unsigned char i, j;while(xms--){i 2;j 239;do{while (--j);} while (--i);} } Delay.h #ifndef __DELAY_H__ #define __DELAY_H__void Delay(unsigned int xms);#endifNixie.h …

ElasticSearch搜索与分析引擎-Linux离线环境安装教程

目录 一、下载安装包 网盘链接: 二、安装流程及遇到的问题和解决方案 &#xff08;1&#xff09;JDK安装 &#xff08;2&#xff09;Elasticsearch安装 &#xff08;3&#xff09;Kibana安装 ​&#xff08;4&#xff09;Ik分词器安装 三、启动过程中的问题 &#xff…

接口自动化处理动态参数

接口自动化处理动态参数 1、流程说明 某些接口的请求入参数据不能写死&#xff0c;需要动态传参。如用户注册接口&#xff0c;用户名需要动态生成。使用yaml编写测试数据时&#xff0c;在需要动态参数的数据后面添加上特殊字符${生成动态数据的方法名&#xff08;参数&#x…

Find My点读笔|苹果Find My技术与点读笔结合,智能防丢,全球定位

点读笔是采用国际最新光学图像识别技术和先进的数码语音技术开发而成的新一代智能阅读和学习工具。它体现了电子产品与教育行业的完美融合&#xff0c;实现了科技以人为本的理念。点读笔能同时实现点读、复读、跟读、录音、娱乐等诸多功能。由于小孩贪玩很容易造成点读笔的丢失…

基于OpenCV灰度图像转GCode的单向扫描实现

基于OpenCV灰度图像转GCode的单向扫描实现 引言单向扫描存在的问题灰度图像单向扫描代码示例结论 基于OpenCV灰度图像转GCode的单向扫描实现 本文将介绍如何使用OpenCV库将灰度图转换为GCode&#xff0c;并通过单向扫描实现对图像的激光雕刻。GCode是一种用于控制数控机床和…

物联网自动虫情测报仪器

TH-CQ3S在农业生产的进程中&#xff0c;病虫害的防治始终是关键的一环。然而&#xff0c;传统的病虫害监测手段往往存在着效率低下、准确度不高等问题&#xff0c;这无疑给农业生产带来了巨大的困扰。好在&#xff0c;随着科技的飞速发展&#xff0c;一款基于物联网技术的自动虫…

Oracle闪回日志管理(flashbackup log)

Oracle闪回日志管理&#xff08;flashbackup log&#xff09; 1.开启闪回日志 shutdown immediate startup mount; alter database archivelog; alter database flashback on; alter database open; 2、查看闪回日志保留期限 show parameter flash 默认是1440分钟&#xff0c…