Mybatis整合SpringBoot快速上手
有了Mybatis独立项目的经验,Mybatis整合Springboot会变得非常容易。
创建SpringBoot项目
![image.png](https://img-blog.csdnimg.cn/img_convert/1693103864267a04bee2e60737250777.png#align=left&display=inline&height=282&margin=[object Object]&name=image.png&originHeight=282&originWidth=363&size=11230&status=done&style=none&width=363)
Mybatis整合SpringBoot
SpringBoot整合Mybatis就更简单了,因为有一部分工作SpringBoot框架为我们完成了!
添加依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.14</version>
</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>
核心配置
我们之前写单独项目的时候,是不是要写一个核心xml,就是这个xml让爷爷(SqlSessionFactoryBuilder)可以生出来爸爸(SqlSessionFactory),在SpringBoot中当然可以这样做,写一个xml,然后将这个xml告诉SpringBoot,不过想在我们有一个更简单的方式,通过springboot的配置文件和注解,我们告诉springboot mybatis的配置在哪里,这样就不用创建xml了
在springboot的application.yml中添加如下配置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/blog
username: root
password: AaA19980818
driver-class-name: com.mysql.jdbc.Driver
mybatis:
typeAliasesPackage: com.example.demo.entity
mapperLocations: classpath:mapper/*.xml
server:
port: 8081
在springboot的启动类添加如下注解:
@SpringBootApplication
@MapperScan("com.example.demo.dao")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
yml文件中的mapperLocations告诉springboot所有的XXXMapper.xml文件在哪里,启动类的注解告诉SpringBoot所有的XXXDao接口在哪里,这样所有的接口和实现类都在Springboot的掌握之中。
接下来我们就不用生成爷爷(SqlSessionFactoryBuilder)、爸爸(SqlSessionFactory)和儿子(SqlSession)了,这些SpringBoot都为我们解决了。只需要写出User、UserDao和UserDao.xml就可以了
静态对应
User.java
@Data
public class User {
private Long id;
private String nickname;
private String username;
private String password;
private String email;
private String avatar;
private Integer type;
private Date create_time;
private Date update_time;
}
动态接口
public interface UserDao {
User getUserById(Long id);
}
实现类
<?xml version="1.0" encoding="UTF8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.dao.UserDao">
<select id="getUserById" resultType="com.example.demo.entity.User" parameterType="Long">select * from blog.t_user where id =
#{id}
</select>
</mapper>
验证
最后我们编写一个controller验证一下吧!
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserDao userDao;
@RequestMapping("/getUserById")
public User getUserById(){
return userDao.getUserById((long)1);
}
}
快速上手工程目录结构
![image.png](https://img-blog.csdnimg.cn/img_convert/85d1194bb6ecbcc266c8b9c7d9657851.png#align=left&display=inline&height=322&margin=[object Object]&name=image.png&originHeight=322&originWidth=488&size=13966&status=done&style=none&width=488)
运行结果
![image.png](https://img-blog.csdnimg.cn/img_convert/b6ee0e0d021a5b0edebd01ab67c7c7ae.png#align=left&display=inline&height=91&margin=[object Object]&name=image.png&originHeight=91&originWidth=1842&size=24478&status=done&style=none&width=1842)