Spring与Mybatis整合

发布于:2025-04-01 ⋅ 阅读:(92) ⋅ 点赞:(0)

持久层整合

1.Spring框架为什么要与持久层技术进行整合

JavaEE开发需要持久层进行数据库的访问操作

JDBC Hibernate Mybatis进行持久层开发存在大量的代码冗余

Spring基于模板设计模式对于上述的持久层技术进行了封装

2.Mybatis整合

SqlSessionFactoryBean MapperScannerConfigure

Spring与Mybatis整合

1.Mybatis开发步骤的回顾

1.实体

2.实体别名

3.表

4.创建DAO接口

5.实现Mapper文件

6.注册Mapper文件

7.MybatisAPI调用

<?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>
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/db03?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="EmpMapper.xml"/>
    </mappers>
</configuration>

1.实体

2.实体别名  配置繁琐

3.表

4.创建DAO接口 

5.实现Mapper文件

6.注册Mapper文件 配置繁琐(一个Dao就需要配置一个)

7.MybatisAPI调用 代码冗余

 Spring与Mybatis整合思路分析

编码步骤

1.搭建开发环境(jar)

 <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.1.14.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.18</version>
        </dependency>

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">


<!--        连接池-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="url" value="jdbc:mysql://localhost:3306/db03?useSSL=false"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    </bean>
<!--    创建sqlSessionFactory SqlSessionFactoryBean-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations">
            <list>
                <value>classpath:mybatis.mapper/*Mapper.xml</value>
            </list>
        </property>
    </bean>
<!--    创建DAO对象 MapperSannerConfigure-->
    <bean id="scanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="mybatis.mapper"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
</beans>

Spring与Mybatis细节

Spring与Mybatis整合后,为什么Dao不提交事务,但是数据能查询并插入的数据库?

本质上控制连接对象(Connection)--->连接池(DataSource)

1.Mybatis提供的连接池对象 --->创建Connection

         Connection.setAutoCommit(false) 手工的控制了事务 操作完成后,手动提交

2.Druid(C3P0 DBCP)作为连接池  ->>>创建Connection

        Connection.setAutoCommit(true) true为默认值 保存自动控制事务 一条sql 自动提交

回答:Spring与Mybatis整合,引入了外部连接池对象,保持自动事务提交这个机制(Connection.setAutoCommit(true))不需要手动提交,自动提交事务

未来实战中,还会手工控制事务,多条Sql一起成功 一起失败 后续Spring通过事务控制解决这个问题