SpringBoot后端快速搭建

SpringBoot 开发环境构建

首先创建一个maven项目

在pom.xml文件中添加以下依赖

<!-- 依赖的父级工程 -->
< parent >
< groupId >org.springframework.boot</ groupId >
< artifactId >spring-boot-starter-parent</ artifactId >
< version >2.6.6</ version >
< relativePath />
</ parent >
<!--指定 jdk 版本 -->
< properties >
< java.version >1.8</ java.version >
</ properties >
<!-- 添加基本的 springweb 依赖 -->
< dependencies >
< dependency >
< groupId >org.springframework.boot</ groupId >
< artifactId >spring-boot-starter-web</ artifactId >
</ dependency >
</ dependencies >
<!-- 打包插件 -->
< build >
< plugins >
< plugin >
< groupId >org.springframework.boot</ groupId >
< artifactId >spring-boot-maven-plugin</ artifactId >
< version >2.6.6</ version >
</ plugin >
</ plugins >
</ build >
注意一定要刷新pom.xml右上角的圆圈,否则不会将这些依赖的jar包加到项目中


如果没有显示圆圈就到右边这个 Maven组件里面找这个圆圈刷新,刷新之后 Maven会把这些依赖以及 SpringBoot一些配置给加到了这个项目中,此时的项目就是一个 SpringBoot项目.

建包


在java这个文件夹下建立以下这些包,这些包分别的名称为,dao为数据访问层(数据持久层),model专门用来存模型类,service 为业务层专门处理业务逻辑的,web为网络层用来接收请求,以及响应.
然后在这些包的同级文件夹下建立一个名为 NewsApplication 这样一个类,这个类值SpringBoot项目的启动类,在这个类上面加 @SpringBootApplication 这个注解标签,创建一个main方法,在main方法里面加这行代码,这样一个SpringBoot项目的启动类完成
SpringApplication.run(NewsApplication.class);
代码如下

java 复制代码
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/*
    spring程序启动类
 */
/*
   spring是框架的框架  封装了spring
 */
@SpringBootApplication  //自动扫描这个级的包的所有类
@MapperScan("com.ff.news.dao")//扫描这个dao的接口,生成接口的代理对象
public class NewsApplication {

    public static void main(String[] args) {
        SpringApplication.run(NewsApplication.class);

    }
}

在web包下建立一个类LoginController代码如下

java 复制代码
import com.ffyc.news.model.Admin;
import com.ffyc.news.model.Result;
import com.ffyc.news.service.LoginService;
import com.ffyc.news.util.JWTUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping(path = "/api/loginCtl")
public class LoginController {


 //   @Value("${admin.account}")
    //private String account;

    @Autowired
    LoginService loginService;


    @PostMapping(path = "/login")
    public Result login(@RequestBody Admin admin){
        admin = loginService.login(admin);
        Result result = null;
        if (admin != null){
            //登录成功生成Token
            String adminToken = JWTUtil.getToken(admin);
            admin.setAdminToken(adminToken);
            result = new Result(200,"登陆成功",admin);
        }else{
            result = new Result(201,"账号或密码错误",null);
        }

        return result;
    }
}

大家有没有发现在启动SpringBoot项目的时候,会有个Logo这个是可以换的.如图

当然这是我换过的,这个可以在这个网站找自己喜欢的logo进行更换,给大家提供这个网站

https://www.bootschool.net/ascii-art

可以在这个网页找自己喜欢的logo

我的佛祖就是这找的

在这个网站上下载好文件后,存放在 resources 目录下即可.

Spring Boot配置文件

resources 目录下创建名为 application.yml的文件

