SpringBoot实战(访问静态资源、设置拦截器)

1.创建工程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.1 编写基本代码

在这里插入图片描述

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>cn.itcast.user</groupId>
    <artifactId>itcast-user</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

</project>

引导类:

@SpringBootApplication
public class UserApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserApplication.class);
    }
}

编写UserController:

@RestController
@RequestMapping("user")
public class UserController {

    @GetMapping("hello")
    public String test(){
        return "hello ssm";
    }
}

2.整合SpringMVC

虽然默认配置已经可以使用SpringMVC了,不过我们有时候需要进行自定义配置。

我们启动项目,此时我们默认的端口是8080

2.1 修改端口

添加全局配置文件:application.properties

端口通过以下方式配置
在这里插入图片描述

# 映射端口
server.port=80

重启服务后测试:
在这里插入图片描述

此时就可以访问了
在这里插入图片描述


2.2 访问静态资源

我们之前都会把静态资源放在webapp中,那现在我们并没有webapp这个目录了,那么我们的静态资源该放哪里呢?

回顾我们上面看的源码,有一个叫做ResourceProperties的类,里面就定义了静态资源的默认查找路径:

默认的静态资源路径为:

  • classpath:/META-INF/resources/
  • classpath:/resources/
  • classpath:/static/
  • classpath:/public/

只要静态资源放在这些目录中任何一个,SpringMVC都会帮我们处理。
我们习惯会把静态资源放在classpath:/static/目录下。我们创建目录,并且添加一些静态资源:
在这里插入图片描述
重启项目后测试:访问时,不需要带static这个路径名
在这里插入图片描述
之后我们就可以把需要访问的静态资源,例如.js文件、.css文件以及其他类型的静态资源文件都可以放在这个路径下


2.3 添加拦截器

之前我们在springmvc中配置拦截器,是通过自定义拦截器,然后在 springmvc-servlet.xml中配置注册自定义拦截器,同时设置拦截的路径

<!-- 注册自定义的拦截器 -->
<mvc:interceptors>
	<mvc:interceptor>
		<!-- 拦截所有请求 -->
		<mvc:mapping path="/**"/>
		<!-- 自定义拦截器的全路径 -->
		<bean class="cn.itcast.springmvc.interceptors.MyInterceptor"/>
	</mvc:interceptor>
</mvc:interceptors>

那么在在SpringBoot中如何配置拦截器呢?

答:通过实现WebMvcConfigurer并添加@Configuration注解来实现自定义部分SpringMvc配置。

在这里插入图片描述

  • MyInterceptor就是一个普通的拦截器类,只要做两点
    • 1.实现 HandlerInterceptor 接口
    • 2.添加@Component,被SpringMVC容器管理
  • MvcConfiguration则类似于我们之前的SpringMVC核心配置文件(xx-servlet.xml)

第一步:定义拦截器
自定义拦截器都需要实现HandlerInterceptor 接口,此时有三个方法需要重新

@Component
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle method is running!");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle method is running!");
    }

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

拦截器的执行过程
在这里插入图片描述
在这里插入图片描述


第二步:注册拦截器
我们可以通过实现WebMvcConfigurer并添加@Configuration注解来实现自定义部分SpringMvc配置。

@Configuration
public class MvcConfiguration implements WebMvcConfigurer {

    @Autowired
    private HandlerInterceptor myInterceptor;

