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

Spring第三课,Lombok工具包下载,对应图书管理系统列表和登录界面的后端代码,分层思想

目录

一、Lombok工具包下载

二、前后端互联的图书管理系统

规范

 三、分层思想

三层架构:

1.表现层

2.业务逻辑层

3.数据层


一、Lombok工具包下载

这个工具包是为了做什么呢?

他是为了不去反复的设置setting and getting 而去产生的工具包

⚠️工具包下载:推荐不要下载太新的(较高的),也不要太旧,选择一个使用人多的。

使用方法:加上注解Data之后。

我们可以使用get+属性名字()比如

此时你明明没有写get方法,但是就是会有get这个方法,这也是这个包吊的地方,

当然,假如你想有东西让他不可修改,不能访问,那么就可以特定的去写Getter,Setter

为什么前端校验之后,后端还需要校验

1.这是两个团队的事情

2.后端可能会受到攻击,不是非正常的请求

二、前后端互联的图书管理系统

规范

图书管理系统

1.登录

URL: /user/login

参数: userName=?password=?

响应:true/false

2.图书列表展示

URL:/book/getBookLsit

参数:无

响应:List<BookInfo>

登录界面的后段代码显示

package com.example.demo.demos.web;import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpSession;@RequestMapping("/user")
@RestController
public class UserController {@RequestMapping("/login")public Boolean login(String userName, String password, HttpSession session){//校验参数if(!StringUtils.hasLength(userName)||!StringUtils.hasLength(password)){return  false;}//验证账号密码是否正确//为什么admin放在前面,因为假如userName为NULL,这样他就会报一个空指针错误,常量放在前面,开发习惯if("admin".equals(userName)&&"admin".equals(password)){//账号密码正确//存session,一会在这个地方,记得要去测试一下没有session会怎么样session.setAttribute("userName",userName);return  true;}return  false;}}

这个session我开始一直不理解是用来干什么的,但是现在突发奇想一个念头,他的作用是,我们之前写过的博客系统,登录界面,假如登录成功,你的用户ID会变成你的用户名,换句话说,它是从你的登录开始获取您的信息,然后去对您的信息进行一系列操作

更加深刻的理解这个session像是一个医保卡,你登录之后,你的信息服务器就获取了,然后会根据您的信息为你进行接下来的服务。

Book对象

package com.example.demo.demos.web;import lombok.Data;import java.math.BigDecimal;@Data
public class BookInfo {private Integer id;private String bookName;private String author;private Integer count;private BigDecimal price;private String publish;//1.表示可借阅,2.不可借阅private  Integer status;private  String   statusCN;
}

图书管理系统的列表后端代码

采用list来去暂时存储这个图书管理系统,当然以后会连接数据库,这也就是一个暂时的存储

package com.example.demo.demos.web;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;@RestController
@RequestMapping("/book")
public class BookController {@RequestMapping("/getBookList")public List<BookInfo> getBookList() {//1.获取图书的数据//2.对图书数据进行修改,针对状态码数字(0:有货,1:没货这种)进行改变,把状态码数字转换成中文//3.返回数据List<BookInfo> bookInfos = mockData();for (BookInfo bookInfo : bookInfos) {if (bookInfo.getStatus() == 1) {bookInfo.setStatusCN("可借阅");} else {bookInfo.setStatusCN("不可借阅");}}return bookInfos;}private List<BookInfo> mockData() {List<BookInfo> bookInfos = new ArrayList<>(15);//对于已知数据量,或者大概知道这个集合的数据量时,创建list时,建议指定初始化容量for (int i = 0; i < 15; i++) {BookInfo bookInfo=new BookInfo();bookInfo.setId(i);bookInfo.setBookName("图书"+i);bookInfo.setAuthor("作者"+i);bookInfo.setCount(new Random().nextInt(200));bookInfo.setPrice(new BigDecimal(new Random().nextInt(100)));bookInfo.setPublish("出版社"+i);bookInfo.setStatus(i%5==0?2:1);bookInfos.add(bookInfo);}return bookInfos;}
}

