如何一文学会 SpringBoot 开发 Web 项目

1、SpringBoot 拦截器

springmvc 不用再配置扫描包、注解驱动、前端控制器,不玩 jsp 不用写视图解析器
但是要自己写拦截器,步骤如下:

  1. 自定义拦截器
  2. 配置自定义的拦截器(添加拦截器配置拦截器路径)

自定义拦截器: 实现 HandlerInterceptor 类,编写前中后三个拦截方法:

public class MyInterceptor implements HandlerInterceptor {

    private static final Logger LOGGER = LoggerFactory.getLogger(MyInterceptor.class);
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        LOGGER.info("preHandle method is running!");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        LOGGER.info("postHandle method is running!");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        LOGGER.info("afterCompletion method is running!");
    }
}

配置自定义的拦截器:
  因为拦截器不是一个普通属性,而是一个类,所以就要用到 java 配置方式了,是 SpringBoot 的复杂配置。具体流程为:编写一个类,实现 WebMvcConfigurer 接口 复写 addInterceptors(InterceptorRegistry registry) 方法(加入自定义的拦截器,并且配置拦截路径),并且在类上添加 @Configuration 注解。
 配置类代码如下:

@Configuration
public class MvcConfig implements WebMvcConfigurer {
	// 往拦截器数组中添加我们自定义的拦截器,并且添加拦截路径
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
    }
}

2、使用 sl4j 记录日志:

  1. 使用 LoggerFactory 工厂模式传入当前类字节码创建日志对象,直接调用日志对象相应的日志级别方法做输出即可。因为 SpringBoot 在打印日志时会显示是哪个类记录的日志,所以为了知道哪个类在记录日志,我们在创建日志对象时,需要传入类字节码。
import org.slf4j.Logger;
private static final Logger log = LoggerFactory.getLogger(MyInterceptor.class);
  1. 但是在每个日志类中都按照如上形式定义 log 常量,相对来说比较繁琐,下面介绍使用 lombok 插件来使用日志
/*
* 在类上添加如下注解。该注解属于 import lombok.extern.slf4j.Slf4j;其内部声明的日志变量名称也是 log 
*/
@Slf4j
  1. 日志记录的形式如下:
    在这里插入图片描述

SpringMVC 控制日志级别:在配置文件上,配置方式如下:
logging.level = debug

3、SpringBoot 访问静态资源

SpringBoot 静态资源默认属性查看:
在 WebMvcAutoConfiguration 类中有控制静态资源相关属性的文件:
在这里插入图片描述
跟进去会看见 SpringBoot 对 静态资源的相关配置,如:路径等:
在这里插入图片描述
在这里插入图片描述
从资源路径这个数组常量来看,其默认的静态资源路径有如下几个地方,这些地方的静态资源会被加载:
“META-INF/resources/”,
“classpath:/resources/”,
“classpath:/static/”,
“classpath:/public/
yaml中不识别 * 通配符。故使用时应该用引号括起来。如:”*.xml"

4、SpringBoot 整合 JDBC 和通用 Mapper

  1. 引入 jdbc 启动器
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

jdbc 启动器内置的是 HikariCP 连接池:
在这里插入图片描述

  1. 引入工程所用的数据库(MySQL)
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
</dependency>
  1. 配置4大参数:
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/ssm
    username: root
    password: root
  1. 导入 mybatis 启动器:
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>1.3.2</version>
</dependency>
  1. 配置 mybatis 驼峰映射
  • mybatis默认是属性名和数据库字段名一一对应的,即 :
     数据库表列:user_name
     实体类属性:user_name
  • 但是java中一般使用驼峰命名:
     数据库表列:user_name
     实体类属性:userName
  • 在Springboot中,可以通过设置map-underscore-to-camel-case属性为true来开启驼峰功能。
    在 application.yml 中配置:
mybatis:
  configuration:
    map-underscore-to-camel-case: true
  1. 告知 dao 接口的 mapper 文件所在位置:
    配置如下:
# 假设 mapper 文件,放置在 resources 包下面
mybatis:
  mapper-locations: mapper/*.xml
  1. 告知 dao 接口 所在位置:
    通过 @MapperScan(“com.example.dao”) 注解配置 dao 接口所在地
    该注解配置于 SpringBoot 的启动类上面

在这里插入图片描述
8. 配置实体类的别名扫描包

type-aliases-package: com.example.pojo
  1. 在 pom 文件中引入通用 mapper 启动器:(单表的 CRUD 方法不用再编写 )
<dependency>
	<groupId>tk.mybatis</groupId>
	<artifactId>mapper-spring-boot-starter</artifactId>
	<version>2.0.3</version>
</dependency>
  1. 使用通用 mapper 编写 dao 接口:
    让 dao 接口继承 Mapper< T > 即可
    在这里插入图片描述
      类中没有定义任何方法,但是观察类结构可以看到,内部继承了很多通用的 CRUD 方法,底层利用 mybatis 可拦截的原理,在底层帮我们把 sql 动态生成,他还带有缓存 sql 语句的功能,不用重复生成 sql 语句。
    在这里插入图片描述
    注意:
      1. 此时在第7步导入的 MapScan 注解应该换成使用 通用 Mapper 的 MapScan 注解(删除导入的包,引入通用 Mapper 的包)。这样通用 Mapper 扫描的 dao 接口才会生成该有的通用 CRUD 方法
      2. 一旦引入了通用 Mapper 的启动器,会覆盖 Mybatis 官方启动器的功能,一次需要移除在第4步导入的 Mybatis 依赖。
  2.   在实体类上使用 @Table 注解(让通用 Mapper 生成的通用 CRUD 方法,知道该实体类对应的表名称)。实体类作为主键的属性上面添加 @Id注解,实体类如下:
@Table(name = "account")
public class Account {
    @Id
    @KeySql(useGeneratedKeys = true)// 该属性用于让自增长的主键回写
    private Integer id;
    
    private String name;

    private BigDecimal money;
}

补充:可以在不需要持久化的属性上添加 @Transient ,表示该属性是瞬时的,在生成方法时,不会加上该属性

5、SpringBoot 事务管理

该对应的方法添加 @Transactional 注解,则该方法具备事务管理能力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值