首页 > 其他分享 >设计模式-标识映射(Identity Map)

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

时间:2024-08-12 12:24:17浏览次数:14  
标签:Map 需要 映射 对象 数据库 标识 设计模式 Identity 加载

概念

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

从数据库加载对象时,对象与其映射的一致性、重复加载,这些都是需要得到保证的。
标识映射记录在一个业务事务中从数据库读出的所有对象。无论什么时候要用一个对象,先检查标识映射,看需要的对象是否已经在内存中

运行机制

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

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

使用时机

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

不需要标识映射的情形:

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

示例

标签:Map,需要,映射,对象,数据库,标识,设计模式,Identity,加载
From: https://blog.csdn.net/workflower/article/details/141128166

相关文章

  • 设计模式-工作单元(Unit of Work)
    工组单元记录在业务事务过程中对数据库有影响的所有变化。不合实际的方法:在每次修改对象模型时对数据库进行相应的修改,但会产生大量小规模的数据库交互,降低性能。采用一个对整个交互过程都开放的事务,尤其是为避免不一致而跟踪读过的对象运行机制维护受业务事务影响的对......
  • 【外观模式】设计模式系列:外观模式的运用与实践(简化复杂子系统)
    文章目录面向对象设计模式之外观模式:简化复杂的子系统引言1.设计模式的概念1.1定义与分类1.2设计模式的目标1.3常见的设计模式1.4面向对象编程原则2.外观模式的定义2.1外观模式的正式定义2.2外观模式的动机2.3外观模式的适用场景3.外观模式的角色和结构3.1......
  • 设计模式 - Singleton pattern 单例模式
    文章目录定义单例模式的实现构成构成UML图单例模式的六种实现懒汉式-线程不安全懒汉式-线程安全饿汉式-线程安全双重校验锁-线程安全静态内部类实现枚举实现总结其他设计模式文章:最后定义单例模式是一种创建型设计模式,它用来保证一个类只有一个实例,并且提供一个......
  • java设计模式-桥接模式
     一.概述        桥接模式(BridgePattern)是一种结构型设计模式,用于将抽象部分与其实现部分分离,使它们可以独立地变化。桥接模式主要目的是解决当一个类存在多个继承等级时,由于继承带来的耦合问题,以及扩展性不足的问题。定义:将抽象部分与他的具体实现部分分离,使它们都......
  • Java常见设计模式简介
    设计模式什么是单例,如何实现一个类只能有一个实例,主要用于需要频繁使用的对象避免频繁初始化和销毁来提高性能,或者资源需要相互通信的环境主要实现方式有,饿汉模式,懒汉模式,枚举,静态内部类饿汉模式,是在类加载过程中就将这个单例对象实例化,需要将构造方法私有化,定义一个成员变......
  • 【Redis进阶】缓存设计模式
    目录CacheAside(旁路缓存)模式概念读操作流程如上图所示写操作流程如上图所示代码示例总结Read-Through模式概念操作流程:优点:Write-Through模式概念操作流程:优点:Write-Behind(Write-Back)模式概念操作流程:优点:缺点:总结缓存设计模式是指将缓存作为系统架......
  • C--设计模式-全-
    C#设计模式(全)原文:DesignPatternsinC#协议:CCBY-NC-SA4.0一、单例模式这一章涵盖了单例模式。GoF定义确保一个类只有一个实例,并提供对它的全局访问点。概念让我们假设您有一个名为A,的类,您需要从它创建一个对象。一般情况下,你会怎么做?您可以简单地使用这一行代码:A......
  • HashMap 中处理哈希冲突,红黑树对于没有实现 Comparable 接口的 Key 处理
    背景:假设有两个对象,分别是stu和teach(都没有实现Comparable接口),将它们添加进去HashMap里,假设这两个对象发生哈希冲突,那么红黑树怎么判断它们谁在左谁在右?依据是什么?​ 当两个对象stu和teach的哈希值相同,且它们没有实现Comparable接口时,Java8的HashMap会使用t......
  • smbmap报[*] Detected 0 hosts serving SMB
    执行smbmapsmbmap-H{target_ip}显示[*]Detected0hostsservingSMB[*]Closed0connectionsvps连目标机时正常,vps距离目标时延较低抓包显示本机直接syn, syn+ack,第三个包直接rst怀疑是timeout设置问题查看帮助mansmbmap发现可以设置--timeout,默认0.5s......
  • Hadoop学习第四天--MapReduce提交过程
    MapReduce提交过程在Xshell中输入bash-X命令可以在Bashshell中启用debug模式,显示执行过程中的详细信息,例如每条命令的执行结果以及执行的步骤。Hadoop提交执行开始使用Java命令执行javaorg.apache.hadoop.util.RunJarhadoop-1.0-SNAPSHOT.jarcom.shujia.mr.worcou......