有了Mybatis独立项目的经验,Mybatis整合Springboot会变得非常容易。

创建SpringBoot项目

image.png

Mybatis整合SpringBoot

SpringBoot整合Mybatis就更简单了,因为有一部分工作SpringBoot框架为我们完成了!

添加依赖

  1. <dependency>
  2. <groupId>mysql</groupId>
  3. <artifactId>mysql-connector-java</artifactId>
  4. <version>5.1.30</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.projectlombok</groupId>
  8. <artifactId>lombok</artifactId>
  9. <version>1.18.14</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-web</artifactId>
  14. </dependency>
  15. <dependency>
  16. <groupId>org.mybatis.spring.boot</groupId>
  17. <artifactId>mybatis-spring-boot-starter</artifactId>
  18. <version>2.1.0</version>
  19. </dependency>

核心配置

我们之前写单独项目的时候,是不是要写一个核心xml,就是这个xml让爷爷(SqlSessionFactoryBuilder)可以生出来爸爸(SqlSessionFactory),在SpringBoot中当然可以这样做,写一个xml,然后将这个xml告诉SpringBoot,不过想在我们有一个更简单的方式,通过springboot的配置文件和注解,我们告诉springboot mybatis的配置在哪里,这样就不用创建xml了

在springboot的application.yml中添加如下配置:

  1. spring:
  2. datasource:
  3. url: jdbc:mysql://localhost:3306/blog
  4. username: root
  5. password: AaA19980818
  6. driver-class-name: com.mysql.jdbc.Driver
  7. mybatis:
  8. typeAliasesPackage: com.example.demo.entity
  9. mapperLocations: classpath:mapper/*.xml
  10. server:
  11. port: 8081

在springboot的启动类添加如下注解:

  1. @SpringBootApplication
  2. @MapperScan("com.example.demo.dao")
  3. public class DemoApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(DemoApplication.class, args);
  6. }
  7. }

yml文件中的mapperLocations告诉springboot所有的XXXMapper.xml文件在哪里,启动类的注解告诉SpringBoot所有的XXXDao接口在哪里,这样所有的接口和实现类都在Springboot的掌握之中。

接下来我们就不用生成爷爷(SqlSessionFactoryBuilder)、爸爸(SqlSessionFactory)和儿子(SqlSession)了,这些SpringBoot都为我们解决了。只需要写出User、UserDao和UserDao.xml就可以了

静态对应

User.java

  1. @Data
  2. public class User {
  3. private Long id;
  4. private String nickname;
  5. private String username;
  6. private String password;
  7. private String email;
  8. private String avatar;
  9. private Integer type;
  10. private Date create_time;
  11. private Date update_time;
  12. }

动态接口

  1. public interface UserDao {
  2. User getUserById(Long id);
  3. }

实现类

  1. <?xml version="1.0" encoding="UTF8"?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.example.demo.dao.UserDao">
  6. <select id="getUserById" resultType="com.example.demo.entity.User" parameterType="Long">select * from blog.t_user where id =
  7. #{id}
  8. </select>
  9. </mapper>

验证

最后我们编写一个controller验证一下吧!

  1. @RestController
  2. @RequestMapping("/user")
  3. public class UserController {
  4. @Autowired
  5. private UserDao userDao;
  6. @RequestMapping("/getUserById")
  7. public User getUserById(){
  8. return userDao.getUserById((long)1);
  9. }
  10. }

快速上手工程目录结构

image.png

运行结果

image.png