spring_mybatis

本文详细介绍了MyBatis与Spring框架的整合过程,包括延迟加载、缓存机制、事务处理以及具体配置步骤。从延迟加载的实现原理到一级、二级缓存的区别,再到Spring声明式事务的应用,全面解析了MyBatis与Spring如何协同工作,提升应用性能。

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

1.延迟加载(懒加载):就是什么时候用什么时候加载

resultMap(一对一,一对多的关系自带延迟加载,在开发里面最常用的)
作用是:什么时候用什么时候加载

  <!--开启延迟加载-->

		  <setting name="lazyLoadingEnabled" value="true"/>

			  <!--关闭积极加载-->

		  <setting name="aggressiveLazyLoading" value="false"/>
		  <setting name="lazyLoadTriggerMethods" value=""/>(调用toString无效时加载)
查询主表的信息(根据id来进行查询,子查询在resultMap(select="")如果是另一个包引入进来要加上完整的包名和类名,关联的字段)
调用其方法时,会走子查询;

2.缓存
好处:提高加载的速度,同样的数据,不用一直查询数据库
缺点;可能查询出脏数据;
一级缓存:(一级缓存的作用域是针对于我们的sqlsession(出了sqlsession 就没有一级缓存);默认一级缓存自动开启;
如果是要关闭一级缓存,需要调用其commit()方法;

     二级缓存:(是针对于整个mapper(namespace="com.offcn.dao.UserMapper"))只要在同一个mapper中,缓存都有效果;

	配置二级缓存要注意(settings 里面配置两句话(开启缓存配置的按钮,第二个是要把你的对象序列化,
	第三个就是要把你的namespace 配置 <cache/> 标签,这样就配置了二级缓存(用二级缓存的时候,一定要sqlsession.commit()(关闭一级缓存,加载二级缓存)),

	步骤:在nameSpace 加上 cache;刷新二级缓存的方法:sqlSession.clearCache();禁用:

			

     自定义缓存

spring的声明式事务
事务:避免脏数据或者错误的数据提交到数据库,一般读取缓存里面的数据,容易产生脏数据
四大原则:原子性,隔离性,持久性,一致性;spring声明式事务也支持这四大原则

3.spring与mybatis的整合:
第一步:导入jar包;
导入核心的jar包(mybatis-spring)
第二步:所有的都是由spring来进行管理的,写spring的核心配置文件applicationContext。xml;
第一个bean是获取连接数据源
第二个bean是获取sqlSessionFactory(引入数据库资源(dataSource),第二个是引入mybatis核心配置文件)
第三个bean配置dao层,第一个是通过对象.MapperFactoryBean;(引入接口的类)第二个sqlSessionFactory
(第二种方式是MapperScession)

4.spring与声明事务:
第一步:引入数据库的配置信息(dataSource)
第二步:配置dao层,配置服务层
第三步:配置事务管理器DataSourceTransactionManager(引入数据库资源,也就是dataSource)
第四步:定义事务通知(一种不用注解,一种用注解)
( 代表对应的方法名
第二个代表是事物的传播行为,事物失效的时间,
事物的隔离级别–> <!–
指定异常进行回滚 这个代表参数的意思 )

tx:annotation-driven/
<tx:advice id=“txAdvice” transaction-manager=“transactionManager”>
tx:attributes

<tx:method name=“find*” propagation=“SUPPORTS” />

        <tx:method name="*" propagation="REQUIRED" />
    </tx:attributes>
</tx:advice>

定义切面–>

<context:component-scan base-package=“com.offcn.service”/>

tx:annotation-driven/

在 类前面 也就是你的service 的类上 @Transactional

再到你的方法上配置具体的 @Transactional(propagation = Propagation.REQUIRED) 等同于 <tx:method name="*" propagation=“REQUIRED” />

前面学的注解:
dao层的注解 @Repository
service的注解 @Service
按照类型的注解 @Autowired
按照名称 @Qualifier Resource

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值