昨天尝试了一下用SpringBoot整合Mybatis,踩了不少坑,参考了一下别人的教程,总算是搭建成功了(例子是照着第一篇博客做的,总结一下自己踩的坑) ,现在把过程总结一下,具体一些细节大家可以看一下下面这两篇文章,有错误的地方欢迎大家指出并讨论(个人认为还是要有SSM基础的)。
参考文章: 1、https://blog.csdn.net/iku5200/article/details/82856621
2、http://www.javaboy.org/2019/0407/springboot- mybatis.html
创建SpringBoot项目
- 选择依赖
创建完成后在pom.xml中加入Druid依赖,完整依赖如下:
<dependencies>
<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.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</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>
</dependencies>
接下来,仿照第一篇博客的例子走一下流程(中间有一个坑,大家一定要自己仔细看一下我提到要注意的地方)
- 数据库表,建好后自己插入一些数据
CREATE TABLE `user` (
`id` int(32) NOT NULL AUTO_INCREMENT,
`userName` varchar(32) NOT NULL,
`passWord` varchar(50) NOT NULL,
`realName` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-
例子的目录结构
-
application.properties中的配置
server.port=8085
spring.datasource.url=jdbc:mysql://localhost:3307/mytravl?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=249735
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
mybatis.mapper-locations=classpath:mapping/*.xml
特别注意一点
mybatis.mapper-locations=classpath:mapping/*.xml
这个配置的作用是告诉mybatis去扫描哪里的mapper.xml文件,所以classpath:后面的目录名一定要跟resources目录下放mapper.xml的目录名一样,不然会报Invalid bound statement (not found)这样的错误
- User
public class User {
private Integer id;
private String userName;
private String passWord;
private String realName;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWoed() {
return passWord;
}
public void setPassWoed(String passWoed) {
this.passWord = passWoed;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", passWoed='" + passWord + '\'' +
", realName='" + realName + '\'' +
'}';
}
}
- UserMapper.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">
<mapper namespace="com.dzp.demo.mapper.UserMapper">
<resultMap id="BaseResultMap" type="com.dzp.demo.model.User">
<result column="id" property="id" jdbcType="INTEGER"/>
<result column="userName" property="userName" jdbcType="VARCHAR"/>
<result column="passWord" property="passWord" jdbcType="VARCHAR"/>
<result column="realName" property="realName" jdbcType="VARCHAR"/>
</resultMap>
<select id="findUserById" resultType="com.dzp.demo.model.User">
select * from user where id = #{id}
</select>
</mapper>
- UserMapper
@Repository
public interface UserMapper {
User findUserById(int id);
}
@Repository加这个是为了解决在Service中@Autowired引入mapper的红线警告(虽然红线警告没什么影响)
- UserService
@Service
public class UserService {
@Autowired
UserMapper userMapper;
public User findUserById(int id){
return userMapper.findUserById(id);
}
}
- UserController
@RestController
@RequestMapping("/testBoot")
public class UserController {
@Autowired
UserService userService;
@RequestMapping("getUser/{id}")
public String GetUser(@PathVariable int id){
return userService.findUserById(id).toString();
}
}
- 启动类DemoApplication
@MapperScan("com.dzp.demo.mapper")
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
在启动类加@MapperScan("com.dzp.demo.mapper")这个注解,这样所有的mapper都不用加@Mapper了
以上搭建完毕,启动项目,在浏览器中输入地址
http://localhost:8085/testBoot/getUser/1
- 页面显示