第7章Spring框架整合Mybatis框架

基本整合方式

Spring框架整合其他框架的本质其实就是把其他框架交给Spring框架管理。Spring框架通过IOC、AOP等机制实现与其他框架的连接,最终建立一个低耦合的应用架构,这大大增强了系统的灵活性,便于功能扩展。

整合思路梳理

MyBatis 框架主要是通过 Sglsession 实例实现对数据的操作,而SqlSession 实例是通过
SqlSessionFactory 创建的,SqlSessionFactory 实例又是由 SqlSessionFactoryBuilder 依据 MyBat.配置文件中的数据源、SQL映射文件等信息构建的,这些对象之间的关系

整合所需的依赖及配置

没有使用Spring框架,所以除原有jar 包外还需要添加 Spring 框架的相关jar 包。Spring框架并没有提供直接整合 MyBatis框架的功能,所以还需要添加一个整合两个框架的关联jar 包。此外,Spring框架还可以提供数据源及事务支持,因此,项目中还需要添加事务及数据源的相关jar 包。、

知识扩展

使用 Spring 框架配置数据源时,首先要选择一种具体的数据源实现技术。目前流行的数据源实现技术有 dbcp、c3p0、Proxool等,它们都实现了连接池功能。这里以 dbcp 数据源为例进行讲解,其他数据源的配置方法与dbcp 类似,同学们可以自行查阅相关资料进行学习。dbcp 数据源隶属于 Apache Commons 项目。

知识回顾

