SpringBoot整合Mybatis以及SpringMVC
第一步:搭建SpringBoot项目
搭建的方式参考其他教程
第二步:导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--添加jsp依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-spec</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.5</version>
</dependency>
<!--json报文处理相关-->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.2.3</version>
<classifier>jdk15</classifier>
</dependency>
第三步:添加配置
# 页面默认前缀目录
spring.mvc.view.prefix=/WEB-INF/jsp/
# 响应页面默认后缀
spring.mvc.view.suffix=.jsp
#数据库连接参数的配置
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/test?serverTimezone=UTC
spring.datasource.username = root
spring.datasource.password = 123456
#mapper映射文件的位置
mybatis.mapper-locations: classpath:mapper/*.xml
#实体类的位置
mybatis.type-aliases-package: com.xc.springboot.domain
#当遇到同样名字的时候,是否允许覆盖注册
spring.main.allow-bean-definition-overriding=true
第四步:创建mapper文件
在resources中创建文件夹mapper,并创建文件MusicInfoMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xc.springboot.dao.mapper.MusicInfoMapper">
<resultMap id="BaseResultMap" type="com.xc.springboot.dao.domain.MusicInfo">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="singer_name" jdbcType="VARCHAR" property="singerName" />
<result column="music_size" jdbcType="VARCHAR" property="musicSize" />
<result column="music_name" jdbcType="VARCHAR" property="musicName" />
</resultMap>
</mapper>
第五步:创建数据库实体类
package com.xc.springboot.dao.domain;
public class MusicInfo {
// 主键id
private Integer id;
// 歌手名
private String singerName;
// 歌曲大小
private String musicSize;
// 歌曲名
private String musicName;
/**
* 获取 主键id music_info.id
*
* @return 主键id
*/
public Integer getId() {
return id;
}
/**
* 设置 主键id music_info.id
*
* @param id 主键id
*/
public void setId(Integer id) {
this.id = id;
}
/**
* 获取 歌手名 music_info.singer_name
*
* @return 歌手名
*/
public String getSingerName() {
return singerName;
}
/**
* 设置 歌手名 music_info.singer_name
*
* @param singerName 歌手名
*/
public void setSingerName(String singerName) {
this.singerName = singerName == null ? null : singerName.trim();
}
/**
* 获取 歌曲大小 music_info.music_size
*
* @return 歌曲大小
*/
public String getMusicSize() {
return musicSize;
}
/**
* 设置 歌曲大小 music_info.music_size
*
* @param musicSize 歌曲大小
*/
public void setMusicSize(String musicSize) {
this.musicSize = musicSize == null ? null : musicSize.trim();
}
/**
* 获取 歌曲名 music_info.music_name
*
* @return 歌曲名
*/
public String getMusicName() {
return musicName;
}
/**
* 设置 歌曲名 music_info.music_name
*
* @param musicName 歌曲名
*/
public void setMusicName(String musicName) {
this.musicName = musicName == null ? null : musicName.trim();
}
@Override
public String toString() {
return "MusicInfo{" +
"id=" + id +
", singerName='" + singerName + '\'' +
", musicSize='" + musicSize + '\'' +
", musicName='" + musicName + '\'' +
'}';
}
}
第六步:创建dao层代码
@Repository("musicInfoMapper")
public interface MusicInfoMapper {
//使用Mapper注解可以达到相同的目的
@ResultMap("BaseResultMap")
@Select("select * from music_info")
List<MusicInfo> selectAll();
}
第七步:service层代码省略
第八步:编写controller层代码
@Controller
public class IndexController {
private static final String SHOW = "show";
@Autowired
private MusicInfoService musicInfoService;
@RequestMapping("/show")
@ResponseBody
public String getMusicInfo(HttpServletRequest request) {
List<MusicInfo> musicInfoList = musicInfoService.getMusicInfo();
request.getSession().setAttribute("list", musicInfoList);
return SHOW;
}
}
第九步:编写前端代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@taglib
prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table>
<tr>
<td>歌曲编号</td>
<td>歌手姓名</td>
<td>歌曲大小</td>
<td>歌曲名称</td>
</tr>
<c:if
test="${sessionScope!=null}">
<c:forEach
var="list" items="${sessionScope.list}">
<tr>
<td>${list.id}</td>
<td>${list.singerName}</td>
<td>${list.musicSize}</td>
<td>${list.musicName}</td>
</tr>
</c:forEach>
</c:if>
</table>
</body>
</html>
第十步:启动服务,访问地址
第十一步:浏览器输出如下结果
歌曲编号 歌手姓名 歌曲大小 歌曲名称
1 小三 3.2M 起风了
2 刘德华 3.0M 忘情水
3 猪点点 5.0M 会写程序的小猪
补充内容:注解含义
1、@PostMapping:映射一个POST请求
2、@RequestMapping:Spring Web应用程序中常用注解,作用是将HTTP请求映射到MVC和REST控制器的处理方法上,查看源码,发现@PostMapping注解上存在@RequestMapping注解
3、@GetMapping:处理GET请求
4、@ResponseBody:作用是将Controller方法返回的对象,通过适当的转换器转换为指定的格式之后,写入到Response对象的响应体中(Body区),通常用来返回JSON数据,或者XML数据
5、@RestController:相当于@ResponseBody+@Controller注解的组合,如果使用该注解,则Controller中的方法无法返回jsp页面,或者html页面,配置的视图解析器不起作用,染回的内容,就是Return中的内容
6、@Controller:该注解需要配合视图解析器使用,如果需要返回JSON、XML或者自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解
7、@RequestBody:主要用来接收前端传递给后端的JSON数据
8、@RequestParam:一个请求,只有一个@RequestBody,但是可以有多个
9、@Mapper:注解的作用1、将mapper这个dao交给Spring管理2、为了不再写mapper映射文件3、为了给添加@Mapper注解的接口自动生成实现类
10、@ResultMap:注解的作用1、解决列名和属性名不一致的情况2、多表关联查询