Spring Boot(四)——Spring Boot整合Mybatis并搭建出完整的MVC项目(详细)

版权声明:@Wrial https://blog.csdn.net/qq_42605968/article/details/88047171

经过前面的学习,这次就用一个小的demo来演示一下,我们也可以将他和我们以前做过的ssm进行对比。

案例


准备工作

JDK1.8
IDEA编译工具
Maven
Lombok插件。
准备工作完了后,就像我们Spring Boot(一)中一样,需要重新搭建的可以参考搭建过程
地址:https://blog.csdn.net/qq_42605968/article/details/87935200


搭建过程

在Spring Boot和Mybatis整合时,也要对Controller(相当于ssm里的SpringMVC)进行处理,整合思路和ssm差不多。接下来我们就开始SpringBoot+Mybatis的项目搭建


项目搭建

1.日志级别调节:调为DEBUG更为详细,更易于代码纠正

#日志级别
logging:
  level:
    com.example.demo: debug
    org.springframework.web: debug

2.Mybatis的配置:数据源,映射文件所在的包或者类,映射文件,用Spring管理配置,驼峰转换器等等
那么我们接下来使用的通用Mapper会自动开启驼峰,会自动引入SpringBoot,jdbc和Mybatis启动器,扫描器也改为通用Mapper的,但必须在pojo声明表名,主键,自增等不确定属性

下面我使用了一个通用Mapper可以更进一步简化配置。也要同时引入test依赖
(1)配置数据源

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/Mybatis?serverTimezone=GMT&useSSL=FALSE
    username: root
    password: wrial.qq.com

(2)引入依赖

       <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.1.5</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

(3)编写pojo并使用Lombok提供Getter和Setter
注意:在通用mapper里必须要告诉它表名,主键,自增,注释等不确定因素

package com.example.demo.pojo;

import lombok.Data;
import tk.mybatis.mapper.annotation.KeySql;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;

@Table(name = "user")
@Data
public class User {
    @Id
    @KeySql(useGeneratedKeys = true)
    private Integer id;

    private String username;

    @Transient//瞬时的,不会作为持久数据,不会被sql使用
    private String xxx;

}

(4)编写一个Mapper接口并用它继承tx的Mapper

package com.example.demo.mapper;

import com.example.demo.pojo.User;
import tk.mybatis.mapper.common.Mapper;

public interface UserMapper extends Mapper<User> {
}

我们可以看到继承了很多的方法,都是自动生成的
在这里插入图片描述
(5)使用tx的包扫描

package com.example.demo;

import com.example.demo.webdemo.WebBootDemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScans;
import tk.mybatis.mapper.annotation.RegisterMapper;
import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication()
//@MapperScan("com.example.demo.mapper")//扫描Mapper接口文件
@MapperScan("com.example.demo.mapper")//通用mapper自动扫描
public class DemoApplication {

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

}

(6)Alt+Enter,生成Mapper
在这里插入图片描述
(7)事务配置,@Transactional 注解。(下边有例子)
3.对默认的Controller进行调整,如拦截器,监听器,视图解析器等一系列,Tomcat的端口等。
(1)改端口号(自己选择,也可以默认)和过滤器

server:
      port: 8081
      servlet:
            context-path: /

(2)编写Service,这里测试就不写接口直接写实现类

package com.example.demo.service;

import com.example.demo.mapper.UserMapper;
import com.example.demo.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public User  getUserByPK(Integer pk){
        return userMapper.selectByPrimaryKey(pk);
    }

    @Transactional//配置事务
    public void insertUser(User user){
        userMapper.insert(user);
    }

}

(3)编写Controller层,并使用Restful风格

package com.example.demo.webdemo;

import com.example.demo.pojo.User;
import com.example.demo.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.sql.DataSource;

@RestController
//@Slf4j //用于日志记录,是lombok的功能
@RequestMapping("user")
public class WebBootDemo {
    @Autowired
    private UserService userService;
    @GetMapping("{id}")
    public User test(@PathVariable("id")Integer pk){
            return userService.getUserByPK(pk);
    }
}

(4)其他配置,这里举例常用的拦截器
编写拦截类,并实现HandlerInterceptor接口

package com.example.demo.Interceptor;

import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Slf4j
public class MyInterceptor implements HandlerInterceptor {

//    private static final Logger log= LoggerFactory.getLogger(MyInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        log.debug("preHandle method is now running!");
        System.out.println("123");
        return true;
    }

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

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

}

在前方使用的路径配置(Tomcat)使用的全部路径(不拦截网页)

4.到目前就算是一个小型的项目就搭建成功了,让我们来启动项目看看!
访问我们的controller
在这里插入图片描述
我们来控制台看看debug信息,debug上明显的出现拦截器的调试语句和我们的sql语句。
在这里插入图片描述
可以在数据库和视图层交互,说明我们的结构已经搭建好了!
这就是SpringBoot搭建的全过程,其实和SSM步骤大致相同,相信你把SSM配置熟悉,SpringBoot配置就很简单了吧!

猜你喜欢

转载自blog.csdn.net/qq_42605968/article/details/88047171