spring-boot集成mybatis真的很简单吗?

博客 分享
0 168
张三
张三 2023-06-07 08:10:07
悬赏:0 积分 收藏

spring-boot集成mybatis真的很简单吗?

在日常的后端开发中,使用mybatis作为DAO层的持久框架已经是惯例。但很多时候都是在别人搭好的框架中进行开发,对怎么搭建环境是一知半解,今天就来实践下。

一、集成分哪些步骤

来看下集成mybatis需要哪些步骤,

1、确定环境及依赖

2、配置文件;

3、测试

二、环境及依赖

这里,基于springboot集成mybatis。先看下具体的版本,

springboot:2.3.3.RELEASE

mybatis-spring-boot-starter:2.3.0

mysql驱动:8.0.32

下面具体看下这些依赖,spring-boot自不用说,就是在这个环境下的;

mybatis-spring-boot-starter

mybatis-spring-boot-starter是针对mybatis和spring-boot集成而开发的一个依赖,里边包含了所需的依赖,方便集成,其实spring官方还有很多这样的starter,例,

可以看到官方提供了很多starter供开发者使用。怎么没看到mybatis-spring-boot-starter呐,不急,它不是官方提供的,而是mybatis官方提供的,多提一句,对于starter的命名官方也给出了这样的建议,官方提供的spring-boot-starter-*,而第三方的则是thirdpartyproject-spring-boot-starter,

详见:https://docs.spring.io/spring-boot/docs/2.3.0.RELEASE/reference/pdf/spring-boot-reference.pdf

你想创建自己的starter吗,可以在文末“推荐阅读”里找到相关的博文。

mysql驱动也不用说,要使用程序访问mysql,自然少不了mysql的驱动。

用一张图来描述下,springboot下集成mybatis的一个逻辑流程,

我们都知道,可以在程序中直接使用JDBC访问mysql,也可以使用mybatis访问mysql,在spring的环境下则通过mybatis-spring访问mysql。从图中可以看到访问路径更长了,那集成mybatis的意义是什么,答案是使用更简单,还记得刚学习的时候使用JDBC的噩梦吗?

看下,引入的依赖,我这里使用父子项目,采用在父pom中管理依赖,子pom使用的原则。

父pom.xml

           <!--mybatis-spring-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.3.0</version>
            </dependency>
            <!--mysql的驱动-->
            <dependency>
                <groupId>com.mysql</groupId>
                <artifactId>mysql-connector-j</artifactId>
                <version>8.0.32</version>
            </dependency>

子pom.xml这里不再列出,看下最终的依赖,

可以看到mybatis-spring-boot-starter中已经包含了mybatis、mybatis-spring等依赖,mybatis依赖不用单独引了。换句话说,在spring-boot中集成mybatis且连接mysql使用下面两个依赖即可,

1、mybatis-spring-boot-starter

2、mysql-connector-j

访问其他数据库换掉驱动即可。

三、配置文件

我们知道使用mybaits的目的是访问数据库,而且mybatis访问数据库使用的是JDBC驱动的方式,那么配置的话,可以分为两块,

1、mybatis配置

2、JDBC配置文件

3.1、mybatis配置

使用过mybatis的都了解,mybatis是基于xml的,使用xml来写sql实现数据库的访问,java是面向对象的,所以要操作文件,或者说调用xml中的方法需要一个对象,这个对象就是Mapper接口,所以,mybatis的配置文件有两块,一个是配置xml,另一个就是告诉mybatis将xml映射到哪些接口中。

application.yml中配置mybatis的xml

mybatis:
  mapper-locations: classpath*:mapper/*.xml

这些xml文件在resource文件夹下,

接下来就是mapper接口,使用@MapperScan注解,在启动类上配置扫描的包

这样就完成了mybatis的配置。接下来就是JDBC的配置。

3.2、JDBC配置文件

结合之前使用JDBC的经验,我们知道要创建一个JDBC连接需要知道数据库驱动名,连接URL、用户名、密码,这些就可以了。这里也是配置这些,在application.yml中进行配置,

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&autoReconnect=true&allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
    username: root
    password: 123456

这样JDBC的配置就可以了。上边的具体配置需要自行修改成自己的。

有小伙伴说不对,我的配置里还有多了一个,

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&autoReconnect=true&allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
    username: root
    password: 123456
    type: com.alibaba.druid.pool.DruidDataSource

没错,多的配置是datasource的类型,这里可以不配,默认是com.zaxxer.hikari.HikariDataSource,当然了也可以指定,比如使用c3p0、druid等第三方数据库连接池,这都是可以的(前提引入相关依赖)。不配置默认使用下面三个中的一个,有兴趣的可以看下org.springframework.boot.jdbc.DataSourceBuilder类的实现,

 

以上,就完成配置。经过这几步就完成了mybatis和spring-boot的集成,是不是很好奇为什么这么简单?下面简单分析下。

 

四、mybatis是怎么集成到springboot中的

讲这个问题之前,先要达成一个共识:spring是一个bean的容器,管理bean的生命周期。

来看下mybatis中的Mapper接口,该接口会被实例化为一个代理对象,在代理对象中有一个sqlSession的变量,该变量是SqlSessionTemplate类型的,SqlSessionTemplate是mybatis中的类,

 

它是怎么被注入到spring管理的类中,答案是通过MybatisAutoConfiguration这个类,该类在mybatis-spring-boot-starter中,有这样一个方法,

该方法会生成一个sqlSessionTemplate,这样就可以和mybatis联系在一起了,而更有意思的是下面这个方法,生成sqlSessionFactory的方法,追踪该方法可以看到mybatis的源码中,并熟悉整个流程。

 

感兴趣的小伙伴可以自己看下源码哦,同时也可以看“推荐阅读”中有关mybaits源码的分析。

 

五、总结

关于spring-boot集成mybatis的有关问题就分享到这儿了,遵循下面几点,

1、添加相关依赖,mybatis-spring-boot-starter、数据库驱动;

2、mybatis的配置,扫描mapper接口、加载xml文件;

3、数据源配置,驱动类、url、user、password等;

最后,本文用到的源码均可关注下方公众号获得,欢迎与志同道合的你一起交流学习。

推荐阅读

我的第一个springboot  starter

mybatis源码配置文件解析之一:解析properties标签

springboot引入mybatis遇到的坑

posted @ 2023-06-07 07:07  良工说技术  阅读(2)  评论(0编辑  收藏  举报
回帖
    张三

    张三 (王者 段位)

    1111 积分 (2)粉丝 (41)源码

     

    温馨提示

    亦奇源码

    最新会员