 三、分层思想

MVC也是有分层的思想(过时),最后最好是要把代码分层,现在牛逼的思想

三层架构:
1.表现层

接受请求,返回结果

2.业务逻辑层

业务的逻辑处理,主要处理业务相关的逻辑

3.数据层

处理数据,包含数据的存储,获取(增删改查)

Control:接受请求,参数是否合法,结果响应

Service:真正干活部分

Dao:数据部分

然后我们要把上面的代码通过架构的思想,把它给变成架构中有层次的代码

Control->Service->Dao

层次的调用关系

Control

package com.example.demo.demos.book.controller;import com.example.demo.demos.book.BookInfo;
import com.example.demo.demos.book.service.BookService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;@RestController
@RequestMapping("/book")
public class BookController {private BookService bookService=new BookService();@RequestMapping("/getBookList")public List<BookInfo> getBookList() {//1.获取图书的数据//2.对图书数据进行修改,针对状态码数字(0:有货,1:没货这种)进行改变,把状态码数字转换成中文//3.返回数据List<BookInfo>bookInfos=bookService.getBookList();return bookInfos;}}

Dao

package com.example.demo.demos.book.dao;import com.example.demo.demos.book.BookInfo;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class BookDao {public List<BookInfo> mockData() {List<BookInfo> bookInfos = new ArrayList<>(15);//对于已知数据量,或者大概知道这个集合的数据量时,创建list时,建议指定初始化容量for (int i = 0; i < 15; i++) {BookInfo bookInfo=new BookInfo();bookInfo.setId(i);bookInfo.setBookName("图书"+i);bookInfo.setAuthor("作者"+i);bookInfo.setCount(new Random().nextInt(200));bookInfo.setPrice(new BigDecimal(new Random().nextInt(100)));bookInfo.setPublish("出版社"+i);bookInfo.setStatus(i%5==0?2:1);bookInfos.add(bookInfo);}return bookInfos;}
}

Service

package com.example.demo.demos.book.service;import com.example.demo.demos.book.BookInfo;
import com.example.demo.demos.book.dao.BookDao;import java.util.List;public class BookService {private BookDao bookDao=new BookDao();public List<BookInfo> getBookList() {List<BookInfo> bookInfos = bookDao.mockData();for (BookInfo bookInfo : bookInfos) {if (bookInfo.getStatus() == 1) {bookInfo.setStatusCN("可借阅");} else {bookInfo.setStatusCN("不可借阅");}}return bookInfos;}
}

这样代码就符合三层架构的思想了

相关文章:

Spring第三课,Lombok工具包下载,对应图书管理系统列表和登录界面的后端代码,分层思想

目录 一、Lombok工具包下载 二、前后端互联的图书管理系统 规范 三、分层思想 三层架构&#xff1a; 1.表现层 2.业务逻辑层 3.数据层 一、Lombok工具包下载 这个工具包是为了做什么呢&#xff1f; 他是为了不去反复的设置setting and getting 而去产生的工具包 ⚠️工具…...

DDoS高防IP到底是什么?

DDoS高防IP是提供一个带防御的IP&#xff0c;主要是针对网络中的DDoS攻击进行保护&#xff0c;是针对互联网服务器遭受大流量的DDoS攻击后&#xff0c;导致服务不可用的情况下&#xff0c;用户可以通过配置高防IP&#xff0c;将攻击流量引流到高防IP上&#xff0c;从而确保源站…...

el-row错位问题解决

<el-row type"flex" style"flex-wrap:wrap">...

torch indices x[indices] 内存不足崩溃,python进程锁报错。

报错 Process Process-167: Traceback (most recent call last):File "/usr/lib/python3.10/multiprocessing/process.py", line 317, in _bootstraputil._exit_function()File "/usr/lib/python3.10/multiprocessing/util.py", line 360, in _exit_funct…...

第二证券:机构争分夺秒抢滩 金融大模型落地为时尚早

本年以来&#xff0c;大模型席卷金融业&#xff0c;一夜之间&#xff0c;简直悉数金融场景都在探索适配大模型接口。但是&#xff0c;志向丰满&#xff0c;实践骨感。有大型金融组织IT部分人士比方&#xff0c;金融大模型从战略规划到安顿落地&#xff0c;有着从“卖家秀”走到…...

C#WPF使用MaterialDesign 显示带遮罩的对话框

第一步定义对话框 <UserControlx:Class="TemplateDemo.Views.Edit.UCEditUser"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.m…...

Nuxt.js:下一代Web开发框架的革命性力量

文章目录 一、Nuxt.js简介二、Nuxt.js的特点1. 集成Vue.js和Node.js2. 自动代码分割和优化3. 服务端渲染&#xff08;SSR&#xff09;4. 强大的路由管理5. 丰富的插件系统 三、Nuxt.js的优势1. 提高开发效率2. 降低维护成本3. 提高用户体验 四、Nuxt.js在实际应用中的案例1. 电…...

【JavaEE初阶】死锁问题

目录 一、死锁的三种典型场景 1、一个线程&#xff0c;一把锁 2、两个线程&#xff0c;两把锁 3、N个线程&#xff0c;M把锁 死锁&#xff0c;是多线程代码中的一类经典问题。我们知道加锁是能解决线程安全问题的&#xff0c;但是如果加锁的方式不当&#xff0c;就可能产生死…...

uniapp 打包的 IOS打开白屏 uniapp打包页面空白

uniapp的路由跟vue一样,有hash模式和history模式, 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。 如果不想要很丑的 hash,我们可以用路由的 history 模式,这种模式充分利用 history.pushState API 来完成 URL 跳转而无须重新加载页面。…...

在 Redis 中使用 JSON 文档:命令行界面(CLI)和 Navicat 集成

Redis&#xff0c;因其极高的性能而闻名&#xff0c;是一款多功能的 NoSQL 数据库&#xff0c;擅长处理键值对。虽然 Redis主要用于处理简单数据结构&#xff0c;但是同样支持更多复杂的数据类型&#xff0c;如列表、集合甚至是 JSON 文件。在本文&#xff0c;我们将深入到 Red…...

Win Server 2019远程桌面服务部署

一、添加远程桌面授权服务 服务器管理 - 添加角色和功能打开“添加角色和功能向导”窗口&#xff0c;选择基于角色或给予功能安装&#xff1a; 打开服务器管理&#xff0c;打开角色和功能&#xff0c;添加远程回话主机和远程桌面授权 image.png 以上配置完成后使用期限为120…...

vue3-在自定义hooks使用useRouter 报错问题

文章目录 前言一、报错分析报错的Vue warn截图&#xff1a;查看文档 二、那么在hook要怎么引入路由呢&#xff1f; 前言 记录在vue3项目中&#xff0c;hook使用useRouter 报错问题 一、报错分析 报错的Vue warn截图&#xff1a; 警告 inject() can only be used inside setup…...

深度学习框架:Pytorch与Keras的区别与使用方法

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 文章目录 Pytorch与Keras介绍 Pytorch 模型定义 模型编译 模型训练 输入格式 完整代码 Keras 模型定义 模型编译 模型训练 输入格式 完整代…...

1145. 北极通讯网络(Kruskal,并查集维护)

北极的某区域共有 n 座村庄&#xff0c;每座村庄的坐标用一对整数 (x,y) 表示。 为了加强联系&#xff0c;决定在村庄之间建立通讯网络&#xff0c;使每两座村庄之间都可以直接或间接通讯。 通讯工具可以是无线电收发机&#xff0c;也可以是卫星设备。 无线电收发机有多种不…...

【23-24 秋学期】NNDL 作业9 RNN - SRN

简单循环网络&#xff08;Simple Recurrent Network&#xff0c;SRN&#xff09;只有一个隐藏层的神经网络&#xff0e; 目录 1. 实现SRN &#xff08;1&#xff09;使用Numpy &#xff08;2&#xff09;在1的基础上&#xff0c;增加激活函数tanh &#xff08;3&#xff0…...

Docker + Jenkins + Nginx实现前端自动化部署

目录 前言一、前期准备工作1、示例环境2、安装docker3、安装Docker Compose4、安装Git5、安装Nginx和Jenkinsnginx.confdocker-compose.yml 6、启动环境7、验证Nginx8、验证Jenkins 二、Jenkins 自动化部署配置1、设置中文2、安装Publish Over SSH、NodeJS&#xff08;1&#x…...

文生视频的发展史及其原理解析:从Gen2、Emu Video到PixelDance、SVD、Pika 1.0

前言 考虑到文生视频开始爆发&#xff0c;比如11月份就是文生视频最火爆的一个月 11月3日&#xff0c;Runway的Gen-2发布里程碑式更新&#xff0c;支持4K超逼真的清晰度作品(runway是Stable Diffusion最早版本的开发商&#xff0c;Stability AI则开发的SD后续版本)11月16日&a…...

【python+Excel】读取和存储测试数据完成接口自动化测试

http_request2.py用于发起http请求 #读取多条测试用例 #1、导入requests模块 import requests #从 class_12_19.do_excel1导入read_data函数 from do_excel2 import read_data from do_excel2 import write_data from do_excel2 import count_case #定义http请求函数COOKIENon…...

WordPress插件大全-免费的WordPress插件汇总

随着互联网的不断发展&#xff0c;网站建设变得日益普及。对于大多数人而言&#xff0c;WordPress是一个熟悉且易于使用的网站建设平台。然而&#xff0c;有时候我们可能会觉得WordPress的功能还不够满足我们的需求&#xff0c;这时候&#xff0c;插件就成了解决问题的得力工具…...

STM32通讯设计

STM32通讯设计 通讯流程STM32程序 通讯流程 1.使用HT2202芯片配置为主机接收&#xff08;轮询模式&#xff09;。 2.将STM32芯片配置为从机发送&#xff0c;中断模式下发送固定数据。 3.如果HT2202芯片能够收到STM32发送的数据则通讯成功&#xff0c;否则通讯失败。 STM32程序…...

特定域名的proxy访问

不想破坏现有的proxy规则&#xff1b;某些域名需要proxy才可以上。 使用gost中的ss&#xff0c;简单搭建proxy&#xff1a;gost文档&#xff1a;https://v2.gost.run/ss/1. gost配置 服务端&#xff1a; gost -Lss://aes-128-gcm:password:8361客户端&#xff08;windows&#…...

从理论到实践:基于CompressAI库的端到端图像压缩模型部署指南

1. 为什么需要端到端图像压缩&#xff1f; 在传统的图像压缩领域&#xff0c;JPEG、PNG这些格式已经统治了几十年。但如果你仔细观察&#xff0c;会发现这些算法本质上都是手工设计的——离散余弦变换、量化表、霍夫曼编码&#xff0c;每个模块都是人为设定的规则。这就好比用…...

Vibe Coding 有哪些实用技巧?这篇文章讲透工作流、提示词和避坑方法

Vibe Coding 是什么&#xff1f;一篇讲清它的技巧、工作流与避坑方法 这两年&#xff0c;AI 编程工具越来越强&#xff0c;很多开发者开始用自然语言驱动代码生成。围绕这种开发方式&#xff0c;一个很火的词出现了&#xff1a;Vibe Coding。 简单说&#xff0c;Vibe Coding 就…...

3步打造waifu2x-caffe轻量化部署方案:图像增强绿色版打包全流程

3步打造waifu2x-caffe轻量化部署方案&#xff1a;图像增强绿色版打包全流程 【免费下载链接】waifu2x-caffe waifu2xのCaffe版 项目地址: https://gitcode.com/gh_mirrors/wa/waifu2x-caffe waifu2x-caffe是一款基于深度学习的图像增强工具&#xff0c;能够通过AI算法实…...

高效全方位网页资源捕获方案:猫抓扩展技术解析与应用指南

高效全方位网页资源捕获方案&#xff1a;猫抓扩展技术解析与应用指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 引言&#xff1a;网页资源获取…...

5分钟快速解锁QQ音乐加密文件:qmc-decoder终极使用指南

5分钟快速解锁QQ音乐加密文件&#xff1a;qmc-decoder终极使用指南 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾经在QQ音乐下载了喜欢的歌曲&#xff0c;却发现…...

Lepton AI农业监测:作物生长分析服务构建实践

Lepton AI农业监测&#xff1a;作物生长分析服务构建实践 【免费下载链接】leptonai A Pythonic framework to simplify AI service building 项目地址: https://gitcode.com/gh_mirrors/le/leptonai Lepton AI是一个Pythonic框架&#xff0c;专为简化AI服务构建而设计&…...

终极指南:如何掌握Ramjet动画中元素堆叠顺序实现丝滑变换效果

终极指南&#xff1a;如何掌握Ramjet动画中元素堆叠顺序实现丝滑变换效果 【免费下载链接】ramjet Morph DOM elements from one state to another with smooth animations and transitions 项目地址: https://gitcode.com/gh_mirrors/ra/ramjet Ramjet是一个强大的Java…...

电力设施智能检测:TTPLA数据集赋能电网巡检自动化全流程指南

电力设施智能检测&#xff1a;TTPLA数据集赋能电网巡检自动化全流程指南 【免费下载链接】ttpla_dataset aerial images dataset on transmission towers and power lines 项目地址: https://gitcode.com/gh_mirrors/tt/ttpla_dataset 在电力行业数字化转型进程中&…...

ClaimsPrincipal序列化为Json的正确姿势

第二步&#xff0c;理解三者的关系 1. Claim&#xff1a;声明的基本单元 职责 表示一个键值对形式的声明&#xff08;如 "name" "Alice"、"role" "Admin"&#xff09;。不仅包含类型&#xff08;Type&#xff09;和值&#xff08…...