设计模式-标识映射(Identity Map)

概念

通过在映射中保存每个已经加载的对象,确保每个对象只加载一次。当要访问对象的时候,通过映射来查找他们。

从数据库加载对象时,对象与其映射的一致性、重复加载,这些都是需要得到保证的。

标识映射记录在一个业务事务中从数据库读出的所有对象。无论什么时候要用一个对象,先检查标识映射,看需要的对象是否已经在内存中

运行机制

标识映射最基本的思想是使用一系列映射,包含了从数据库读出的对象。由于需要与并发管理交互,还应该考虑使用乐观离线锁。

相关问题:

  • 键选择。数据库表的主键作为映射的键。
  • 确定显示的还是通用的标识映射设计。显示的标识映射为每一种需要的对象提供不同的方法,如findPerson(1),通用的则利用参数指出所需的对象类型,如findPerson("person",1)。
  • 数量。当数据库有唯一键时整个会话对应一个映射,否则采用多映射,即每个类或每个表对应一个映射。
  • 标识映射的位置。若使用回话则放到某个特定的会话对象中,若使用工作单元则放到工作单元中。

使用时机

标识映射除了保证内存对象和数据库记录间映射的一致性外,还可以作为高速缓存-对某数据的访问不需要每次都和数据库交互。

不需要标识映射的情形:

  • 用对象数据库作为事务高速缓存,可以提高性能。
  • 在所有条件下都为只读的对象。
  • 对依赖映射不需要建立标识映射。关联对象的存在受父对象控制,没有必要用映射保存标识,关联对象对应数据库中主表-细表的关系。
  • 标识映射在超出会话的情况下不起作用。

示例

相关推荐
qq_33456355几秒前
html标签怎么表示用户输入_kbd标签键盘快捷键标注【介绍】.txt
jvm·数据库·python
小陈工几秒前
数据库Operator开发实战:以PostgreSQL为例
开发语言·数据库·人工智能·python·安全·postgresql·开源
weixin_58606146几秒前
SQL报表星型模型优化_事实表索引设计
jvm·数据库·python
源码之家8 分钟前
计算机毕业设计:Python城市天气数据挖掘与预测系统 Flask框架 随机森林 K-Means 可视化 数据分析 大数据 机器学习 深度学习(建议收藏)✅
人工智能·爬虫·python·深度学习·机器学习·数据挖掘·课程设计
数智化管理手记11 分钟前
零基础认知精益生产——核心本质与必避误区
大数据·数据库·人工智能·低代码·制造
weixin_3812881812 分钟前
MongoDB备节点无法读取数据怎么解决_rs.slaveOk()与Secondary读取权限
jvm·数据库·python
楼田莉子13 分钟前
同步/异步日志系统:日志器管理器模块\全局接口\性能测试
linux·服务器·开发语言·c++·后端·设计模式
qq_6543669815 分钟前
Vue 3 中集成 Three.js 场景的完整实践指南
jvm·数据库·python
逻极20 分钟前
MySQL 从入门到精通:一个老 DBA 的实战心法
运维·数据库·mysql·从入门到精通·mysql从入门到精通
qq_4240985620 分钟前
JavaScript中箭头函数在类方法定义中的this绑定优势
jvm·数据库·python