MyBatis与Spring的整合

本文详细介绍了MyBatis与Spring框架的整合过程,包括整合思路、准备工作、配置数据源、注入映射器实现、声明式事务处理等内容,旨在简化数据库操作,提升开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MyBatis与Spring的整合

幕布
我们已经学习了MyBatis的基础之上,能够使用MyBatis进行数据库操作。而Spring框架通过IoC,AOP等机制,能够对项目中的组件进行解耦合管理,建立一个低藕合的应用架构,这大大增加了系统开发和维护的灵活性,便于功能扩展。这里我们将利用Spring对MyBatis进行整合,在对组件实现解耦的同事,还能是MyBatis框架的使用便的更加方便和简单。此外,通过Spring提供的声明式事务等服务,能够进一步地简化编码,减少开发工作量,提高开发效率。
在这里插入图片描述

Spring对MyBatis的整合思路

作为Bean容器,Spring框架提供了IoC机制,可以接管所有组件的创建工作并进行依赖管理,因而整合的组要工作就是把MyBatis框架使用中所涉及的核心组件配置到Spring容器中,交给Spring来创建和管理。
具体来说,业务逻辑对象依赖基于MyBatis技术实现的DAO对象,核心是获取SqlSession实例要获得SqlSession实例,则需要依赖SqlSessionFactory实例。而SqlSessionFactory是SqlSessionFactoryBuilder依据MyBatis配置文件中的数据源,SQL映射文件等信息来构造的。
针对上述依赖关系,以往我们需要自行编码通过SqlSessionFactoryBuilder读取配置文件,构造SqlSessionFactory,进而获得SqlSession实例,满足业务逻辑对象对于数据访问的需要。随着Spring框架的引入,以上流程将全部移交给Spring,发挥Spring框架Bean容器的作用,接管组件的创建工作,管理组件的生命周期,并对组件之间的依赖关系进行解耦合管理。。

Spring整合MyBatis的准备工作

  1. 在项目中加入Spring,MyBatis及整合相关的JAR文件
  2. 建立开发目录结构,创建实体类
  3. 创建数据访问接口
  4. 配置SQL映射文件
  5. 配置MyBatis配置文件

Spring整合MyBatis的整合步骤

配置数据源

对于任何持久化解决方案,数据库连接都是首先要解决的问题。在Spring中,数据源作为一个重要的组件可以单独进行配置和维护。在示例4中,我们将MyBatis配置文件中有关数据源的配置移 余,转移到Spring配置文件中进行维护。
在Spring中配置数据源,首先要选择一种具体的数据源实现技术。目前流行的数据源实现有bcp. c3p0. Proxool等,它们都实现了连接池功能。这里以配置dbcp数据源为例进行讲解,其他数居源的配置方法与此类似,大家可以自行查阅相关资料进行学习。dbcp数据源隶属于Apache Cormmons 页目,使用dbcp数据源,需要下载并在项目中添加cormmons-dbcp-1 .4 jar和commons-po-1.6.jar两个文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注入映射器实现

在上面的DAO实现中使用SsnTemolale的方法,都是采用字符串来指定映射项,这种方式比较容易产生错误,如果存在拼写错误,在编译期无法识别,只能等到运行的时候才能发现。而且如果命名空间发生变化,会导致很多地方需要修改.不 易维护。
MyBatis中可以使用Sq|Session的getMapper (Class type)方法 ,根据指定的映射器和映射文件直接生成实现类。这样不必自行编写映射器的实现类,就可以调用映射器的方法进行功能实现。
SqISessionTemplate作为SqlSession接口的实现,自然也具备相同作用的getMapper( )方法实现,
但在集成环境中.直接在代码中使用getMapper()方法并非最佳选择。利用MyBatis–Spring提供的组
件.可以不必每次调用getMapper( )方法.而是通过配置的方式直接为业务对象注入映射器实现,无
需额外的编码。对于不包含其他非MyBatis的工作的数据访问操作,这是首选的做法。

使用MapperScannerConffigurer注入映射器

在这里插入图片描述

为业务层添加声明式事务

业务层的职能不仅仅是调用DAO这么简单.事务处理是任何企业级应用开发中不能回避的一-个
重要问题。以往我们通过在业务方法中硬编码的方式进行事务控制,这样做的弊端显而易见:事务
代码分散在业务方法中难以重用,需要调整时工作量也比较大:复杂事务的编码难度较高.增加了
开发难度等。Spring 提供了声明式事务处理机制,它基于AOP实现,无须编写任何事务管理代码.
所有的工作全在配置文件中完成。这意味着与业务代码完全分离,配置即可用.降低了开发和维护
的难度。

配置声明式事务

这里以添加用户的功能为例,介绍如何实现声明式事务处理。
首先在UserMapper和UserMapper.xml中添加相关方法和SQL映射。
在UserMapper 中添加的关键代码:

public int add(User user);

UserMapper.xml中添加的关键代码:

 <insert id="add" parameterType="User">
        insert into smbms_user (userCode,userName,userPassword,gender,
                birthday,phone,address,userRole,createdBy,creationDate) 
        values (#{userCode},#{userName},#{userPassword},#{gender},
                #{birthday},#{phone},#{address},#{userRole},
                #{createdBy},#{creationDate})
    </insert>

由于使用MapperScannerConfigurer动态创建映射器实现,没有中的一员的接口和实现类,也就没有相关代码需要修改。

在野外组件中添加相应的业务方法如下:

在业务接口中添加的关键代码

public boolean addNewUser(User user);

业务实现类中的方法实现代码:

 @Override
    public boolean addNewUser(User user) {
        boolean result = false;
        try {
            if (userMapper.add(user) == 1)
                result = true;
            // int i = 1 / 0;
        } catch (RuntimeException e) {
            e.printStackTrace();
            throw e;
        }
        return result;
    }

接下来为业务方法配置事务切面,这需要用到tx和aop两个命名空间下的标签,所以首先要在Spring配置文件中导入这两个命名空间。代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">
    <--省略具体配置-->
    </beans>

接下来需要配置一个事务管理器组件,它提供了对事务处理的全面支持和统一管理,在切面中相当于增强处理的角色。这里使用Spring提供的事务管理器DataSourceTransactionManager,其配置方式如下:

<bean id="txManager"
  	class="org.springframework.jdbc,datasource.DataSourceTransactionManager">
  		<property name="dataSource" ref="dataSource"/>
  </bean>

与之前接触过的增强处理不同,事务管理器还可以进行进一步的配置,以便更好地适应不同业务方法对于事务的不同要求。
可以通过<tx:advice > 标签配置事务增强,设定事务的属性,为不同的业务方法指定具体的事务规则,代码片段如下:

  <tx:advice id="txAdvice">
        <tx:attributes>
            <tx:method name="find*" propagation="SUPPORTS" />
            <tx:method name="add*" propagation="REQUIRED" />
            <tx:method name="del*" propagation="REQUIRED" />
            <tx:method name="update*" propagation="REQUIRED" />
            <tx:method name="*" propagation="REQUIRED" />
        </tx:attributes>
    </tx:advice>

在< tx:advice>标签内可以设置id属性和transaction-manager属性。其中 transaction-manager属性引用一个事务管理器Bean。

在这里插入图片描述

事务属性

在这里插入图片描述
在这里插入图片描述

使用注解实现声明式事务处理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值