目录
springBoot数据访问管理(jdbc,mybatis,阿里数据源)
回顾spring
spring是一个轻量级的,IOC(控制反转)和AOP(面向切面)的一站式框架。为简化企业级的应用开发应运而生。
优点
轻量级
IOC:由框架创建管理对象。
AOP:可以将业务代码和非业务代码分离。
解耦性:降低了代码之间的耦合度,IOC和AOP就是最好的体现。
一站式:对数据访问层中数据连接对象管理,mybatis,事务;对web层的servlet进行封装。
开源
很方便的集成其他的框架。
缺点
1、配置是重量级的,而且大量使用模板化配置
<!--属于很啰嗦的模板化配置-->
<!--开启aop的自动代理-->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
<!-- 开启注解事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!--开启web层的注解-->
<mvc:annotation-driven></mvc:annotation-driven>
2、项目中需要导入很多相关的依赖坐标(例如json组件,跨域过滤器......)
springBoot概述
springBoot是在spring的基础上对spring应用的搭建进行简化,
基于约定大于配置的思想(大家公认的做法,那么框架也就默认把一些功能直接实现了,例如我们现在都用注解开发)
springBoot特点
可以创建一个企业级应用程序,而且内嵌服务器(tomcat)。
有两大核心功能:
起步依赖
当我们使用spring基本的依赖时,自动的就会将相关的依赖导入进来。
自动配置
在spring启动时他可以根据我们项目中配置的相关依赖,自动加载配置。
springBoot开发环境构建
1、创建一个普通的maven项目
2、配置pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>news</artifactId>
<version>1.0-SNAPSHOT</version>
<!--依赖的父级工程-->
<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>
</project>
3、创建基本包目录,创建启动类
package com.ffyc.news;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication//是springBoot中最核心的注解
public class NewsApplication {
public static void main(String[] args) {
SpringApplication.run(NewsApplication.class);
}
}
4、创建自定义的处理器
@RestController
@RequestMapping(path = "/loginCtl")
public class LoginController {
@RequestMapping(path = "/login")
public String login(){
System.out.println("aaaaaaaa");
return "success";
}
}
5、访问
ip:端口/地址/方法地址
springBoot配置文件
springBoot中的配置文件,严格意义上来讲不是配置文件,是用来存储配置参数的文件(里面放的是参数值)。
配置文件有两种格式:
1、属性文件 .propertie
键 = 值
server.port=8088
spring.datasource.driver-class-name=
spring.datasource.url=
spring.datasource.password=
spring.datasource.username=
2、yml
语法结构:key:空格 value;
以此来表示一对键值对(空格不能省略);
以空格的缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级 的;
字面量直接写在后面就可以,字符串默认不用加上双引号或者单引号;
以#作为注释符号.
#配置服务器端口
server:
port: 8088
spring:
datasource:
driver-class-name:
url:
username:
password:
springBoot数据访问管理(jdbc,mybatis,阿里数据源)
jdbc
1、导入依赖(记得添加mysql驱动依赖)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--mysql-->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
2、在application.yml中配置数据源信息
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/newsdb?serverTimezone=Asia/Shanghai
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
阿里巴巴数据源
1、导入依赖
<!-- 阿里数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
2、 在application.yml中配置数据源信息
type: com.alibaba.druid.pool.DruidDataSource
initialSize: 5
maxActive: 20
myabtis
1、导入依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
2、在application.yml中配置数据源信息
mybatis:
type-aliases-package: com.ffyc.news.model
mapper-locations: classpath:/mappers/*Mapper.xml
configuration: #mybatis全局设置
cache-enabled: true
map-underscore-to-camel-case: true #数据对列名 user_name 映射到java驼峰命名 userName
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
3、创建dao目录,创建model, 创建mappers
4、启动类上添加@MapperScan("接口所在的包地址")
package com.ffyc.news;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication//是springBoot中最核心的注解
@MapperScan("com.ffyc.news.dao")
public class NewsApplication {
public static void main(String[] args) {
SpringApplication.run(NewsApplication.class);
}
}
springBoot注解
springboot 实现自动装配的核心仍然是使用注解标签,
@SpringBootApplication 是 springboot 核心注解,其中包含
@SpringBootConfiguration,
@EnableAutoConfiguration,
@ComponentScan.
@Configuration
加入@Configuration 注解,表明这就是一个配置类。有一个 myBean()的方法 并用@Bean 进行注释,返回一个 MyBean()的实例,表明这个方法是需要被 Spring 进行管理的 bean。@Bean 如果不指定名称的话,默认使用 myBean 名称,也就是小写的名称。
@Bean
相当于 XML 中的,放在方法的上面,而不是类,意思是产生一 个 bean,并交给 spring 管理。
springBoot集成日志功能(了解)
日志是我们程序中的重要的组成部分,可以监测我们程序运行的轨迹,记录参数值的变化,尤其是生产环境中非常必要,通过日志文件我们可以快速定位到这个问题。
实际生产环境中需要使用到日志。
常用日志组件
slf4j(Simple Logging Facade for Java)
commons-logging
Log4J
Log4J2
Logback
JUL(Java Utils Logging)
日志的级别划分:从低到高:debug<info<warn<error
配置日志级别和日志文件位置
logging:
level:
com.ffyc.news: debug
file:
name: D:/log/log.log
创建logger对象
在需要的位置调用具体的日志级别方法输出
private static Logger logger = LoggerFactory.getLogger(LoginController.class);
logger.debug("input account:{},password:{}",admin.getAccount(),admin.getPassword());
logger.info("input account:{},password:{}",admin.getAccount(),admin.getPassword());
logger.warn("input account:{},password:{}",admin.getAccount(),admin.getPassword());
logger.error("input account:{},password:{}",admin.getAccount(),admin.getPassword());
AOP项目中统一打印
1、导入依赖
<!--SpringBoot 使用 AOP 统一打印日志-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2、定义切面通知类util包.LogAspect类
package com.ffyc.news.util;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
@Component
@Aspect
public class LogAspect {
private Logger logger = LoggerFactory.getLogger(LogAspect.class);
@Before("execution(public * com.ffyc.news.web..*.*(..))")
public void savelog(JoinPoint joinPoint) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
// 记录以下请求内容
logger.info("HTTP_METHOD :{} ", request.getMethod());
logger.info("IP : {}", request.getRemoteAddr());//客户端 ip
Object[] objs = joinPoint.getArgs();//获取方法参数
logger.info(Arrays.toString(objs));
}
}
springBoot统一异常处理
package com.ffyc.news.util;
import com.ffyc.news.model.Result;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/*
全局统一的异常处理类
*/
@RestControllerAdvice
public class GlobalExceptionHandler {
private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
/**
* 异常处理
*/
@ExceptionHandler(Exception.class)
public Result globalException(Exception e) {
Result result = new Result(500,"系统忙:"+e.getMessage(),null);//向前端用户响应信息
logger.info("Exception:"+e.getMessage());//向我们的日志文件打印信息
e.printStackTrace();//打印异常信息到控制台
return result;//向前端用户响应信息
}
}
统一日志打印,统一异常处理都是AOP的实际使用场景,spring中的事务管理也是AOP的使用场景,到此,后端最基本的功能搭建完。