当前位置: 首页 > news >正文

【SSM框架】Mybatis详解11(源码自取)之事务,缓存,ORM

  • 🧛‍♂️个人主页:杯咖啡
  • 💡进步是今天的活动,明天的保证!
  • ✨目前正在学习:SSM框架,算法刷题
  • 👉本文收录专栏:SSM框架解析
  • 🙌牛客网,刷算法过面试的神级网站,用牛客你也牛。 👉免费注册和我一起学习刷题👈
  • 🐳希望大家多多支持🥰一起进步呀!
  • 😎The man who fears losing has already lost.
    怕输的人已经输了。 - 《权力的游戏》

✨前言

因为开学和参与比赛断更了两周,从这周开始将持续更新每周一篇,详解SSM
上节我们复习到表的关联关系.
本节我们复习到的知识是事务,缓存,ORM
和我一起复习下去你可以获得一个比较完美框架demo,并且深刻体会框架
坚持到最后的源码解析你会收获更多哦,加油坚持!!!


文章目录

  • ✨前言
  • 事务
  • 缓存
  • ORM
  • ✨总结


事务

多个操作同时完成,或同时失败称为事务处理.
事务有四个特性:一致性,持久性,原子性,隔离性.
下订单的业务

在我们下订单的时候,需要以下几步,如果任何一个步骤出现问题,那么整个业务就要全部回滚。
1)订单表中完成增加一条记录的操作
2)订单明细表中完成N条记录的增加
3)商品数据更新(减少)
4)购物车中已支付商品删除
5)用户积分更新(增加)

<!--        配置事务管理器
            type:指定事务管理的方式
                JDBC:事务的控制交给管理员来处理
                MANAGED:由容器(Spring)来管理事务
-->
        <transactionManager type="JDBC"></transactionManager>

在这里插入图片描述

同时我们也可以设置自动提交

//3.取出sqlsession
       sqlSession = factory.openSession();
       sqlSession = factory.openSession(true);

在这里插入图片描述

缓存

缓存就是为了提交查询效率
MyBatis框架提供两级缓存,一级缓存和二级缓存.默认开启一级缓存.
使用缓存后,查询的流程:
查询时先到缓存里查,如果没有则查询数据库,放缓存一份,再返回客户端.下次再查询的时候直接从缓存返回,不再访问数据库.如果数据库中发生commit()操作,则清空缓存.

一级缓存使用的是SqlSession的作用域,同一个sqlSession共享一级缓存的数据.
二级缓存使用的是mapper的作用域,不同的sqlSession只要访问的同一个mapper.xml文件,则共享二级缓存作用域.

在这里插入图片描述

这里小编写了一个测试类,很明显可以看到两次取出的对象为同一个。
在这里插入图片描述

ORM

ORM(Object Relational Mapping):对象关系映射
MyBatis框架是ORM非常优秀的框架.

java语言中以对象的方式操作数据,存到数据库中是以表的方式进行存储,对象中的成员变量与表中的列之间的数据互换称为映射.整个这套操作就是ORM.

持久化的操作:将对象保存到关系型数据库中 ,将关系型数据库中的数据读取出来以对象的形式封装
MyBatis是持久化层优秀的框架.

持久化:从内存中读取数据进数据库
从数据库中返回数据给内存
这个过程称为持久化


✨总结

本节复习了事务,缓存,ORM
下一节我们将会进行简单的源码分析
本次源码放在代码仓库gitee,自取链接

原创不易,还希望各位大佬支持一下 \textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下

点赞,你的认可是我创作的动力! \textcolor{green}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!

收藏,你的青睐是我努力的方向! \textcolor{green}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!

评论,你的意见是我进步的财富! \textcolor{green}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!

相关文章:

  • Maven 基本使用及依赖管理。
  • 数组是内存的实现及栈和队列的数据结构
  • 记录:2022-9-30 打家劫舍 二叉搜索树中第K小的元素 公平锁 磁盘调度
  • 基于html宠物用品商城项目的设计与实现(学生网页设计作业源码)
  • 【Java复习】线程安全的 HashMap --- ConcurrentHashMap
  • 《文化相对论》:危机重重的世界,对话才能产生转机
  • 水溶性CuInS/ZnS 量子点 PL 550 nm--800 nm
  • Vue3和react状态管理之Redux与Pinia的使用比较
  • 新学期如何克服“社恐”,猿辅导老师给高中生三条建议
  • 浅析各种主流区块链共识算法的利与弊
  • [架构之路-16]:目标系统 - 硬件平台 - CPU主要物理性能指标
  • 【JAVASE】JDK8新特性
  • 【0121】建立与postgres后端的连接(2)
  • 交换机、IP地址、ARP协议
  • 迭代器并不全是指针,list的迭代器与vector和string的有什么不一样,让博主告诉你其底层原理!
  • 时间复杂度分析经典问题——最大子序列和
  • __proto__ 和 prototype的关系
  • AHK 中 = 和 == 等比较运算符的用法
  • css系列之关于字体的事
  • eclipse的离线汉化
  • mongo索引构建
  • Mysql5.6主从复制
  • nginx 负载服务器优化
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Vue 重置组件到初始状态
  • 关于Flux,Vuex,Redux的思考
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 入门到放弃node系列之Hello Word篇
  • 删除表内多余的重复数据
  • 使用parted解决大于2T的磁盘分区
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 仓管云——企业云erp功能有哪些?
  • ​卜东波研究员:高观点下的少儿计算思维
  • #define、const、typedef的差别
  • #pragma预处理命令
  • (06)金属布线——为半导体注入生命的连接
  • (C++17) optional的使用
  • (SpringBoot)第七章:SpringBoot日志文件
  • (ZT)出版业改革:该死的死,该生的生
  • (二)WCF的Binding模型
  • (附源码)计算机毕业设计大学生兼职系统
  • (规划)24届春招和25届暑假实习路线准备规划
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (三)模仿学习-Action数据的模仿
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)Android学习笔记 --- android任务栈和启动模式
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • *2 echo、printf、mkdir命令的应用
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET MVC之AOP
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .net连接MySQL的方法
  • :=
  • @Transient注解