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

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

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

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

相关文章
|
17天前
|
小程序 数据可视化 Java
Java+后端Spring boot 开发的全套UWB定位方案,0.1米高精度定位系统源码
UWB定位系统由硬件定位设备、定位引擎和应用软件组成。该定位系统应用软件支持PC端和移动端访问,并提供位置实时显示、历史轨迹回放、人员考勤、电子围栏、行为分析、智能巡检等功能。定位精度高达10cm,同时具备高动态、高容量、低功耗的优点。应用场景包括:隧道、化工、工厂、煤矿、工地、电厂、养老、展馆、整车、机房、机场等。
41 8
|
7天前
|
存储 Java 数据安全/隐私保护
Spring Boot中实现邮箱登录/注册接口
Spring Boot中实现邮箱登录/注册接口
|
5天前
|
存储 安全 Java
Spring Security 6.x OAuth2登录认证源码分析
上一篇介绍了Spring Security框架中身份认证的架构设计,本篇就OAuth2客户端登录认证的实现源码做一些分析。
31 2
Spring Security 6.x OAuth2登录认证源码分析
|
1天前
|
缓存 NoSQL Java
后端开发中缓存的作用以及基于Spring框架演示实现缓存
后端开发中缓存的作用以及基于Spring框架演示实现缓存
7 1
|
13天前
|
监控 Java 关系型数据库
java版MES系统源码,后端采用 Spring Boot 多模块架构
MES系统采用Vue3的vue-element-plus-admin为后台,Spring Boot多模块架构,支持MySQL、Oracle等数据库,具备SaaS多租户功能。核心功能包括车间计划排程、工艺流程配置、生产质量管理、进度追踪、库存和排班管理等,全面覆盖生产运营关键环节。
java版MES系统源码,后端采用 Spring Boot 多模块架构
|
20天前
|
JSON 前端开发 Java
Spring第四课,MVC终章,应用分层的好处,总结
Spring第四课,MVC终章,应用分层的好处,总结
|
1天前
|
消息中间件 Java Spring
JavaWeb后端开发Spring框架之消息 消息队列案例--订单短信通知
JavaWeb后端开发Spring框架之消息 消息队列案例--订单短信通知
10 0
|
1天前
|
消息中间件 存储 Java
后端开发Spring框架之消息介绍 同步异步 JMS AMQP MQTT Kafka介绍
后端开发Spring框架之消息介绍 同步异步 JMS AMQP MQTT Kafka介绍
4 0
|
1月前
|
安全 关系型数据库 MySQL
node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)
node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)
41 3
|
1月前
|
JSON JavaScript Java
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
85 0