SpringBoot后端快速搭建

news2024/11/16 4:45:03

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);
代码如下
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代码如下


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;
    }
}

更换Logo

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

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

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

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

我的佛祖就是这找的

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

Spring Boot配置文件

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

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

配置文件代码如下:

#配置内置服务器端口
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 中配置数据源信息
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 中配置数据源信息
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层导入
import com.ffyc.news.model.Admin;



public interface LoginDao {
   Admin login(Admin admin);

}

model包里面导入

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;


}
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包导入

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类作为项目全局统一异常处理

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验证拦截器

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验证拦截器

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2105727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

本地Gitblit使用

首先创建一个本地的gitblit的服务&#xff0c;创建流程如下&#xff1a; 【GitBlit】Windows搭建Git服务器详细教程_搭建gitblit服务-CSDN博客 GitBlit的使用教程-CSDN博客 创建好一个仓库后&#xff0c;分配好用户权限&#xff0c;再将项目拉下来&#xff0c;这里是再visua…

第二证券:什么是券商理财,券商理财有风险吗?

券商理财是指证券公司发行的理财产品&#xff0c;证券公司简称为券商&#xff0c;证券公司集结出资者资产主张建立的资产处理升值类产品便是券商理财产品。 券商理财产品中主要有质押式报价回购事务、收益凭证、券商资产处理计划三种。 1、质押式报价回购事务 是证券公司将契…

云计算和传统IT相比,有哪些优势?

云计算相比于传统的IT基础设施&#xff0c;具有以下一些显著的优势&#xff1a; 成本效益&#xff1a; 云计算通常采用按需付费模式&#xff0c;用户只需为实际使用的资源支付费用&#xff0c;避免了高昂的前期硬件投资和维护成本。 弹性计费方式使得企业可以根据业务需求灵活调…

如何做好API安全

在数字化时代&#xff0c;API&#xff08;应用程序接口&#xff09;已成为企业间、应用程序间乃至整个数字生态系统中数据交换与功能集成的核心&#xff0c;可 帮助跨多个设备互连多个应用程序或软件系统&#xff0c;定义它们可以发出的调用或请求的种类、调用的方式、应使用的…

C#复习封装_运算符重载

知识点一 基本概念 知识点二 基本语法 知识点三 实例 知识点四&#xff1a;使用 知识点五&#xff1a;可重载和不可重载的运算符 可重载运算符 算数运算符 #region 算数运算符//注意 符号需要两个参数还是一个参数public static Point operator -(Point p1,Point p2){retur…

【Flutter】Flutter安装和配置(mac)

1、准备工作 升级Macos系统为最新系统安装最新的Xcode电脑上面需要安装brew https://brew.sh/安装chrome浏览器&#xff08;开发web用&#xff09; 2.、下载flutter https://docs.flutter.dev/release/archive?tabmacos 大家网页后&#xff0c;选择对应的版本【Tips&#x…

VXLAN 为何采用UDP

VXLAN 简介 VXLAN是一种网络虚拟化技术&#xff0c;它通过在UDP数据包中封装MAC地址和IP信息&#xff0c;使得二层网络&#xff08;如以太网&#xff09;能够跨越三层网络&#xff08;如IP网络&#xff09;进行扩展。这种封装方式不仅支持TCP流量的传输&#xff0c;还能有效处…

Charles - 夜神模拟器证书安装App抓包-charles监控手机出现unknown 已解决

1.Openssl安装 http://slproweb.com/products/Win32OpenSSL.html exe下载安装后进行配置 新建系统变量OPENSSL_HOME&#xff0c;变量值设为(绝对路径)软件安装目录下的bin 直接浏览 编辑用户变量path&#xff0c;新建%OPENSSL_HOME%&#xff0c;最后点击确定 查看openssl版本&a…

读懂以太坊源码(4)-详细解析节点配置文件geth.toml

要读懂以太坊源码&#xff0c;先熟悉配置文件的每个配置项也是非常有必要的&#xff0c;以下代码是以太坊主网配置文件(geth.toml)的完整内容&#xff0c;后面是对每个配置项的说明&#xff1a; [Eth] NetworkId 0 SyncMode "snap" EthDiscoveryURLs [] SnapDisc…

