springboot整合 MVC和MyBatis

Spring Boot 踩坑篇

今天有点闲就顺手搭建了一个spring boot 整合MVC 和 Mybayis的小项目,期间遇到过一些问题。现做归纳与总结。

环境

spring boot 2.3.1
mysql驱动 5.1.37
mybatis 2.1.3
通用mybatis包 2.0.2

Spring Boot搭建

就是正常搭建一个spring boot,我使用的IDEA所以搭建比较方便(这个时代还有人不用IDEA嘛)。
接着导入spring boot 项目必要依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.1.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

整合Spring MVC

首先需要明确一点的是,spring boot是基于spring的它是spring 的扩展,所以要集成spring MVC只需要导入WEB启动器就可以了。

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

正常一个WEB项目我们都会有一个拦截器,所以首先我们来配置一个拦截器
1.自定义一个拦截器:需要首先HandlerInterceptor接口,重写里面的 1).preHandle:前置方法
2).postHandle:后置方法
3).afterCompletion:完成方法
以上三个方法

@Component
public class MyInterceptor implements HandlerInterceptor {

    Logger logger=Logger.getLogger("zpf");

    /**
     * 前置
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        logger.info("这是前置处理器");
        System.out.println("这是前置处理器");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("这是后置处理器");
    }

    /**
     * 后置
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("这是完成方法");
    }
}

2.需要将自定义拦截器配置到spring boot中
1)定义一个spring boot 配置类(类上打上@Configuration注解即可声明当前类为配置类)
2) 配置类实现WebMvcConfigurer接口,重写addInterceptors方法,将自定义拦截器配到spring boot项目中,addPathPatterns可以配置拦截路径(/**表示拦截所有)

/**
 * 配置拦截器
 * 1.声明改类为java配置类
 * 2.实现webMVCConfigurer接口
 */
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Autowired
    private MyInterceptor interceptorRegistry;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(interceptorRegistry)//将配置自己的栏截器
                .addPathPatterns("/**");//配置拦截路劲/*单级目录  /**多级别目录
    }
}

这样拦截器就算配好了

整合MyBatis

1.导入jdbc的启动器

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

2.导入mybatis的启动器

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

3.导入mybatis通用依赖启动器

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

4.由于我的mysql版本过低 不能适配最新的数据库驱动 所以我还需要导入MySQL驱动

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.37</version>
    </dependency>

5.在application.properties中配置数据源的连接信息

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/d_test
spring.datasource.username=root
spring.datasource.password=123456

6.配置mybatis的包扫描和映射路径

编写mybatis所代理的接口,打上@Mapper标签,继承Mapper接口(注意这个接口中有两个Mapper包)

import com.zpf.menu.entity.SysUser;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface SysUserMapper extends tk.mybatis.mapper.common.Mapper<SysUser> {
    //public List<SysUser> getSysUserById(Long id);
}

如果只是使用mybatis通用包里的方法到这就集成好了,如果需要和传统mybatis由于在xml中写sql 则继续

创建一个mybatis的xml文件

<?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">
<!--namespace为对应的Mapper接口-->
<mapper namespace="com.zpf.menu.mapper.SysUserMapper">
    <resultMap id="SysUser" type="com.zpf.menu.entity.SysUser">
        <id property="id" column="id" javaType="java.lang.Long"></id>
        <result property="username" column="username" jdbcType="VARCHAR"></result>
        <result property="userpwd" column="userpwd" jdbcType="VARCHAR"></result>
    </resultMap>

    <select id="getSysUserById" resultMap="SysUser">
        select * from users where id=#{id}
    </select>


</mapper>

application.properties中加上如下配置
1.mybatis包扫描(pojo)
mybatis.type-aliases-package=com.zpf.menu.entity
2.mybatis映射路劲
mybatis.mapper-locations=com/zpf/menu/mapper/**/*.xml

到此整合mybatis完毕

整合thymeleaf

在spring boot 中已经废弃掉了jsp,官方并不建议使用jsp 代而替之的是html,同时为了像jsp一样jstl或ognl表达式传值的操作被thymeleaf所替代。当然像thymeleaf这样的框架还有其它的 thymeleaf是spring boot 钦点的框架,自然集成性最好。

1.导入thymeleaf依赖

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

2.在resources目录下建立 templates文件夹 用于放 html文件

3.在resources目录下建立 static文件夹 用于放静态资源 如:图片,js文件,css文件等
4.在 templates中创建html文件 在htm头中引入xmlns:th=“http://www.thymeleaf.org” 即可使用 thymeleaf

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<table >
    <tr>
        <th>姓名</th>
        <th>用户名</th>
        <th>密码</th>
    </tr>

    <tr th:each="user : ${users}">
        <td th:text="${user.id}">xxx</td>
        <td th:text="${user.username}">xxx</td>
        <td th:text="${user.userpwd}">xxx</td>
    </tr>
</table>
</body>
</html>

thymeleaf语法可以去网上搜索

注意今天静态资源的加载需要配置
如下:加载resources中的satic和templates
spring.resources.static-locations=classpath:static,classpath:templates

自此整合完毕 需要dome源码的可以e-mail:2601646099@qq.com

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值