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后端项目建立完成

相关推荐
考虑考虑36 分钟前
JDK9中的dropWhile
java·后端·java ee
想躺平的咸鱼干44 分钟前
Volatile解决指令重排和单例模式
java·开发语言·单例模式·线程·并发编程
hqxstudying1 小时前
java依赖注入方法
java·spring·log4j·ioc·依赖
·云扬·1 小时前
【Java源码阅读系列37】深度解读Java BufferedReader 源码
java·开发语言
春生野草2 小时前
关于SpringMVC的整理
spring
Bug退退退1232 小时前
RabbitMQ 高级特性之重试机制
java·分布式·spring·rabbitmq
小皮侠2 小时前
nginx的使用
java·运维·服务器·前端·git·nginx·github
Zz_waiting.3 小时前
Javaweb - 10.4 ServletConfig 和 ServletContext
java·开发语言·前端·servlet·servletconfig·servletcontext·域对象
全栈凯哥3 小时前
02.SpringBoot常用Utils工具类详解
java·spring boot·后端
兮动人3 小时前
获取终端外网IP地址
java·网络·网络协议·tcp/ip·获取终端外网ip地址