    /**
     * 重写接口中的addInterceptors方法,添加自定义拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor).addPathPatterns("/**");
    }
}

接下来运行并查看日志:
在这里插入图片描述
你会发现日志中只有这些打印信息,springMVC的日志信息都没有,因为springMVC记录的log级别是debug,springboot默认是显示info以上,我们需要进行配置。

SpringBoot通过logging.level.*=debug来配置日志级别,*填写包名

# 设置org.springframework包的日志级别为debug
logging.level.org.springframework=debug

3.整合连接池

上一节中我们讲了阿里的druid连接池,spring也提供了一个jdbc的启动器

在这里插入图片描述
jdbc启动器,默认使用HikariCP连接池

在pom.xml中引入jdbc的启动器:

<!--jdbc的启动器,默认使用HikariCP连接池-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--不要忘记数据库驱动,因为springboot不知道我们使用的什么数据库,这里选择mysql-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

SpringBoot已经自动帮我们引入了一个连接池:
在这里插入图片描述
HikariCP应该是目前速度最快的连接池,我们只需要指定连接池参数即可:

# 连接四大参数
spring.datasource.url=jdbc:mysql://localhost:3306/heima
spring.datasource.username=root
spring.datasource.password=root
# 可省略,SpringBoot自动推断
spring.datasource.driverClassName=com.mysql.jdbc.Driver

spring.datasource.hikari.idle-timeout=60000
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.minimum-idle=10

注意:一旦使用了jdbc的启动器,就必须配置连接池参数,不然在启动时会报错


3.整合mybatis

3.1 mybatis

SpringBoot官方并没有提供Mybatis的启动器,不过Mybatis官方自己实现了:

<!--mybatis -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.2</version>
</dependency>

配置,基本没有需要配置的:

# mybatis 别名扫描
mybatis.type-aliases-package=cn.itcast.pojo
# mapper.xml文件位置,如果没有映射文件,请注释掉
mybatis.mapper-locations=classpath:mappers/*.xml

需要注意,这里没有配置mapper接口扫描包,因此我们需要给每一个Mapper接口添加@Mapper注解,才能被识别。
在这里插入图片描述

这样我们就可以直接使用mapper来操作数据库,比如我们在UserMapper中写一个方法

@Mapper
public interface UserMapper {
    Integer count();
}

同时我们需要配置的xml文件位置,新增一个xml
在这里插入图片描述
使用动态代理mapper,名称空间指向mapper,statementId和方法名一致

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.itcast.user.mapper.UserMapper" >
  
  <select id="count" resultType="int" >
    select count(1) from tb_user

  </select>
  
</mapper>

之后我们就可以直接使用这个mapper的方法了

@Autowired
private UserMapper userMapper;

@GetMapping("count")
public Integer count(){
    return userMapper.count();
}

mybatis是使用sqlSession(底层是connection)和数据库交互的,在我们没学SpringBoot前,我们需要维护一个sqlSessionFactory,且sqlSessionFactory需要设置dataSource,这些通通都可以省了.引入了mybaits的启动器后,会自动帮我们维护一个sqlSessionFactory(会去找dataSource然后置入)


3.2 通用mapper

需用引入通用mapper的启动器

<!-- 通用mapper -->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.0.2</version>
</dependency>

不需要做任何配置就可以使用了。

@Mapper
public interface UserMapper extends tk.mybatis.mapper.common.Mapper<User>{
}

需用注意:使用通用mapper后,实体类要添加注解,指定对应的表和列

@Table(name = "tb_user")
public class User {

    private Long id;

    @Column(name = "username")
    private String userName;
    
    ......
}

3.3 整合事务

其实,我们引入jdbc或者web的启动器,就已经引入事务相关的依赖及默认配置了
在这里插入图片描述
至于事务,SpringBoot中通过注解来控制。就是我们熟知的@Transactional
事务有传播机制和传播行为都可以通过这个注解来设置

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public User queryById(Long id){
        return this.userMapper.selectByPrimaryKey(id);
    }

    @Transactional
    public void deleteById(Long id){
        this.userMapper.deleteByPrimaryKey(id);
    }
}

启动测试
在UserController中添加测试方法,内容:

@RestController
@RequestMapping("user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("{id}")
    public User queryUserById(@PathVariable("id")Long id){
        return this.userService.queryById(id);
    }

    @GetMapping("hello")
    public String test(){
        return "hello ssm";
    }
}

4.完整的项目结构

在这里插入图片描述
完整的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>cn.itcast.user</groupId>
    <artifactId>itcast-user</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--jdbc的启动器,默认使用HikariCP连接池-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!--不要忘记数据库驱动,因为springboot不知道我们使用的什么数据库,这里选择mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

        <!-- 通用mapper -->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.0.2</version>
        </dependency>
    </dependencies>

</project>

完整的application.properties:

server.port=80

logging.level.org.springframework=debug

spring.datasource.url=jdbc:mysql://localhost:3306/heima
spring.datasource.username=root
spring.datasource.password=root

# mybatis 别名扫描
mybatis.type-aliases-package=cn.itcast.pojo
# mapper.xml文件位置,如果没有映射文件,请注释掉
# mybatis.mapper-locations=classpath:mappers/*.xml
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值