Spring整合Mybatis(基于xml配置文件方式和基于注解方式)

本文详细介绍了如何在Spring中整合Mybatis,包括基于XML配置文件和注解的方式。首先,文章阐述了Spring整合Mybatis的基础概念和依赖,接着分别讲解了XML配置文件方式的环境搭建、核心配置、Mapper接口映射和主程序加载。然后,介绍了基于注解的配置类和主程序加载。最后,列举了整合过程中可能遇到的报错及其解决方案,强调了正确理解和处理版本兼容性的重要性。
摘要由CSDN通过智能技术生成

Spring整合Mybatis(基于xml配置文件方式和基于注解方式)

在此之前,感觉有几个概念需要区分,我们说spring整合第三方框架,通常是第三方框架依赖spring进行再开发,

而spring和springboot又是两个概念,spring多用于ssm架构项目,而springboot多用于现在的微服务架构。

因此说整合其实需要区分“spring整合“和”springboot整合“。

spring整合mybatis的依赖

mybatis-spring

springboot整合mybatis的依赖

mybatis-spring-boot-starter

而spring自身项目框架则命名诸如spring-jdbc spring-test等,都是以spring开头的,因此在宏观认识上要做个了结。

我们单独使用Mybatis时候整体步骤如下:

  1. 配置mybatis的核心配置文件,如 mybatis-config.xml
  2. 读取配置核心配置文件构建SqlSessionFactory对象
  3. 由SqlSessionFacory对象构建出SqlSession会话对象用于执行sql
  4. 读取mapper对象,执行sql(基于xml映射文件或者基于反射获取mapper接口的字节码对象)

我们单独使用Spring的整体步骤如下:

  1. 配置spring的核心配置
  2. 读取核心配置获取应用上下文context

这样就已经可以使用spring了,spring的核心在于Ioc容易和DI的依赖注入,我们只需要通过xml或者注解注入bean即为使用。

那么spring整合mybatis实际上就是管理mybatis的bean对象了,而mybatis能够让spring管理的对象主要就两个:SqlSessionFactory以及对应的业务类Mapper接口对象

所以无论基于xml配置方式还是基于注解方式整合mybatis,最为核心的问题是如何将SqlSessionFacory和对应的Mapper接口对象交由spring管理。而为了让 spring容器管理mybatis对象,因此mybatis基于spring出了Mybatis-spring的jar包。

基于xml配置文件方式

一、环境搭建

版本问题在 mybatis-spring官网 有给出。

在这里插入图片描述

maven构建项目所需依赖

最基本的依赖其实为spring-context,mybatis-spring,mybatis,spring-jdbc,mysql-connector-java

这里需要特别注意spirng-jdbcmybatis 原因是 mybatis-spring并没有集成依赖mybatis基础jar包,而spring-jdbc是因为spring事务管理是由spring-jdbc实现的。

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.16</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.13</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>3.0.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>6.0.6</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.6</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

二、spring核心配置文件

mybatis-spring中给出了两个核心类用于解决spring容器管理核心对象问题。

SqlSessionFactoryBean,MapperFactoryBean这两个类命名都是以FacoryBean结尾的,这个在spring知识体系中是Bean对象实例化的一种形式,意味着实现了FacotoryBean<>的接口,而接口的范型则是需要构建的Bean。

这在看源码时候对理解帮助很大,如SqlSessionFactoryBean这个类如下:

public class SqlSessionFactoryBean implements FactoryBean<SqlSessionFactory>, InitializingBean, ApplicationListener<ContextRefreshedEvent> 

从这里可以看出两个信息:

  1. 这是个构建Bean实例的工厂类
  2. 这个工厂类的目的就是创建SqlSessionFactory对象

我们需要SqlSessionFactory的前提是我们需要给数据源Datasource,而通过MapperFactoryBean构建Mapper接口对象则需要指定SqlSessionFacory对象,因此有如下xml的配置,属性传递为:UserServiceImpl注入UserMapper,UserMapperMapperFactoryBean构建需要注入属性SqlSessionFacory,而构建SqlSessionFactory的工厂类则需要注入DataSource数据源。

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:property-placeholder location="classpath:jdbc.properties"/>

    <bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>