经过前面的学习,这次就用一个小的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配置就很简单了吧!