【Spring】Spring整合MyBatis

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【1月更文挑战第20天】【Spring】Spring整合MyBatis

 目录

概述:

集成依赖:

注意:

MyBatis使用步骤:

整合Spring-MyBatis步骤:

第一步:创建Spring核心配置文件applicationContext.xml

第二步:在Spring核心配置文件中配置DataSource数据源

第三步:配置MyBatis核心配置文件


概述:

     通过使用Spring的IoC容器,对MyBatis实例进行管理。

       Spring能把MyBatis集成进来,像使用一个框架那样去使用,将MyBtatis框架中所有的对象注入Spring容器,交给Spring容器进行统一管理。直接从IoC容器中获取获取对象。

集成依赖:

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

image.gif

      整合Spring和MyBatis需要在Spring应用上下文中定义:

    • SqlSessionFactory
    • 数据映射器类

           在MyBatis-Spring中,使用SqlSessionFactoryBean来创建SqlSessionFactory。配置这个工厂Bean到Spring的XML配置文件中:

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="dataSource" />
    </bean>

    image.gif

    注意:

           SqlSessionFactory需要一个DataSource(数据源),数据源由SpringIoC容器进行统一管理。

           在MyBatis单独的使用中,通过SqlSessionFactoryBuilder来创建SqlSessionFactory。在MyBatis-Spring中,使用SqlSessionBean来创建SqlSessionFactory。

           MyBatis通过SqlSessionFactory来获取Session。获取Session实例之后,通过Session实例执行sql语句,提交事务,回滚连接等操作,当不在需要时,使用close方法结束Session。

           SqlSessionFactory有唯一的必要属性:用于JDBC的DataSource,可以是任意的DataSource对象,这个DataSource对象是由Spring进行管理。

           configLocation属性:用来指定MyBatis的XML配置文件路径,可以对基础配置进行修改<setting>或<typeAliases>等

           SqlSessionTemplate是MyBatis-Spring的核心,作为SqlSession的一个实现可以代替SqlSession。模板可以参与到Spring的事务中,并且由于其是线程安全的,可以提供多个映射器类使用。

           可以使用SqlSessionFactory做为构造方法参数来创建SqlSessionTemplate对象。

    <!--配置sqlSession-->
        <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
            <!--只能通过构造器注入sqlSessionFactory,因为没有set方法-->
            <constructor-arg index="0" ref="sqlSessionFactory"/>
        </bean>

    image.gif

           这个sqlSession直接注入到dao Bean容器中,只需要在dao接口实现类中添加SqlSession属性:

    public class UserMapperImpl implements UserMapper{
        private SqlSessionTemplate sqlSession;
        public void setSqlSession(SqlSessionTemplate sqlSession) {
            this.sqlSession = sqlSession;
        }
        public List<User> selectAll() {
            return sqlSession.getMapper(UserMapper.class).selectAll();
        }
    }

    image.gif

           注入SqlSessionTemplate:

    <!-- 创建mapper对象-->
        <bean id="userMapperImpl" class="com.sunny.ssm.mapper.UserMapperImpl">
            <property name="sqlSession" ref="sqlSession"/>
        </bean>

    image.gif


    MyBatis使用步骤:

      1. 定义dao接口
      2. 配置dao接口对应的XML配置文件
      3. 定义MyBatis的主配置文件
      4. 通过SqlSession获取dao接口对应的XML配置文件,获取接口类的字节码文件,创建dao代理对象

      如何使用dao对象,需要使用getMapper( )方法,怎么样能使用getMapper( )方法,需要哪些条件:

        • 获取SqlSession对象,需要使用SqlSessionFactory的openSession( )方法。
        • 创建SqlSessionFactory对象。通过读取MyBatis的主配置文件,创建SqlSessionFactory对象

               需要SqlSessionFactory对象,使用Factory能获取SqlSession,有了SqlSession就能获取dao接口类,目的就是获取dao对象,通过接口的代理对象调用方法。

        Factory创建需要读取主配置文件:

        (我们会使用独立的连接池类替换MyBatis默认自带的,把连接池类也交给Spring创建)

        <!--configuration核心配置文件-->
        <configuration>
            <environments default="development">
                <environment id="development">
              <!--事务管理-->
                    <transactionManager type="JDBC"/>
                    <dataSource type="POOLED">
                        <property name="driver" value="com.mysql.jdbc.Driver"/>
                        <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>
                        <property name="username" value="root"/>
                        <property name="password" value="131452"/>
                    </dataSource>
                </environment>
            </environments>
            <mappers>
                <mapper resource="接口类对应得XML配置文件引用"/>
            </mappers>
        </configuration>

        image.gif

        Druid数据库连接池:https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE


        整合Spring-MyBatis步骤:

        第一步:创建Spring核心配置文件applicationContext.xml

        <?xml version="1.0" encoding="UTF-8"?>
        <beans xmlns="http://www.springframework.org/schema/beans"
               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">
        </beans>

        image.gif

        <?xml version="1.0" encoding="UTF-8"?>
        <beans xmlns="http://www.springframework.org/schema/beans"
          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-4.1.xsd ">
          <!-- Spring连接的JDBC数据源 -->
          <bean id="dataSource"
            class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
            <property name="url"
              value="jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf8&useOldAliasMetadataBehavior=true" />
            <property name="username" value="root" />
            <property name="password" value="131452" />
          </bean>
          <!-- 指出Mybatis的核心配置文件,关于数据库表和Java文件的映射写在里面 -->
          <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="configLocation" value="configuration.xml"></property>
          </bean>
          <!-- 指出数据库接口方法所在的包 -->
          <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
            autowire="byName">
            <property name="basePackage" value="接口包路径" />
            <property name="sqlSessionFactory" ref="sqlSessionFactory" />
          </bean>
        </beans>

        image.gif

        第二步:在Spring核心配置文件中配置DataSource数据源

        创建配置文件database.properties文件

        #连接数据库的四个基本要素
        jdbc.driverClassName=com.mysql.cj.jdbc.Driver
        jdbc.url=jdbc:mysql://localhost:3306/数据库名
        jdbc.username=root
        jdbc.password=131452
        #druid连接池其他配置,省略

        image.gif

        <!--DataSource: 使用Spirng的数据源替换Mybatis的配置, 可以使用c3p0,dbcp,druid,或者spring提供的jdbc-->
        <!-- 加载数据库配置信息 -->
        <context:property-placeholder location="classpath:db.properties" system-properties-mode="NEVER"/>
        <!-- 连接池对象 -->
        <bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource"
              init-method="init" destroy-method="close">
            <property name="driverClassName" value="${jdbc.driverClassName}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="password" value="${jdbc.password}"/>
        </bean>

        image.gif

        第三步:配置MyBatis核心配置文件

        <?xml version="1.0" encoding="UTF-8"?>    
        <!DOCTYPE configuration      
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"      
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
        <configuration>
            <!--配置操作数据库的xml配置文件路径-->
          <mappers>
            <mapper resource="接口类映射的xml文件路径" />
          </mappers>
        </configuration>

        image.gif


        配置Druid数据库连接池:

        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
            init-method="init" destroy-method="close">
            <property name="url" value="${jdbc.jdbcUrl}" />
            <property name="username" value="${jdbc.user}" />
            <property name="password" value="${jdbc.password}" />
            <property name="driverClassName" value="${jdbc.driverClass}" />
            <!-- 配置初始化大小、最小、最大 -->
            <property name="initialSize" value="1" />
            <property name="minIdle" value="1" />
            <property name="maxActive" value="20" />
                <!-- 配置获取连接等待超时的时间 -->
            <property name="maxWait" value="60000" />
                <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
            <property name="timeBetweenEvictionRunsMillis" value="60000" />
                <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
            <property name="minEvictableIdleTimeMillis" value="300000" />
            <property name="validationQuery" value="SELECT 'x'" />
            <property name="testWhileIdle" value="true" />
            <property name="testOnBorrow" value="false" />
            <property name="testOnReturn" value="false" />
              <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
            <property name="poolPreparedStatements" value="true" />
            <property name="maxPoolPreparedStatementPerConnectionSize"
              value="20" />
               <!-- 配置监控统计拦截的filters -->
            <property name="filters" value="stat" />
          </bean>

        image.gif


        相关实践学习
        基于CentOS快速搭建LAMP环境
        本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
        全面了解阿里云能为你做什么
        阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
        相关文章
        |
        19天前
        |
        SQL Java 数据库连接
        SpringBoot整合Mybatis
        SpringBoot整合Mybatis
        37 2
        |
        17天前
        |
        算法 Java 数据库连接
        Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档
        Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档
        |
        19天前
        |
        Java 数据库连接 Spring
        Spring 整合mybatis
        Spring 整合mybatis
        24 2
        |
        10天前
        |
        Java 关系型数据库 数据库连接
        MyBatis-Plus介绍及Spring Boot 3集成指南
        MyBatis-Plus是一个MyBatis扩展工具,旨在简化Java开发中的CRUD操作。它具有无侵入性、低损耗、强大的CRUD功能、Lambda表达式支持、主键自动生成、ActiveRecord模式、全局操作和内置代码生成器等特点。在Spring Boot 3中集成MyBatis-Plus,需在pom.xml添加依赖,排除特定版本的mybatis-spring,并用@MapperScan注解指定Mapper接口路径。此外,还介绍了如何使用MyBatis-Plus代码生成器自动生成Mapper、Model、Service和Controller层代码,以加速开发。
        51 2
        MyBatis-Plus介绍及Spring Boot 3集成指南
        |
        10天前
        |
        Java 关系型数据库 MySQL
        SpringBoot整合JUnit、MyBatis、SSM
        SpringBoot整合JUnit、MyBatis、SSM
        21 4
        |
        10天前
        |
        Java 数据库连接 数据库
        Spring整合Mybatis、Spring整合JUnit
        Spring整合Mybatis、Spring整合JUnit
        20 1
        Spring整合Mybatis、Spring整合JUnit
        |
        12天前
        |
        Java 数据库连接 数据库
        小唐开始学 Spring Boot——(3)利用mybatis访问数据表
        小唐开始学 Spring Boot——(3)利用mybatis访问数据表
        |
        19天前
        |
        JSON Java 数据格式
        nbcio-boot升级springboot、mybatis-plus和JSQLParser后的LocalDateTime日期json问题
        nbcio-boot升级springboot、mybatis-plus和JSQLParser后的LocalDateTime日期json问题
        18 0
        |
        19天前
        |
        SQL Java 数据库连接
        15:MyBatis对象关系与映射结构-Java Spring
        15:MyBatis对象关系与映射结构-Java Spring
        37 4
        |
        19天前
        |
        XML Java 数据库连接
        Spring Boot与MyBatis:整合与实战
        【4月更文挑战第29天】在现代的Java Web应用开发中,持久化层框架扮演了至关重要的角色。MyBatis作为一款优秀的持久化框架,被广泛应用于Java开发中。Spring Boot提供了简化开发流程的功能,而与MyBatis的整合也变得更加便捷。
        29 0