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

news2024/11/17 3:33:03

目录

一、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;
    }
}

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

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

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

相关文章

我若拿出这个,阁下该如何应对,整理常用的Python库!

Requests Requests是一个常用的Python第三方库&#xff0c;用于发送HTTP请求。它提供了简洁而直观的API&#xff0c;使得发送HTTP请求变得非常方便。 使用Requests库可以实现以下功能&#xff1a; 发送GET请求&#xff1a;使用requests.get(url, paramsNone, **kwargs)方法发…

vue2全局混入正确使用场景和错误场景示例

全局混入在 Vue.js 中的使用场景需要谨慎考虑&#xff0c;因为它会影响所有组件。以下是一些正确和错误的使用场景的例子&#xff1a; 正确的使用场景&#xff1a; 全局工具方法&#xff1a; // 正确的使用场景 Vue.mixin({methods: {$formatDate: function (date) {// 格式化…

K8s 多租户方案的挑战与价值

在当今企业环境中&#xff0c;随着业务的快速增长和多样化&#xff0c;服务器和云资源的管理会越来越让人头疼。K8s 虽然很强大&#xff0c;但在处理多个部门或团队的业务部署需求时&#xff0c;如果缺乏有效的多租户支持&#xff0c;在效率和资源管理方面都会不尽如人意。 本…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之存储管理(1)》(14)

