mybatis update 字段为null_老生常谈:MyBatis的一级缓存、二级缓存、涉及的设计模式...

66ca235f8cfd3a80f06629cd0b0b58c8.png

作者|搜l搜|简书

一、什么是缓存

53840ad6d065d444298b5ccca8948073.png

对于JDBC操作,如果需要连续请求id=1的用户数据,那么就需要进行两次的数据库连接,获取数据库中的数据。相同的数据,进行两次数据库连接,这肯定会造成资源的浪费。基于面向对象,可以把第一次获取的数据保存到一个对象中,下一次直接从对象中获取就行了,也就是下面这个样子:

68cf3bbc26021335a01cd8c75903e802.png

获取的内容保存在对象中,在一个请求期间,直接使用或者传递对象就可以了。对于JDBC的操作,可以自己定义类或者集合来保存数据库中的数据,来避免连续请求数据库的问题。这里用来保存数据的对象或者集合,也能称之为缓存。

但是使用了三层架构之后,Dao层和Dao层之间有可能互相是不清楚的。如果有一个复杂的业务要在Service层中进行处理,需要分别调用不同Dao层中的数据,那这样简单的缓存还是不够看。

4eadd2556dcd1e76110f923744ad1995.png

这种情况,要再去处理缓存问题,就会花费过多的精力,得不偿失。在这种层面上的缓存处理MyBatis框架已经做好了,就叫做一级缓存。

MyBatis的一级缓存就是基于数据库会话(SqlSession)的。

二、MyBatis的主要层次结构

使用MyBatis对数据库操作的代码,能够看见的就是这个SqlSession对象。实际上,这只是MyBatis对外暴露的接口,整个MyBatis核心部件是下面的这么一堆接口和类:

1️⃣SqlSession:MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能。
2️⃣Executor:MyBatis执行器,整个MyBatis调度的核心,负责SQL语句的生成和查询缓存的维护。
3️⃣StatementHandler:封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合。
4️⃣ParameterHandler:负责对用户传递的参数转换成JDBC Statement 所需要的参数。
5️⃣ResultSetHandler:负责将JDBC返回的ResultSet结果集对象转换成List类型的集合。
6️⃣TypeHan

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值