【Spring】Spring整合MyBatis

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 【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


        相关实践学习
        如何在云端创建MySQL数据库
        开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
        全面了解阿里云能为你做什么
        阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
        相关文章
        |
        4天前
        |
        Java 数据库连接 数据库
        spring和Mybatis的逆向工程
        通过本文的介绍,我们了解了如何使用Spring和MyBatis进行逆向工程,包括环境配置、MyBatis Generator配置、Spring和MyBatis整合以及业务逻辑的编写。逆向工程极大地提高了开发效率,减少了重复劳动,保证了代码的一致性和可维护性。希望这篇文章能帮助你在项目中高效地使用Spring和MyBatis。
        7 1
        |
        1月前
        |
        前端开发 Java Apache
        Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
        本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
        353 1
        Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
        |
        2月前
        |
        Java 数据库连接 数据库
        spring复习05,spring整合mybatis,声明式事务
        这篇文章详细介绍了如何在Spring框架中整合MyBatis以及如何配置声明式事务。主要内容包括:在Maven项目中添加依赖、创建实体类和Mapper接口、配置MyBatis核心配置文件和映射文件、配置数据源、创建sqlSessionFactory和sqlSessionTemplate、实现Mapper接口、配置声明式事务以及测试使用。此外,还解释了声明式事务的传播行为、隔离级别、只读提示和事务超时期间等概念。
        spring复习05,spring整合mybatis,声明式事务
        |
        2月前
        |
        Java 数据库连接 数据库
        SpringBoot 整合jdbc和mybatis
        本文详细介绍了如何在SpringBoot项目中整合JDBC与MyBatis,并提供了具体的配置步骤和示例代码。首先,通过创建用户实体类和数据库表来准备基础环境;接着,配置Maven依赖、数据库连接及属性;最后,分别展示了JDBC与MyBatis的集成方法及其基本操作,包括增删查改等功能的实现。适合初学者快速入门。
        SpringBoot 整合jdbc和mybatis
        |
        1月前
        |
        Java 关系型数据库 MySQL
        springboot学习五:springboot整合Mybatis 连接 mysql数据库
        这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
        98 0
        springboot学习五:springboot整合Mybatis 连接 mysql数据库
        |
        1月前
        |
        Java 数据库连接 API
        springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
        本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
        |
        2月前
        |
        缓存 前端开发 Java
        【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
        Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
        【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
        |
        1月前
        |
        前端开发 Java 数据库连接
        表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
        本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
        51 0
        表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
        |
        1月前
        |
        Java 数据库连接 mybatis
        Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
        该文档详细介绍了如何在Springboot Web项目中整合Mybatis,包括添加依赖、使用`@MapperScan`注解配置包扫描路径等步骤。若未使用`@MapperScan`,系统会自动扫描加了`@Mapper`注解的接口;若使用了`@MapperScan`,则按指定路径扫描。文档还深入分析了相关源码,解释了不同情况下的扫描逻辑与优先级,帮助理解Mybatis在Springboot项目中的自动配置机制。
        136 0
        Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
        |
        2月前
        |
        XML Java 关系型数据库
        springboot 集成 mybatis-plus 代码生成器
        本文介绍了如何在Spring Boot项目中集成MyBatis-Plus代码生成器,包括导入相关依赖坐标、配置快速代码生成器以及自定义代码生成器模板的步骤和代码示例,旨在提高开发效率,快速生成Entity、Mapper、Mapper XML、Service、Controller等代码。
        springboot 集成 mybatis-plus 代码生成器
        下一篇
        无影云桌面