搭建骨架

JAVA-SpringBoot学习(开始于2022/9/18)

JAVA基础语法学习

  • java中的逻辑判别式的值只能是boolean值

  • java倒序排序:Arrays.sort(a,(x,y) -> y-x),自定义函数不支持默认类型,需要用对象,int => Integer

  • java判断字符串是否相等,使用api =>"xxx".equals(op);因为字符串可能是空的

  • 很好的链表题目

框架初始

前后端分离的概念

 

前后端分离的"前"特指浏览器端(或客户端),直接呈现给用户的;后端是服务器端,处理业务逻辑和数据,不呈现给用户。

前后端不分离返回给用户的是页面(html)

 

遇到的问题:

  • 创建backend后运行文件按钮不亮

    解决方法:将Project SDK: 设置为1.8版本.

    将Project language level: 设置为对应的8版本.

    在我们JavaSE文件夹下创建文件夹名为out , 并将Project compiler output: 设置为指向我们创建的out文件夹.

    最后点Apply(应用) , 然后在点OK就行了. 原文链接:

Django的模式:

 

Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:

M 代表模型(Model):负责业务对象和数据库的关系映射(ORM)。

T 代表模板 (Template):负责如何把页面展示给用户(html)。

V 代表视图(View):负责业务逻辑,并在适当时候调用Model和Template。

M-Model模型 (数据存储层,和数据库打交道。相当于mvc的m)

T-Template 模板(模板层,用来处理页面的显示。相当于mvc的v)

V-View 视图(业务逻辑层,处理具体的业务逻辑,如下图所示,它的作用是通过请求响应获取Model 层,把Model层与 Template层联通。相当于mvc的c)

Java的模式

 

M-model模型(数据存储层,和数据库打交道)

V-view视图(视图层,用户看到并与之交互的界面,如由html元素组成的网页界面,或软件的客户端界面)

C-controler 控制器(控制层,如图下所示,控制器把视图层所给的指令用来检索数据层的数据,该层编写代码产生结果并输出)

项目流程

 

用户会先将代码下载到自己的浏览器内,然后执行代码;根据ajaxurl进行找寻,先找到/pk/目录下得Controller,找到/botgetinfo/并调用相对应得函数,由其返回的函数进行return,并传到前端渲染;

 

SpringBoot解决跨域问题

添加配置类:CorsConfig

package com.kob.backend.config;

import org.springframework.context.annotation.Configuration;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Configuration
public class CorsConfig implements Filter {
   @Override
   public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
       HttpServletResponse response = (HttpServletResponse) res;
       HttpServletRequest request = (HttpServletRequest) req;

       String origin = request.getHeader("Origin");
       if(origin!=null) {
           response.setHeader("Access-Control-Allow-Origin", origin);
      }

       String headers = request.getHeader("Access-Control-Request-Headers");
       if(headers!=null) {
           response.setHeader("Access-Control-Allow-Headers", headers);
           response.setHeader("Access-Control-Expose-Headers", headers);
      }

       response.setHeader("Access-Control-Allow-Methods", "*");
       response.setHeader("Access-Control-Max-Age", "3600");
       response.setHeader("Access-Control-Allow-Credentials", "true");

       chain.doFilter(request, response);
  }

   @Override
   public void init(FilterConfig filterConfig) {

  }

   @Override
   public void destroy() {
  }
}

 

 

 

创建项目静态地图

项前端框架

创建蛇

 

之前地图的两条蛇初始坐标为(11,1)和(1,11),有可能会使两条蛇同时进入一个格子,对优势方不利

解释:刚开始坐标之和都为偶数,所以之后会按照奇数->偶数->奇数.......

解决方式:将列数变为偶数,但变成这样就不再是轴对称,但可以是中心对称;

 

配置SpringBoot在pom.xml文件中添加依赖

 

在pom.xml文件中添加依赖: Spring Boot Starter JDBC Project Lombok 帮我们简化代码帮我自动写一些构造函数 MySQL Connector/J mybatis-plus-boot-starter MyBatis Plus 帮我们默认写好了许多sql语句我们不需要写了 mybatis-plus-generator spring-boot-starter-security 后面两个先别装 jjwt-api

SpringBoot中关于层的概念

 

数据库里的表user类似于Java中的class,

pojo层其实就是直接将这个表转化成class,表的名称直接定义成class名称就可以了。

mapper层 对于class里面的增删改查,最终所有数据都需要存到数据库上, 对于class的对象的增删改查都需要将数据存到数据库里 都需要用到sql语句,所以mapper层就是将class里面的增删改查操作crud, 转化成SQL语句。

service层,实现具体业务可以用多个不同的mapper操作 mapper类似于一些最基本的操作, service可以将最基本的操作组合实现一些具体的业务

Controller,将前端的请求以及请求中的参数接收然后选择将这些参数传给哪个service 将service的返回结果再返回给前端,调度service

 

@RestController用在类上,标注类里面的所有方法不用被视图解析解析,而是直接返回数据

@Controller

表明这是Controller类,MVC层中的Controller层。

用户前端发起请求,中央调度器DispatcherServlet就会根据处理器映射器找到标注了@Controller注解的类,从而找到相应的处理器方法来处理请求。

sevice层的增删用户

 


@RestController

public class UserController {

   //在Controller里面调用数据库接口(UserMapper)
   @Autowired
   UserMapper userMapper;
   // 是哪种类型的调用就GET/POST/DELETE/+Mapping,此处用GET因为容易调试;
   @GetMapping("/user/all/")
   public List<User> getall() {
       return userMapper.selectList(null);
  }
   // 在Springboot里面传参数用{}
   @GetMapping("user/{userId}/")
   public User getuser(@PathVariable int userId) {
       QueryWrapper<User> queryWrapper = new QueryWrapper<>();
       queryWrapper.eq("id",userId);
       return userMapper.selectOne(queryWrapper);
  }
   //插入一条数据,其实是将路径里面的字符看做id,username,password;
   @GetMapping("/user/add/{userId}/{username}/{password}/")
   public String addUser(
           @PathVariable int userId,
           @PathVariable String username,
           @PathVariable String password) {
       User user = new User(userId,username,password);
       userMapper.insert(user);

       return "Add Successfuly!";
  }
   @GetMapping("user/delete/{userId}")
   public String deleteUser(@PathVariable int userId){
       userMapper.deleteById(userId);
       return "delete";
  }
}
数据库查询流程

 

根据路径匹配函数,然后调用UserMapper函数UserMapper函数是我们自己定义在/mapper/UserMapper/中的,然后这个函数实现了很多api

实现SpringSecurity之后

 

为了能够让数据库的用户访问,需要配置一下

实现service.impl.UserDetailsServiceImpl类,继承自UserDetailsService接口,用来接入数据库信息 实现config.SecurityConfig类,用来实现用户密码的加密存储

 

整体框架

 

传统session验证

42c3e1bc169753dca91c6691ad0c9fe.png

存放公开链接的地方

 

在Config/Securityconfig/里面

image-20220926231654022

 

Controler 用来调用Service的,在Service里面写一个接口,在Service/impl里面写一个接口的具体实现,Controller调用接口

posted @ 2022-10-30 19:16  似是笼中雀  阅读(24)  评论(0)    收藏  举报