今天有点闲就顺手搭建了一个spring boot 整合MVC 和 Mybayis的小项目,期间遇到过一些问题。现做归纳与总结。
spring boot 2.3.1
mysql驱动 5.1.37
mybatis 2.1.3
通用mybatis包 2.0.2
就是正常搭建一个spring boot,我使用的IDEA所以搭建比较方便(这个时代还有人不用IDEA嘛)。
接着导入spring boot 项目必要依赖
org.springframework.boot
spring-boot-starter-parent
2.3.1.RELEASE
首先需要明确一点的是,spring boot是基于spring的它是spring 的扩展,所以要集成spring MVC只需要导入WEB启动器就可以了。
org.springframework.boot
spring-boot-starter-web
正常一个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("/**");//配置拦截路劲/*单级目录 /**多级别目录
}
}
这样拦截器就算配好了
1.导入jdbc的启动器
org.springframework.boot
spring-boot-starter-jdbc
2.导入mybatis的启动器
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.1.3
3.导入mybatis通用依赖启动器
tk.mybatis
mapper-spring-boot-starter
2.0.2
4.由于我的mysql版本过低 不能适配最新的数据库驱动 所以我还需要导入MySQL驱动
mysql
mysql-connector-java
5.1.37
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 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完毕
在spring boot 中已经废弃掉了jsp,官方并不建议使用jsp 代而替之的是html,同时为了像jsp一样jstl或ognl表达式传值的操作被thymeleaf所替代。当然像thymeleaf这样的框架还有其它的 thymeleaf是spring boot 钦点的框架,自然集成性最好。
1.导入thymeleaf依赖
org.springframework.boot
spring-boot-starter-thymeleaf
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