• 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

    登录界面的后段代码显示

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

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

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

    Book对象

    1. package com.example.demo.demos.web;
    2. import lombok.Data;
    3. import java.math.BigDecimal;
    4. @Data
    5. public class BookInfo {
    6. private Integer id;
    7. private String bookName;
    8. private String author;
    9. private Integer count;
    10. private BigDecimal price;
    11. private String publish;
    12. //1.表示可借阅,2.不可借阅
    13. private Integer status;
    14. private String statusCN;
    15. }

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

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

    1. package com.example.demo.demos.web;
    2. import org.springframework.web.bind.annotation.RequestMapping;
    3. import org.springframework.web.bind.annotation.RestController;
    4. import java.math.BigDecimal;
    5. import java.util.ArrayList;
    6. import java.util.List;
    7. import java.util.Random;
    8. @RestController
    9. @RequestMapping("/book")
    10. public class BookController {
    11. @RequestMapping("/getBookList")
    12. public List<BookInfo> getBookList() {
    13. //1.获取图书的数据
    14. //2.对图书数据进行修改,针对状态码数字(0:有货,1:没货这种)进行改变,把状态码数字转换成中文
    15. //3.返回数据
    16. List<BookInfo> bookInfos = mockData();
    17. for (BookInfo bookInfo : bookInfos) {
    18. if (bookInfo.getStatus() == 1) {
    19. bookInfo.setStatusCN("可借阅");
    20. } else {
    21. bookInfo.setStatusCN("不可借阅");
    22. }
    23. }
    24. return bookInfos;
    25. }
    26. private List<BookInfo> mockData() {
    27. List<BookInfo> bookInfos = new ArrayList<>(15);
    28. //对于已知数据量,或者大概知道这个集合的数据量时,创建list时,建议指定初始化容量
    29. for (int i = 0; i < 15; i++) {
    30. BookInfo bookInfo=new BookInfo();
    31. bookInfo.setId(i);
    32. bookInfo.setBookName("图书"+i);
    33. bookInfo.setAuthor("作者"+i);
    34. bookInfo.setCount(new Random().nextInt(200));
    35. bookInfo.setPrice(new BigDecimal(new Random().nextInt(100)));
    36. bookInfo.setPublish("出版社"+i);
    37. bookInfo.setStatus(i%5==0?2:1);
    38. bookInfos.add(bookInfo);
    39. }
    40. return bookInfos;
    41. }
    42. }

     三、分层思想

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

    三层架构:
    1.表现层

    接受请求,返回结果

    2.业务逻辑层

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

    3.数据层

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

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

    Service:真正干活部分

    Dao:数据部分

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

    Control->Service->Dao

    层次的调用关系

    Control

    1. package com.example.demo.demos.book.controller;
    2. import com.example.demo.demos.book.BookInfo;
    3. import com.example.demo.demos.book.service.BookService;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import org.springframework.web.bind.annotation.RestController;
    6. import java.math.BigDecimal;
    7. import java.util.ArrayList;
    8. import java.util.List;
    9. import java.util.Random;
    10. @RestController
    11. @RequestMapping("/book")
    12. public class BookController {
    13. private BookService bookService=new BookService();
    14. @RequestMapping("/getBookList")
    15. public List getBookList() {
    16. //1.获取图书的数据
    17. //2.对图书数据进行修改,针对状态码数字(0:有货,1:没货这种)进行改变,把状态码数字转换成中文
    18. //3.返回数据
    19. ListbookInfos=bookService.getBookList();
    20. return bookInfos;
    21. }
    22. }

    Dao

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

    Service

    1. package com.example.demo.demos.book.service;
    2. import com.example.demo.demos.book.BookInfo;
    3. import com.example.demo.demos.book.dao.BookDao;
    4. import java.util.List;
    5. public class BookService {
    6. private BookDao bookDao=new BookDao();
    7. public List getBookList() {
    8. List bookInfos = bookDao.mockData();
    9. for (BookInfo bookInfo : bookInfos) {
    10. if (bookInfo.getStatus() == 1) {
    11. bookInfo.setStatusCN("可借阅");
    12. } else {
    13. bookInfo.setStatusCN("不可借阅");
    14. }
    15. }
    16. return bookInfos;
    17. }
    18. }

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

  • 相关阅读:
    为什么使用Go语言做web开发?
    SpringCloud微服务多应用脚手架的搭建与部署
    chrome 浏览器 f12 如何查看 websocket 消息?
    lightdb21.3-新增优化器提示no_merge
    算法随想录算法训练营第四十四天|1143.最长公共子序列 1035.不相交的线 53. 最大子序和 动态规划
    5. 最长回文子串
    读书笔记:《过度的医疗》
    flink1.18.0 sql-client报错
    大整数相加,相减,相乘,大整数与普通整数的相乘,相除
    并发编程 --- 信号量线程同步
  • 原文地址:https://blog.csdn.net/weixin_72953218/article/details/134651359