Redis的持久化机制RDB与AOF

RDB RDB 是将 Redis 的内存中的数据定期保存到磁盘上&#xff0c;以防止数据在 Redis 进程异常退出或服务器断电等情况下丢失。 RDB 的优点是&#xff1a;快照文件小、恢复速度快&#xff0c;适合做备份和灾难恢复。 RDB 的缺点是&#xff1a;定期更新可能会丢数据&#xff0…

react文件详情

1、node_modules&#xff1a;存放项目所依赖的一些第三方包文件 2、public&#xff1a;静态资源文件夹 favicon.ico&#xff1a;导航图标 index.html&#xff1a;项目首页的html模版 logo192.png&#xff1a;logo图片 logo512.png&#xff1a;logo图片 manifest.json&#…

Databend Meta-Service 架构概述

Databend 的 meta-service 是一个基于 Raft 共识算法的分布式服务。其核心架构可以概括为一个 Raft 应用&#xff0c;如图中虚线框所示。 Raft 协议的主要组成部分包括&#xff1a; 分布式日志&#xff08;Log&#xff09;状态机&#xff08;State Machine&#xff09; 分布…

WPS 5亿用户受威胁:APT-C-60利用WPS Office漏洞发动间谍攻击

与韩国有关的网络间谍组织APT-C-60一直在利用Windows版WPS Office的一个零日代码执行漏洞&#xff0c;在东亚目标上安装SpyGlace后门程序。 WPS Office是由中国金山公司开发的一套办公套件&#xff0c;在亚洲很受欢迎。据报道,它在全球拥有超过5亿活跃用户。 这个被追踪为CVE…

静态检查工具

0. 简介 静态检查是软件开发过程中的一个重要环节&#xff0c;它在代码执行之前分析源代码或编译后的代码&#xff0c;以识别潜在的错误、代码规范违规、安全漏洞等问题。静态检查的好处包括提高代码质量、减少bug、增强安全性、提升开发效率等。它能够帮助开发者在早期发现问…

【消息中间件】Kafka从入门到精通

1 Kafka入门 概念 架构 1.1 概述 1.1.1 初始Kafka Kafka是一个由Scala和Java语言开发的&#xff0c;经典高吞吐量的分布式消息发布和订阅系统&#xff0c;也是大数据技术领域中用作数据交换的核心组件之一。以高吞吐&#xff0c;低延迟&#xff0c;高伸缩&#xff0c;高可靠…

浙大数据结构:01-复杂度2 Maximum Subsequence Sum

数据结构MOOC PTA习题 01-复杂度2 Maximum Subsequence Sum #include <iostream> using namespace std; const int M 100005; int a[M]; int main() {int k;cin >> k;int f 1;for (int i 0; i < k; i){cin >> a[i];if (a[i] > 0)//如果出现大于0则…

zm-tree-org 数据量过大时,全部展开后,根节点点击收缩,树形消失

zm-tree-org 数据量过大时&#xff0c;全部展开后&#xff0c;根节点点击收缩&#xff0c;树形消失 <zm-tree-orgref"tree"on-expand"onExpand"</zm-tree-org>export default {methods: {onExpand(e, data) {<!-- 当为根节点,且根节点为闭合时…

web3.0区块链元宇宙是什么

Web3.0 什么是 Web3.0 Web3.0是指基于区块链的去中心化在线生态系统&#xff0c;代表了互联网的下一个阶段。它是由以太坊联合创始人Gavin Wood在2014年创造的概念。Web3.0的发展是随着用户权利的增加和在互联网中角色的重要性不断进化的。 从互联网的发展历程来看&#xff0…

elementUI根据列表id进行列合并@莫成尘

本文章提供了elementUI根据列表id进行列合并的demo&#xff0c;效果如图&#xff08;可直接复制代码粘贴&#xff09; <template><div id"app"><el-table border :data"tableList" style"width: 100%" :span-method"objectS…

[论文笔记]大模型微调数据配比策略

大模型微调数据配比策略 How Abilities in Large Language Models are Affected by Supervised Fine-tuning Data Composition https://arxiv.org/pdf/2310.05492 一、背景&#xff1a; 大模型是无监督的多任务学习器&#xff0c;其强大的泛化能力可以同时理解并执行多种任务…