[TOC](《Linux操作系统原理分析之存储管理》&#xff08;14&#xff09; 5 存储管理5.1 存储管理的目的和功能5.1.1 存储管理目的&#xff1a;5.1.2 存储管理的主要功能5.1.3 存储管理主要是对用户区进行管理 5.2 地址重定位5.2.1 作业的地址空间5.2.2&#xff0e;地址映射&…

企业微信小程序通知消息

使用企业微信发送应用消息中的小程序通知消息&#xff08;只允许绑定了小程序的应用发送&#xff09;。 目录 请求方式 请求地址 发送通知 参数说明 请求实例 返回 返回示例 返回参数说明 实现效果 总结 请求方式 POST 请求地址 https://qyapi.weixin.qq.com/cgi-b…

【EasyExcel实践】万能导出,一个接口导出多张表以及任意字段(可指定字段顺序)

文章目录 前言正文一、POM依赖二、核心Java文件2.1 自定义表头注解 ExcelColumnTitle2.2 自定义标题头的映射接口2.3 自定义有序map存储表内数据2.4 表头工厂2.5 表flag和表头映射枚举2.6 测试用的实体2.6.1 NameAndFactoryDemo2.6.2 StudentDemo 2.7 启动类2.8 测试控制器 三、…

关于UART、RS232、RS485的区别与理解

1、UART规定了数据的格式&#xff0c;但没有规定电气的特性&#xff0c;多少伏为高电平&#xff0c;多少伏为低电平。通常我们使用单片机与电脑通信时需要一个USB转TTL模块。 2、UART存在抗干扰能力差、通信距离短&#xff08;一般不超过2~3m&#xff09;,由此产生基于串口的R…

2023 BUCT 计算方法实验报告

前言 Textlive版本&#xff1a;2023 textstudio版本&#xff1a;4.6.3 名字和日期在以下地方修改: 图片下载地址; figures.zip LiangCha_Xyy/Source - Gitee.com 如下图&#xff0c;.tex文件和figures文件夹放在同一路径下即可 .tex代码 \documentclass[UTF8]{ctexart} \usep…

Python数据分析从入门到进阶:模型评估和选择(含代码)

引言 之前我们介绍了机器学习的一些基础性工作&#xff0c;介绍了如何对数据进行预处理&#xff0c;接下来我们可以根据这些数据以及我们的研究目标建立模型。那么如何选择合适的模型呢&#xff1f;首先需要对这些模型的效果进行评估。本文介绍如何使用sklearn代码进行模型评估…

常见算法和Lambda表达式

常见算法和Lambda 常见算法 查找算法 基本查找 从0索引开始逐个查找 代码演示: package Search;import java.util.ArrayList;public class BasicSearch {public static void main(String[] args) {int[] arr {1,2,3,4,5,6,3,4,1,3};ArrayList<Integer> resArr ba…

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

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

Docker 下载加速

文章目录 方式1&#xff1a;使用 网易数帆容器镜像仓库进行下载。方式2&#xff1a;配置阿里云加速。方式3&#xff1a;方式4&#xff1a;结尾注意 Docker下载加速的原理是&#xff0c;在拉取镜像时使用一个国内的镜像站点&#xff0c;该站点已经缓存了各个版本的官方 Docker 镜…

两台电脑如何快速传输几百G文件,这款文件传输软件真快

当我们需要传输数百GB的文件时&#xff0c;使用传统工具对于大型文件传输来说往往效率低下。这些方法可能需要数小时&#xff0c;甚至数天才能完成传输。然而&#xff0c;现代生活和工作中&#xff0c;我们经常需要以更快速、更高效的方式传输大文件&#xff0c;无论是因为工作…

连锁零售企业如何提高异地组网的稳定性?

随着数字化时代的到来&#xff0c;连锁零售企业面临着日益复杂和多样化的网络挑战。连锁零售企业是在不同地理位置拥有分支机构和零售店&#xff0c;可能同城或异地&#xff0c;需要确保各个地点之间的网络连接稳定和可靠。但由于不同地区的网络基础设施差异、网络延迟和带宽限…

应用密码学期末复习(3)

目录 第三章 现代密码学应用案例 3.1安全电子邮件方案 3.1.1 PGP产生的背景 3.2 PGP提供了一个安全电子邮件解决方案 3.2.1 PGP加密流程 3.2.2 PGP解密流程 3.2.3 PGP整合了对称加密和公钥加密的方案 3.3 PGP数字签名和Hash函数 3.4 公钥分发与认证——去中心化模型 …

【小布_ORACLE笔记】Part11-5 RMAN Backups

【小布_ORACLE笔记】Part11-5 RMAN Backups 文章目录 【小布_ORACLE笔记】Part11-5 RMAN Backups1. 增量备份&#xff08;Incremental Backups)1.1差异增量备份&#xff08;Differential Incremental Backup&#xff09;1.2累积增量备份&#xff08;Cumulative Incremental Bac…

跨界融合,科技耕耘:MTX基金公司与ICG共塑全球农业科技新景观

在全球经济快速发展的当下&#xff0c;农业科技创新成为了社会进步的重要推动力。MTX基金公司对ICG的投资是在这一背景下的战略决策&#xff0c;不仅寻求经济效益&#xff0c;更承载着改善全球农业生产、实现食品安全与环境保护的使命。 1、战略投资&#xff1a;文化情怀与全球…

Python三十个常见的脚本汇总

1、冒泡排序 2、计算x的n次方的方法 3、计算a*a b*b c*c …… 4、计算阶乘 n! 5、列出当前目录下的所有文件和目录名 6、把一个list中所有的字符串变成小写&#xff1a; 7、输出某个路径下的所有文件和文件夹的路径 8、输出某个路径及其子目录下的所有文件路径 9、输出某个路…

【刷题笔记】长度最小的子数组||二分查找||边界||数组

长度最小的子数组 1 题目描述 https://leetcode.cn/problems/minimum-size-subarray-sum/ 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回…

如何用管理项目的方式管理个人任务

同样一份工作&#xff0c;有的人做起来得心应手&#xff0c;条理清晰&#xff0c;有的人却是手忙脚乱&#xff0c;苦不堪言。在凡事皆项目的时代&#xff0c;用管理项目的方法管理自己的任务&#xff0c;可能会让你的工作事半功倍。 工欲善其事&#xff0c;必先利其器&#xf…