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 >
建包
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 数据访问管理
< dependency >< groupId >org.springframework.boot</ groupId >< artifactId >spring-boot-starter-jdbc</ artifactId ></ dependency >
<!--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>
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 >
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"日志类型
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后端项目建立完成