yml 是 YAML(YAML Ain't Markup Language)语言的文件,以数据为中心.

配置文件代码如下:

XML 复制代码
#配置内置服务器端口
server:
  port: 8088
#用来存储项目中需要用到的各种配置参数.  此文件用来存储配置参数
spring:
  datasource:   #给配置文件存值
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/ssmdb?serverTimezone=Asia/Shanghai
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource  # 指定数据库连接管理对象  定义数据源类型  阿里巴巴数据库连接管理对象 在 yml 文件中注册阿里数据库连接池
    initialSize: 5 #初始化时建立物理连接的个数
    maxActive: 20 #最大连接池数量

mybatis:
  type-aliases-package: com.ffyc.news.model     #配置模型类的别名
  mapper-locations: classpath:mappers/*Mapper.xml  #扫描映射文件
  configuration:
    map-underscore-to-camel-case: true  #设置数据库属性下滑线属性名转为驼峰属性名
    cache-enabled: true  #全局二级缓存开关
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # logImpl 日志实现  value="STDOUT_LOGGING"日志类型

SpringBoot 数据访问管理

数据源配置
连接数据库需要引入 jdbc 支持,在 pom.xml 中引入如下配置:

< dependency >
< groupId >org.springframework.boot</ groupId >
< artifactId >spring-boot-starter-jdbc</ artifactId >
</ dependency >
再把mysql的驱动依赖加进来
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>

SpringBoot****整合阿里数据源

导入阿里数据源 jar

<!-- 阿里巴巴数据源 数据库连接管理组件 -->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid</artifactId>

<version>1.1.10</version>

</dependency>
在 application.yml 中配置数据源信息

XML 复制代码
spring:
  datasource:   #给配置文件存值
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/ssmdb?serverTimezone=Asia/Shanghai
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource  # 指定数据库连接管理对象  定义数据源类型  阿里巴巴数据库连接管理对象 在 yml 文件中注册阿里数据库连接池
    initialSize: 5 #初始化时建立物理连接的个数
    maxActive: 20 #最大连接池数量

SpringBoot集成mybatis

导入spring集成 mybatis jar

< dependency >
< groupId >org.mybatis.spring.boot</ groupId >
< artifactId >mybatis-spring-boot-starter</ artifactId >
< version >2.1.4</ version >
</ dependency >
在 application.yml 中配置数据源信息

XML 复制代码
mybatis:
  type-aliases-package: com.ffyc.news.model     #配置模型类的别名
  mapper-locations: classpath:mappers/*Mapper.xml  #扫描映射文件
  configuration:
    map-underscore-to-camel-case: true  #设置数据库属性下滑线属性名转为驼峰属性名
    cache-enabled: true  #全局二级缓存开关
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # logImpl 日志实现  value="STDOUT_LOGGING"日志类型

再给这些包里面导入一些类dao层导入

java 复制代码
import com.ffyc.news.model.Admin;



public interface LoginDao {
   Admin login(Admin admin);

}

model包里面导入

java 复制代码
package com.ffyc.news.model;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Admin {
    private Integer id;
    private String account;
    private String password;

   /* @DateTimeFormat(pattern = "yyyy-MM-dd")//接受前端提交数据的日期格式   (把前端json日期格式转为后端Date)  转前端json(日期)到后端日期Date
    @JsonFormat(pattern = "yyyy-MM-dd")//后端向前端响应时转json时使用的日期格式    (把后端Date转为前端json日期格式)      转后端(Date)向前端的json格式*/
    private String adminToken;


}
java 复制代码
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/*
    get
    set
    toString
    equals
    hashCode
   自己管理的类
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result {
    private Integer code;
    private String message;
    private Object data;

}

service包导入

java 复制代码
import com.ffyc.news.dao.LoginDao;
import com.ffyc.news.model.Admin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional(rollbackFor = Exception.class)//事务管理  所有异常回滚事务
public class LoginService {
    @Autowired
    LoginDao loginDao;

    public Admin login(Admin admin){
        Admin admin1 = loginDao.login(admin);

        return admin1;
    }

导入lombok jar

<!-- lombok依赖包 -->

<dependency>

<groupId>org.projectlombok</groupId>

<artifactId>lombok</artifactId>

<version>1.16.10</version>

<scope>provided</scope>

</dependency>

在resources文件加下创建mappers文件夹用来放映射文件

SpringBoot 统一异常处理

在util包里面创建名为GlobalExceptionHandler类作为项目全局统一异常处理

java 复制代码
import com.ffyc.news.model.Result;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/*
全局异常处理类
 */
@RestControllerAdvice//表示此类为全局异常处理类   开启全局的异常捕获
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)//表示可以捕获任意异常   捕获任意异常
    public Result globalException(Exception e) {
         Result commonResult = new Result(500,"系统忙!"+e.getMessage(),null);
         e.printStackTrace();
        return commonResult;
    }


}

再建立一个名为interceptor 的包用来放拦截器

先放一个Token验证拦截器

java 复制代码
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ffyc.news.model.Result;
import com.ffyc.news.util.JWTUtil;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AdminTokenIntercepter implements HandlerInterceptor {

    /*
         拦截器处理方式
           当请求到达处理器前  进入到拦截器进行处理(请求)
           返回true --离开拦截器向后执行到达(目标)处理器
           返回false -- 不在向后执行


     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String adminToken = request.getHeader("adminToken");
        System.out.println(adminToken);
        if (JWTUtil.verify(adminToken)){
            return true;
        }else{
            //向前端响应
            response.setContentType("text/html;charset=uft-8");
            Result result = new Result(401,"token验证失败",null);
            response.getWriter().write(new ObjectMapper().writeValueAsString(result));

        }


        return false;//不去目标处理器
    }
}

再建立一个名为config的包用来放配置类的

先配置Token验证拦截器

java 复制代码
import com.ffyc.news.interceptor.AdminTokenIntercepter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

public class WebConfig implements WebMvcConfigurer {

    //注册配置拦截器(配置拦截器)  java代码配置简单了  (不用一边xml,一边java代码)

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        InterceptorRegistration interceptorRegistration = registry.addInterceptor(new AdminTokenIntercepter());//添加指定拦截器  配置Token拦截器
        interceptorRegistration.addPathPatterns("/api/**");//配置进入拦截器地址  (配置哪些请求进入拦截器)(/** 配置所有地址进入拦截器)
        interceptorRegistration.excludePathPatterns("/api/loginCtl/login");//配置不进入拦截器的地址 放行地址(配置哪些请求不进入拦截器)

    }
}

这样一个SpringBoot后端项目建立完成

相关推荐
芒果披萨13 分钟前
El表达式和JSTL
java·el
duration~1 小时前
Maven随笔
java·maven
zmgst1 小时前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql
跃ZHD1 小时前
前后端分离,Jackson,Long精度丢失
java
blammmp1 小时前
Java:数据结构-枚举
java·开发语言·数据结构
暗黑起源喵2 小时前
设计模式-工厂设计模式
java·开发语言·设计模式
WaaTong2 小时前
Java反射
java·开发语言·反射
狂放不羁霸2 小时前
idea | 搭建 SpringBoot 项目之配置 Maven
spring boot·maven·intellij-idea
九圣残炎2 小时前
【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目
java·算法·leetcode
wclass-zhengge2 小时前
Netty篇(入门编程)
java·linux·服务器