Mybatis的事务、缓存

该文章基于《Spring+MyBatis企业应用实战》进行总结,旨在积累巩固

事务

Mybatis事物的设计都是基于Transaction接口来进行的:
这里写图片描述
该接口实际上是使用模板设计模式进行设计,可以看见该接口实际上有两个实现类:
一个为ManagedTransaction:由容器实现对事务的管理,单独使用commit和rollback没有任何效果
一个为JdbcTransaction:由java.sql.Connection完成对事物的管理
实际的配置需要在mybatis-config.xml中进行:

<environments default="mysql">
    <!-- 环境配置,即连接的数据库。 -->
    <environment id="mysql">
    <!--  指定事务管理类型,type="JDBC"指直接简单使用了JDBC的提交和回滚设置 -->
        <transactionManager type="JDBC"/>
        <!--配置数据源-->
        <dataSource type="POOLED">
            <!--对数据源进行配置-->
        </dataSource>
    </environment>
</environments>

具体的获得Transaction方式是通过在构造函数中传入已经构造好的Connection,之后对JdbcTransaction的commit和rollback都会通过该connection实现,而ManagedTransaction将rollback和commit写空,具体是创建哪种Transaction将由TransactionFactory去实现。

缓存

mybatis中的缓存一共分为两种缓存:

一级缓存

一级缓存是SqlSession级别的缓存,请注意只有查询会进行缓存,加入出现了对数据进行修改的DML操作(insert、update和delete)并进行了提交将会对缓存进行清空,一级缓存默认开启

二级缓存

二级缓存是mapper级别的缓存,也就可以理解为如果多个SqlSession使用同一个Mapper去进行获取信息的话,获取的信息将会在多个SqlSession之间进行共用。二级缓存默认不开启,需要通过在mybatis-config.xml显式的进行开启:

<settings>
    <setting name="cacheEnabled" value="true"/>
</settings>

并且还需要再XXXMapper.xml中进行二级缓存的配置:

<mapper>
    <cache eviction="LRU" flushInterval="多少毫秒进行一次刷新" size="可以存储多少对象" readOnly="true/false返回对象是否只可读"/>
    <!--如果返回可读写的缓存,那么需要通过序列化返回缓存对象的拷贝,会造成数据损失。所以readOnly属性主要用于性能优化-->
</mapper>

如果想在某些方法上设置禁用二级缓存,可以通过设置useCache属性为false来禁用缓存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值