下面我们来学习一下SpringBoot如何整合SpringMVC,这对后面的项目比较重要。要好好看一下。

 

目录

一、新键一个工程。

二、整合springMVC

三、整合数据源

四、整合Mybatis

五、整合事务

六、测试项目

七、SpringBoot实战总结


实战之前,我们先将需要用到的数据库导入。
将下列sql语句全部复制过去执行就可以了。

/*
SQLyog Ultimate v10.00 Beta1
MySQL - 5.5.15 : Database - yuanxion
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`yuanxion` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `yuanxion`;

/*Table structure for table `tbuser1` */

DROP TABLE IF EXISTS `tbuser1`;

CREATE TABLE `tbuser1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` char(1) NOT NULL,
  `password` int(11) NOT NULL,
  `name` char(1) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `sex` int(11) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `created` date DEFAULT NULL,
  `updated` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

/*Data for the table `tbuser1` */

insert  into `tbuser1`(`id`,`user_name`,`password`,`name`,`age`,`sex`,`birthday`,`created`,`updated`) values (1,'y',1024,'猿',12,1,'2019-10-24','2019-11-07','2019-11-07');

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

一、新键一个工程。
 

 

 

配置依赖。

<!-- 所有的springboot的工程都以spring父工程为父工程 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
    </parent>

    <dependencies>
        <!-- 启动器:每一个启动器背后都是一堆的依赖-->
        <!-- web启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

测试一下工程。

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

    @GetMapping("test")
    @ResponseBody
    public String test(){
        return "hello user!";
    }
}

 

在引导类中,启动运行测试。

启动运行成功之后,访问http://localhost:8888/user/test

 

访问成功了,结果也显示正确。
说明我们项目成功搭建起来了。

(以后搭建项目过程,以及测试新项目过程,就不截图了。)

 

接下来进入实战:

 

二、整合springMVC


1.SpringBoot如何访问静态资源文件?
在SpringBoot中,静态资源文件,一般会 在 resources下 创建一个 static 文件夹 来存放。

这里面可以放一下静态的js、图片等文件。
例如,我们放入一张图片,然后运行项目,看看 能不能访问到。

 

访问成功!

 

2.SpringBoot中如何配置拦截器?

先创建一个类,实现 HandlerInterceptor 接口,并重写它的三个方法。

 

@Component
public class MyInterceptor implements HandlerInterceptor{

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("前置方法执行中。。。");
        return true; //返回值是true,拦截。
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("后置方法执行中。。。");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("完成方法执行中。。。");
    }
}

3.写好了拦截器类,接下来我们要去 配置拦截器。
写一个Java配置类。
在这个配置类里,我们要注入MyInterceptor类,
所以需要在开始的MyInterceptor类上加上@Component注解,将MyInterceptor放到spring容器中。

 

4. 然后我们来启动项目,访问http://localhost:8888/user/test,看看拦截器有没有生效。

 

拦截器生效了!配置拦截器成功了!

不过我们貌似看不到全部的日志信息,不知道拦截器是什么时候生效的。
那我们可以去 application.properties 里覆盖日志的默认配置。
 

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

 

再运行测试一次,
我们发现,现在就能看到更完整的日志信息了:

 

那么SpringMVC我们就整合完了。


三、整合数据源

1.引入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>

 

2.在application.properties中配置连接属性

#spring.datasource.url=jdbc:mysql://loaclhost:3306/yuanxion 可以简写为下面的
spring.datasource.url=jdbc:mysql:///yuanxion
spring.datasource.username=root
spring.datasource.password=1024

这样,我们就整合完数据源了。(这里就不测试了,等写完后面的再测试。)

 

四、整合Mybatis

1.引入mybatis启动器。

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

 

2.覆盖默认配置。 在application.properties中。

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

3.创建别名扫描的包pojo,并创建一个User类。

 

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;

@Table(name = "tbuser1")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String userName;

    private String password;

    private String name;

    private Integer age;

    private Integer sex;

    private Date birthday;

    private Date created;

    private Date updated;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getSex() {
        return sex;
    }

    public void setSex(Integer sex) {
        this.sex = sex;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public Date getCreated() {
        return created;
    }

    public void setCreated(Date created) {
        this.created = created;
    }

    public Date getUpdated() {
        return updated;
    }

    public void setUpdated(Date updated) {
        this.updated = updated;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", password='" + password + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                ", birthday=" + birthday +
                ", created=" + created +
                ", updated=" + updated +
                '}';
    }
}

 

4.引入通用mapper启动器 (引入之后,你会发现之前的User类就没有报错了。)

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

 

5.创建一个mapper接口 并 继承刚刚引入的通用mapper

 

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

这样,我们就整合好了 mybatis 了。

 

五、整合事务

相关依赖由之前的依赖已经传递过来了。

 

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper; //这个报错是idea误报。忽略即可。

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

    @Transactional //开启事务
    public void deleteUserById(Long id){
        this.userMapper.deleteByPrimaryKey(id);
    }
}

事务就这么整合好了。(是不是很快,很简单?)

 

六、测试项目

在UserController中

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

    @Autowired
    private UserService userService;

    @GetMapping("{id}")
    @ResponseBody
    public User queryUserById(@PathVariable("id")Long id){

        return this.userService.queryById(id);
    }

    @GetMapping("test")
    @ResponseBody
    public String test(){
        return "hello user!";
    }


}

 

 

然后启动项目(记得将之前的项目关闭,不然会端口占用)

启动成功后,访问http://localhost:8888/user/1,查询id为1的user的信息。
可以看到,返回成功了!

 

到这里,我们的springboot实战就完成了!

 

七、SpringBoot实战总结

整合SpringMVC:

  1. 修改端口(server.port=8888)
  2. 访问静态资源(classpath:META/resources  classpath:resources  classpath:static(最常用)  classpath:public)
  3. 拦截器:
    ①自定义拦截器:实现HandlerInterceptor接口
    ②配置拦截器:自定义一个java配置类(@Configuration),实现WebMvcConfigurer接口

整合数据源:

  1. 引入jdbc启动器,mysql驱动
  2. 添加配置

整合mybatis:

  1. 引入启动器
  2. 覆盖默认配置
  3. 代码:定义一个接口,在接口上添加@Mapper注解

整合通用mapper:

  1. 引入启动器
  2. 代码:接口继承Mapper<User>

整合事务:

  1. 添加@Transactional

 

我们实战就到这里了!