XML文件中的特殊字符可以使用<![CDATA[]>标签进行处理,也可以使用对象引用来替换,使用“&amp;"替换了“&”。

注意:

除数据源和 SQL映射信息外,其他 MyBatis 配置信息也可以转移到 Spring 配置文件中进行维护,只需通过 SqlSessionFactoryBean 的对应属性进行赋值即可。有兴趣的同学们可通过查询相关资料进行学习。

映射器整合方式

可以发现在使用 MapperFactoryBean 注入映射器时有以下特点:
  1. 配置 DAO 组件,class 属性不是某个实现类,而是 MapperFacto1yBean。
  2. 通过 mapperinterface 属性指定映射器,并且其值只能是接口类型,不能是某个实现类。
  3. MapperFactoryBean 是SqlSessionDaoSupport 的子类,使用时需要通过 setSqlSessiorFactory()方法注入 SqSessionFactory实例以创建 Sq!SessionTemplate 实例。
  4. 如果映射器对应的SQL映射文件与映射器的类路径相同,该映射文件可以自动被MapperfactoryBean 解析。
  5. SOL映射文件中的命名空间和映射器接口的名称需相同,映射元素的id 和映射器接的方法名称应相同。

声明式事务

配置声明式事务

步骤1:导入命名空间

步骤2:定义事务管理器

步骤3:设置事务属性

步骤4:定义事务切面

事务属性说明
事务属性说明
propagation

事务传播机制。该属性可选的值有如下几种。

  • REQUIRED:默认值。表示如果存在一个事务,则支持当前事务;如果当前没有事务,则开启一个新的事务。
  • REQUIRES_NEW:表示总是开启一个新的事务。如果一个事务已经存在,则先将这个存在的事务挂起,然后开启新事务执行该方法。MANDATORY:表示如果存在一个事务,则支持当前事务;如果当前没有一个活动的事务则抛出异常。
  • NESTED:表示如果当前存在一个活动的事务,则创建一个事务作为当前事务的嵌套事务运行;如果没有当前事务,该取值与REQUIRED相同。
  • SUPPORTS:表示如果存在一个事务,则支持当前事务;如果当前没有事务,则按非事务方式执行。
  • NOT_SUPPORTED:表示总是以非事务方式执行。如果一个事务已经存在,则先将这个存在的事务挂起,然后执行该方法。
  • NEVER:表示总是以非事务方式执行。如果当前存在一个活动的事务,则抛出异常。其中,REQUIRED能够满足大多数的事务需求
isolation

事务隔离级别,即当前事务和其他事务的隔离程度,在并发事务处理的悄况下需要考虑它的设置。该属性可选的值有如下几种。

  • DEFAULT:默认值,表示使用数据库默认的事务隔离级别。
  • READ UNCOMMITTED:读未提交。
  • READ COMMITTED:读已提交。
  • REPEATABLE READ:可重复读。
  • SERIALIZABLE:串行读
timeout事务超时时间。允许事务运行的最长时间,以秒(s)为单位,超过给定的时间自动回滚,防止事务执行时间过长而影响系统性能。该属性需要底层的实现支持默认值为-1,表示不超时
read-only事务是否为只读,默认值为false,对于只执行查询功能的事务,把它设置为true能提高事务处理的性能
rollback-for设定能够触发回滚的异常类型。Spring框架默认只在抛出RuntimeException 时才标识事务回滚。可以通过全限定类名自行指定需要回滚事务的异常,多个类名用英文逗号隔开
no-rollback-for设定不触发回滚的异常类型。Spring默认CheckedException不会触发事务回滚。可以通过全限定类名自行指定不需回滚事务的异常,多个类名用逗号隔开

使用注解实现声明式事务

@Transactional注解也可以设置事务属性的值,默认的@Transactional 设置如下所示。

  • 事务传播特性是 REQUIRED。
  • 事务隔离级别是 DEFAULT。
  • 事务是读/写。
  • 事务超时规则默认是依赖于事务系统的。
  • 所有的 RuntimeException 都会触发事务回滚,但是所有的 checkedException 都不会触
    发事务回滚。
 @Transactional 注解的属性
事务属性类型说明
propagation枚举类型:Propagation可选的传播性设置。使用举例:@Transactional(propagation=PropagatiOn.REQUIRES NEW)
isolation枚举类型:Isolation可选的隔离性级别,使用举例:@Transactional(isolation=IsolatiOn.READ COMMITTED)
timeoutInt型(以s为单位)事务超时。使用举例:@Transactional(timeout= 10)
readOnly布尔型是否为只读型事务。使用举例:@Transactional(readOnly=true)
rollbackFor一组 Class 类的实例,必须是Throwable的子类一组异常类,遇到时必须进行回滚使用举例:@Transactional(rollbackFor={SQLException.class}),多个异常可用逗号隔开
rollbackForClassName一组 class 类的名称,必须是Throwable的子类一组异常类名,遇到时必须进行回滚。使用举例:@Transactional(rollbackForClassName={"SQLException"}),多个异常可用逗号隔开
noRollbackFor一组 Class 类的实例,一组异常类,遇到时必须不回滚
必须是Throwable的子类
noRollbackForClassNa
me
一组 Class 类的名称,必须是 Throwable 的子类一组异常类名,遇到时必须不回滚

  • 30
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring整合MyBatis是将SpringMyBatis框架结合起来使用的一种方式,可以利用Spring提供的依赖注入、事务管理等特性,简化MyBatis的配置和使用过程。 实现步骤: 1.引入依赖 在pom.xml文件中引入SpringMyBatis的依赖: ``` <dependencies> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.13</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.13</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.3.13</version> </dependency> <!-- MyBatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.6</version> </dependency> </dependencies> ``` 2.配置数据源 在Spring的配置文件中配置数据源,可以使用Spring提供的数据源或者第三方数据源,例如Druid。 ``` <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean> ``` 3.配置MyBatis的SqlSessionFactory 在Spring的配置文件中配置MyBatis的SqlSessionFactory,可以使用MyBatis提供的SqlSessionFactoryBean,也可以自定义SqlSessionFactory。 ``` <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="typeAliasesPackage" value="com.example.entity" /> <property name="configLocation" value="classpath:mybatis-config.xml" /> </bean> ``` 4.配置MyBatis的MapperScannerConfigurer 在Spring的配置文件中配置MyBatis的MapperScannerConfigurer,用于扫描Mapper接口并生成代理对象。 ``` <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.example.mapper" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> ``` 5.配置事务管理器 在Spring的配置文件中配置事务管理器,可以使用Spring提供的事务管理器或者第三方事务管理器,例如Atomikos。 ``` <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> ``` 6.配置事务注解支持 在Spring的配置文件中配置事务注解支持,用于启用Spring的事务管理功能。 ``` <tx:annotation-driven transaction-manager="transactionManager" /> ``` 7.编写Mapper接口和Mapper映射文件 在MyBatis的Mapper接口中定义SQL语句,并在Mapper映射文件中编写SQL语句的具体实现。 ``` public interface UserMapper { User findById(Long id); } <select id="findById" parameterType="java.lang.Long" resultType="com.example.entity.User"> select * from user where id = #{id} </select> ``` 8.注入Mapper接口并使用 在Spring中注入Mapper接口,并调用Mapper接口的方法。 ``` @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; public User findById(Long id) { return userMapper.findById(id); } } ``` 以上就是Spring整合MyBatis的基本步骤和流程,通过以上步骤可以快速搭建一个Spring+MyBatis的项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值