目录
一、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;} }
这样代码就符合三层架构的思想了