SpringBoot整合Mybatis

Posted AlaGeek

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot整合Mybatis相关的知识,希望对你有一定的参考价值。

1、创建项目

会的人可以直接创建SpringBoot项目,通过开发工具添加依赖,我这边就新建Maven工程,一步步来。
以下为工程文件结构:

2、添加依赖

pom文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>org.example</groupId>
    <artifactId>testmysql</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <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>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.9</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
    </build>

</project>

以上依赖中,mybatis和mysql的依赖是必须加的,lombok是为了少写代码,web依赖是为了能直接在页面上显示结果。

3、添加配置文件

配置文件如下:

# 线程池类型
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 数据库地址,personal_blog为数据库【自行替换】
spring.datasource.url=jdbc:mysql:///personal_blog
# 数据库账户【自行替换】
spring.datasource.username=root
# 数据库密码【自行替换】
spring.datasource.password=123456

4、数据库

添加完配置文件,来看看数据库里的表结构,如图:

表结构比较简单,毕竟是个样例,包含三个属性,一个自增主键id,两个字符串,其对应的实体类对象Book如下:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Book 
    private Integer id;
    private String name;
    private String author;

5、dao层

实体类有了,就要考虑从数据库里拿数据了,按照平常开发,对数据库的操作,我们总结为CRUD,也就是增删改查,本文我就讲个查,文末我会放代码链接,其它三种操作请自行阅读代码,我觉得这样举一反三应该学习的更深刻,最主要的是我懒,哈哈哈哈。
请看BookMapper接口:

@Mapper
public interface BookMapper 
    Book getBookById(Integer id);

@Mapper注解是为了使SpringBoot能够识别到我们BookMapper,从而创建Bean,这里我们讲getBookById,就是根据id查询数据库。
其对应的BookMapper.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.alageek.study.mapper.BookMapper">

    <select id="getBookById" parameterType="int" resultType="com.alageek.study.entity.Book">
        SELECT * FROM book WHERE id=#id
    </select>
    
</mapper>

此处需要注意的有以下几点:

  • namespace:命名空间要找对对应的Mapper接口,这里也就是BookMapper
  • select标签的id,要对应BookMapper里某个函数名
  • parameterType对应函数的参数类型
  • resultType也要对应函数的返回类型

6、应用

写完dao层,其实就可以拿到数据库数据了,不过我们拿到后,要给它显示到页面上,才知道已经拿到了,所以按照规定,先写个Service层,BookService如下:

@Service
public class BookService 

    @Autowired
    private BookMapper bookDao;

    public Book getBookById(Integer id)
        return bookDao.getBookById(id);
    
    

service为业务层,我们的业务就是显示从数据库中拿到的数据,所以这里直接掉dao层的接口即可。
再然后就是controller层,如下为BookController代码:

@RestController
public class BookController 

    @Autowired
    private BookService bookService;

    @GetMapping("/bookOps")
    public String bookOps()
        return bookService.getBookById(1).toString();
    


这部分代码逻辑就是从获取数据库Book表中id为1的数据,然后返回给前端。

7、测试

要测试,首先先得给数据库添加数据,这里我添加了两条:

然后启动程序,在浏览器输入http://localhost:8080/bookOps,看到如下页面即表示成功:

8、博主的话

按照我的步骤来,整合MyBatis不成问题,不过稍微改一下代码或者工程结构,没准就出问题了,这么说自然是因为我遇到了这个问题,有兴趣的请移步另一篇博客——记一次SpringBoot整合MyBatis时找不到Mapper.xml的BUG定位

9、资源地址

源码地址

以上是关于SpringBoot整合Mybatis的主要内容,如果未能解决你的问题,请参考以下文章

springboot.springboot用最简单的方式整合mybatis

如何整合 springboot + mybatis-plus(系列一)

springBoot 整合 mybatis+Oracle

SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源配置 MyBatis事务控制druid 监控)

springboot-26-整合mybatis,druid连接池

SpringBoot2基于SpringBoot实现SSMP整合