[后端开发]一

Java后端接口

新建SpringBoot项目

  • IDEA中Spring Initializer(JDK1.8)新建项目

  • groupid:com.markerhub

    • Artifact:vueblog
    • Packa在ge:com.markerhub
  • 选择jar包

    • Developper Tools

      • SpringBoot DevTools
      • Lombok
    • web

      • Spring web
    • SQL

      • MySQL Driver
  • Project name : vue blog Project location:(要注意位置)

  • 在搭建的pom.xml中< parent>将version修改为2.2.6

    • devtools:项目的热加载重启插件
    • lombok:简化代码的工具

<dependency>
    
<groupId>
org.springframework.boot
</groupId>
    
<artifactId>
spring-boot-starter-web
</artifactId>
</dependency>
<dependency>
    
<groupId>
org.springframework.boot
</groupId>
    
<artifactId>
spring-boot-devtools
</artifactId>
    
<scope>
runtime
</scope>
    
<optional>
true
</optional>
</dependency>
<dependency>
    
<groupId>
org.projectlombok
</groupId>
    
<artifactId>
lombok
</artifactId>
    
<optional>
true
</optional>
</dependency>

  • 删除掉不需要的jar包
    (目录.mvm,.gitignore,mvnw,mvnw.cmd)

整合MybatisPlus

导入jar包

  • pom中导入mybatis plus的jar包,因为后面会涉及到代码生成,所以我们还需要导入页面模板引擎,这里我们用的是freemarker
  • 在pom.xml中引入MP的依赖版本为3.2.0
  • mp代码生成器的依赖

<!--mp-->
<dependency>
    
<groupId>
com.baomidou
</groupId>
    
<artifactId>
mybatis-plus-boot-starter
</artifactId>
    
<version>
3.2.0
</version>
</dependency>
<dependency>
    
<groupId>
org.springframework.boot
</groupId>
    
<artifactId>
spring-boot-starter-freemarker
</artifactId>
</dependency>
<dependency>
    
<groupId>
mysql
</groupId>
    
<artifactId>
mysql-connector-java
</artifactId>
    
<scope>
runtime
</scope>
</dependency>
<!--mp代码生成器-->
<dependency>
    
<groupId>
com.baomidou
</groupId>
    
<artifactId>
mybatis-plus-generator
</artifactId>
    
<version>
3.2.0
</version>
</dependency>

写Springboot配置文件

  • 在src/main/java/resources下,原生为application.properties,改为application.yml

    • rename文件,选中文件—refactor-rename(shift+F6)
    • 配置了数据库信息
    • mp的mapper的xml文件扫描路径
    • 启动端口
# DataSource Config
spring:
  datasource:
  	driver-class-name: com.mysql.cj.jdbc.Driver
  	url:jdbc:mysql://localhost:3306/vuebloguseUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
   username: root
   password:admin
mybatis-plus:
	mapper-locations: classpath*:/mapper/**Mapper.xml
server:
  port:8081

  • 这里需要注意的是,数据库提前在MySQL中生成,一个名为vueblog的库,有m_blog和 m_user两张表

开启mapper接口扫描,添加分页插件

新建一个包:通过@mapperScan注解指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类; PaginationInterceptor是一个分页插件(这些过程都是官网给出的过程,只需复制即可)

  • 在/src/main/java下的com.markerhub包上新建一个java class的同时建一个包,“config.MybatisPlusConfig”
    在这里插入图片描述

代码生成

  • 若未再用其他插件,那么现在就已经可以使用mybatis plus了

  • 官方提供了一个代码生成器,写上自定义参数后,可以直接根据数据库表信息生成entity、service、mapper等接口和实现类

  • 该代码生成工具直接在github寻找即可,此处直接用线程的类加入到项目中(下图中的CodeGeneration)

    • 复制该CodeGeneration.java,在项目中的/src/main/java/com.markerhub上右键直接paste添加类

    在这里插入图片描述

    • 在复制进后,对其源码进行修改,主要是数据源部分的配置,数据库的选择,用户密码
      (注意,一定不要轻易更改工作目录,随便移动)

-运行该类
在这里插入图片描述

  • 输入表名
    在这里插入图片描述

  • 项目目录会自动生成controlller,entity,mapper,service
    在这里插入图片描述
    经过这一步,MybatisPlus已经继承到SpringBoot框架中

测试

注意,先前在CodeGenerator类中执行了该类自动生成了代码,在IDEA右上角显示未为在这里插入图片描述

编写测试类

在UserController中编写测试方法
在这里插入图片描述

运行

注意在右上角更该运行类
在这里插入图片描述
在页面上键入localhost:8081/use/index/1,页面上有一条查询记录,即部署成功

统一结果封装

  • 用一个Result类进行异步返回的统一结果封装,一般来说有三个元素是必要的

    • 是否成功,可用code表示(如200表示成功,400表示异常)
    • 结果消息
    • 结果数据
  • 前后端分离时,后端返回给前端的数据前端可以弹窗显示

      	public class Result implements Serializable {
    
      	private int code; // 200是正常,非200表示异常
      	private String msg;
      	private Object data;
      	
      	public static Result succ(Object data) {
      	    return succ(200, "操作成功", data);
      	}
      	
      	public static Result succ(int code, String msg, Object data) {
      	    Result r = new Result();
      	    r.setCode(code);
      	    r.setMsg(msg);
      	    r.setData(data);
      	    return r;
      	}
      	//失败时,code定为400,且此时msg最为重要
      	public static Result fail(String msg) {
      	    return fail(400, msg, null);
      	}
      	
      	public static Result fail(String msg, Object data) {
      	    return fail(400, msg, data);
      	}
      	
      	public static Result fail(int code, String msg, Object data) {
      	    Result r = new Result();
      	    r.setCode(code);
      	    r.setMsg(msg);
      	    r.setData(data);
      	    return r;
      	}	
      }		
    
  • @Data注解,需要lombok插件实现,能够在我们编译源码的时候自动帮我们生成这些方法。

    • @Data可为类快速生成get/set方法无需自实现

    • 还会为类提供 equals()、hashCode()、toString() 方法

    • 使用该注解时首先要添加jar包或maven依赖,

      • 在Settings/Plugins 安装Lombok
      • 在Settings/Build,Execution,Deployment / compiler / Annotation Processors中Enable annotation processing并Obtain processor from project classpath,然后Apply,Ok即可

整合shiro+jwt,会话共享

Shiro整合jwt逻辑

登陆逻辑
  • 前端将用户名,密码传给后端

  • 后端进行密码校验

    • 错误密码则抛出异常
    • 正确密码则生成jwt
  • 后端将jwt返回给前端,前端做相应处理

资源访问逻辑
  • (登陆处理)用户访问接口,进入接口前定义了一个jwt filter

    • 有jwt,则交给shiro进行登陆处理

      • jwt异常(错误,过期)抛出异常,全局异常捕获处理
      • jwt正常,尝试访问接口(Controller)
    • 无jwt,尝试访问接口(Controller)

  • (权限注解过滤逻辑)在访问接口前进行前置拦截(注解过滤),通过Shiro注解实现

    • 无权限时,抛出异常 ,全局异常捕获处理
    • 有权限,真正进行访问接口(Controller)
跨域问题
  • 由于采用jwt做token验证,需要在请求头中添加了一个“Authorization:jwt",后端响应时要在响应头中加上该自己段
  • 虽然在整个业务逻辑中HTTP请求只有GET和POST,但是由于自定义了头导致变成复杂请求,因此还需要在处GET,POST,非自定义头的跨
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值