{"id":5403,"date":"2025-03-28T11:41:58","date_gmt":"2025-03-28T14:41:58","guid":{"rendered":"https:\/\/geekblogti.wpengine.com\/?p=5403"},"modified":"2025-04-07T10:08:12","modified_gmt":"2025-04-07T13:08:12","slug":"mapeamento-objeto-relacional","status":"publish","type":"post","link":"https:\/\/www.geekhunter.com/pt/blog\/mapeamento-objeto-relacional\/","title":{"rendered":"Mapeamento objeto-relacional: como funciona e t\u00e9cnicas"},"content":{"rendered":"\r\n<p class=\"wp-block-paragraph\"><strong>O mapeamento objeto-relacional (ORM ou MOR) \u00e9 uma t\u00e9cnica de muito utilizada para converter dados entre bancos relacionais e linguagens orientadas a objeto, como \u00e9 o caso do PHP, C++, Java, Python, Ruby, entre outras.<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Apesar das linguagens de programa\u00e7\u00e3o modernas possu\u00edrem recursos da <strong>POO<\/strong> (<em>Programa\u00e7\u00e3o Orientada a Objetos<\/em>), a maioria dos SGBD (<em>Sistemas de Gerenciamento de Bases de Dados<\/em>) \u00e9 baseada no modelo relacional, onde temos tabelas ao inv\u00e9s de objetos.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Guardar inst\u00e2ncias de objetos em registros de tabelas \u00e9 o objetivo das t\u00e9cnicas de <strong>MOR <\/strong>(<em>Mapeamento Objeto Relacional<\/em>).<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A pr\u00e1tica de mapear objetos relacionais tem grande import\u00e2ncia no desenvolvimento de projetos. Hoje, eu manterei o foco em apresentar os pontos mais importantes da pr\u00e1tica. Vamos l\u00e1!<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><strong>Como funciona o mapeamento objeto-relacional?<\/strong><\/h2>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" class=\"wp-image-5535\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/05\/salario-do-programador-em-alta-1024x683-2-1024x683.jpg\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O <strong>MOR<\/strong> (<em>Mapeamento Objeto Relacional<\/em>) nada mais \u00e9 que o ato de convers\u00e3o de objetos em mem\u00f3ria para dados relacionais, e vice-versa.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Em geral, pressup\u00f5e-se que o modelo de dados j\u00e1 existe, e que temos que adaptar nosso sistema orientado a objetos para trabalhar com este esquema pr\u00e9-existente. O modelo relacional \u00e9 uma categoria que se destaca entre os <strong><a href=\"https:\/\/geekblogti.wpengine.com\/banco-de-dados-nosql-um-manual-pratico-e-didatico\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"SGBD (abre numa nova aba)\">SGBD<\/a><\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Desde sua concep\u00e7\u00e3o, o<strong> SGBD<\/strong> tem provado ser um mecanismo eficiente e confi\u00e1vel de armazenamento de dados, que possibilita a manipula\u00e7\u00e3o, a manuten\u00e7\u00e3o da integridade e a seguran\u00e7a dos dados.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Os <strong>SGBDRs<\/strong> representam o mecanismo de persist\u00eancia de maior aceita\u00e7\u00e3o e maturidade.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O prop\u00f3sito do <strong>MOR<\/strong> \u00e9, basicamente, prover uma camada de persist\u00eancia transparente entre aplica\u00e7\u00e3o orientada a objeto e o mecanismo de persist\u00eancia relacional.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O mecanismo de <strong>MOR<\/strong> atua na tradu\u00e7\u00e3o transparente entre os modelos.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong><em>&gt;&gt;Leitura Recomendada:<\/em><\/strong><em><br \/>Leia nosso manual pr\u00e1tico de<\/em><a href=\"https:\/\/geekblogti.wpengine.com\/banco-de-dados-nosql-um-manual-pratico-e-didatico\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" banco de dados NoSQL (abre numa nova aba)\"><strong><em> banco de dados NoSQL<\/em><\/strong><\/a><\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><a href=\"http:\/\/bit.ly\/2JS9hZn\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" class=\"wp-image-6649\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/07\/CTA-Rodap\u00e9-Front-end-e-Back-end-64-1024x134.jpg\" alt=\"\" \/><\/a><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><strong>Persist\u00eancia em SGBDR<\/strong><\/h2>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"683\" class=\"wp-image-5441\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/05\/tecnicas-de-gestao-em-ti-min-1024x683.jpg\" alt=\"homem programando\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/05\/tecnicas-de-gestao-em-ti-min-1024x683.jpg 1024w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/05\/tecnicas-de-gestao-em-ti-min-300x200.jpg 300w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/05\/tecnicas-de-gestao-em-ti-min-768x512.jpg 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Por meio de <strong>MOR<\/strong>, \u00e9 poss\u00edvel persistir os objetos em um <strong>SGBDR<\/strong>, obtendo-se todas as vantagens trazidas por ele, e evitando-se os problemas que aparecem ao realizar-se a persist\u00eancia em <strong>OO<\/strong>, utilizando um modelo relacional (imped\u00e2ncia de modelos).<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A persist\u00eancia de objetos por meio da t\u00e9cnica de <strong>MOR<\/strong> permite que se contorne a imped\u00e2ncia existente entre as metodologias <strong>OO<\/strong> e <strong>Relacional<\/strong>, aproveitando assim os benef\u00edcios de ambas metodologias.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Persist\u00eancia transparente refere-se \u00e0 habilidade de se manipular os dados armazenados em um<strong> SGBDR<\/strong> diretamente pela linguagem orientada a objeto, e \u00e9 o objetivo do <strong>MOR<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Isso retoma aos seguintes aspectos desej\u00e1veis em um sistema de persist\u00eancia de objetos:<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Persist\u00eancia Ortogonal<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">V\u00e1lida para todos os objetos do sistema, independente de seu tipo.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Persist\u00eancia Transitiva<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Se um objeto \u00e9 persistente, todos os objetos referenciados por esse objeto devem ser promovidos a objetos persistentes.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">A camada de persist\u00eancia<\/h3>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1024\" height=\"683\" class=\"wp-image-5443\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/05\/pilares-devops-1024x683.jpg\" alt=\"aglomerado de c\u00f3digos de programa\u00e7\u00e3o\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/05\/pilares-devops-1024x683.jpg 1024w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/05\/pilares-devops-300x200.jpg 300w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/05\/pilares-devops-768x512.jpg 768w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/05\/pilares-devops.jpg 1920w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A camada de persist\u00eancia deve intermediar a camada de dados e a camada de aplica\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Esse tipo de solu\u00e7\u00e3o tem como foco aplica\u00e7\u00f5es que necessitam acessar dados legados, bases heterog\u00eaneas, ou gerenciar objetos de neg\u00f3cio distribu\u00eddos e persistentes.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Deve apresentar recursos de consulta de dados, suporte a transa\u00e7\u00f5es, concorr\u00eancia (<em>locking<\/em> otimista ou pessimista) e, enfim, possibilitar a persist\u00eancia transparente, encapsulando o acesso ao banco de dados relacional.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Objetos, al\u00e9m de dados, possuem comportamento. Objetos podem ser multivalorados, englobando objetos complexos ou mesmo outros objetos, e terem atributos provenientes de relacionamentos (<em>heran\u00e7a<\/em>) com outros objetos.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Estas, entre outras caracter\u00edsticas, trazem uma camada de complexidade a mais no \u00e2mbito da persist\u00eancia.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Os <strong>SGBDR<\/strong> s\u00e3o considerados sistemas cr\u00edticos na maioria das organiza\u00e7\u00f5es, enquanto os <strong>SGBDOO<\/strong> s\u00e3o adotados no desenvolvimento das aplica\u00e7\u00f5es de neg\u00f3cio.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Isso refor\u00e7a a necessidade do uso de metodologias que permitam uma integra\u00e7\u00e3o efetiva entre as interfaces, que tendem a ser orientadas a objetos, e os dados, armazenados no modelo relacional.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O modelo relacional envolve a exist\u00eancia de tabelas unidimensionais de armazenamento de dados, onde cada linha representa um determinado registro no banco de dados.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00c9 uma abordagem simples e eficiente de persist\u00eancia, entretanto, retorna-se ao problema inicial da imped\u00e2ncia entre o modelo relacional e a <strong>POO<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Objetos incluem estruturas de dados como listas e mapas, e utilizam heran\u00e7a e liga\u00e7\u00f5es diretas entre os objetos para se relacionarem entre si. Al\u00e9m disso, os objetos s\u00e3o criados e modificados em mem\u00f3ria, sendo necess\u00e1rio coordenar o que ocorre na mem\u00f3ria com o que ocorre em disco.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">De uma forma geral, na persist\u00eancia de objetos em <strong>SGBD<\/strong>, a identidade dos objetos, seus relacionamentos (<em>heran\u00e7a, agrega\u00e7\u00e3o e associa\u00e7\u00e3o<\/em>) e seu estado devem ser preservados nas tabelas relacionais.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Qual problema a camada de persist\u00eancia resolve?<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A cria\u00e7\u00e3o de uma camada de persist\u00eancia de objetos permite diminuir o acoplamento entre o banco de dados e a aplica\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Desta forma, uma mudan\u00e7a em um modelo pode ser traduzida no outro, sem que haja a necessidade de se reestruturar toda a aplica\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Por meio da camada de <strong>MOR<\/strong>, pequenas mudan\u00e7as no esquema relacional deixam de afetar o c\u00f3digo orientado a objeto como um todo e, assim, evita-se a necessidade do desenvolvedor da aplica\u00e7\u00e3o de atuar tamb\u00e9m como um administrador de dados, a partir do momento que o conhecimento do esquema do banco deixa de ser fundamental.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">T\u00e9cnicas de mapeamento objeto-relacional<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A principal tarefa do <strong>MOR<\/strong> envolve a identifica\u00e7\u00e3o das constru\u00e7\u00f5es da orienta\u00e7\u00e3o a objetos que se deseja extrair do esquema relacional, entre elas a identifica\u00e7\u00e3o das classes e dos relacionamentos.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">As principais t\u00e9cnicas de mapeamento de objetos em <strong>SGBDR<\/strong> podem ser descritas como:<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">1.Mapeamento Classe &#8211; Tabela<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Mapeamento de uma classe em uma ou mais tabelas, ou de uma tabela para uma ou mais classes, e mapeamento de heran\u00e7a.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">2. Mapeamento Atributo &#8211; Coluna<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Mapeamento de tipos em atributos.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">2. Mapeamento Relacionamento &#8211; Chave estrangeira<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Mapeamento dos relacionamentos OO em relacionamentos entre tabelas.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><strong>Categorias da estrat\u00e9gia de mapeamento classe-tabela<\/strong><\/h2>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Mapeamento de Subset<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Onde os atributos da classe persistente representam algumas ou todas colunas de uma tabela.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Esta estrat\u00e9gia conv\u00e9m para casos onde todos os atributos de uma classe persistente s\u00e3o mapeados a uma mesma tabela, e onde n\u00e3o h\u00e1 preocupa\u00e7\u00e3o de incluir as colunas que n\u00e3o fazem parte do modelo de neg\u00f3cios. Pode referir-se tamb\u00e9m \u00e0 heran\u00e7a de tabelas simples.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Mapeamento de Superset<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Onde os atributos da classe persistente s\u00e3o derivados de colunas de m\u00faltiplas tabelas.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Este tipo de mapeamento \u00e9 usado para criar &#8220;classes de vis\u00e3o&#8221;, que ocultam o modelo f\u00edsico de dados, ou para mapear uma \u00e1rvore de heran\u00e7a de classes utilizando o mapeamento vertical.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Atributos de uma classe<\/h2>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Atributos Primitivos<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Atributo de uma classe que \u00e9 mapeado a uma coluna de uma tabela. Valor de um tipo de dados espec\u00edfico (<em>int<\/em>, <em>float<\/em>, <em>double<\/em>, dentre outros).<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Atributos de Refer\u00eancia<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Atributos que representam relacionamentos com outras classes. Atributos cujo tipo \u00e9 uma refer\u00eancia a outro objeto ou conjunto de objetos (composi\u00e7\u00e3o).<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">As rela\u00e7\u00f5es entre objetos s\u00e3o implementadas explicitamente atrav\u00e9s de atributos de refer\u00eancia, enquanto as rela\u00e7\u00f5es entre tabelas s\u00e3o realizadas atrav\u00e9s de associa\u00e7\u00f5es de chaves estrangeiras.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O mapeamento de associa\u00e7\u00f5es preocupa-se, basicamente, com algumas categorias de relacionamentos entre objetos.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Uma baseia-se na multiplicidade, outra baseia-se em dois tipos de direcionalidade (Relacionamentos Unidirecionais e Relacionamentos Bidirecionais).<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Outra forma de relacionamento entre objetos s\u00e3o os Relacionamentos Recursivos (por exemplo, um time pode ser integrante de outros times).<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Um aspecto essencial da <strong>POO<\/strong> \u00e9 a heran\u00e7a. A heran\u00e7a permite que dados e comportamentos de uma superclasse sejam reaproveitados por subclasses. Bancos de dados relacionais n\u00e3o possuem o conceito de heran\u00e7a.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Entidades n\u00e3o podem herdar atributos de outras entidades.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Principais t\u00e9cnicas de representa\u00e7\u00e3o de hierarquias em mapeamento relacional<\/h2>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Mapeamento Distribu\u00eddo de Heran\u00e7a (Horizontal e Vertical)<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Forma mais dif\u00edcil de ser implementada quando cole\u00e7\u00f5es heterog\u00eaneas de objetos precisam ser recuperadas. Cada subclasse \u00e9 mapeada em uma tabela separada, e todos os atributos herdados s\u00e3o replicados na tabela.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Mapeamento de Filtro de Heran\u00e7a<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Forma mais r\u00e1pida de mapeamento. Custo de manuten\u00e7\u00e3o e espa\u00e7o. As classes s\u00e3o representadas em uma \u00fanica tabela. Cada registro da tabela utiliza atributos pertinentes \u00e0 sua subclasse, enquanto os outros atributos s\u00e3o mantidos nulos.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">O que \u00e9 preciso atentar?<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">No processo de mapeamento tamb\u00e9m \u00e9 importante levar em considera\u00e7\u00e3o quais informa\u00e7\u00f5es adicionais dever\u00e3o ser mantidas pelo objeto, por exemplo, informa\u00e7\u00e3o de chave prim\u00e1ria, de contadores e n\u00fameros de versionamento.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Outra informa\u00e7\u00e3o relevante refere-se \u00e0 exist\u00eancia do objeto no banco de dados, o que resultaria na decis\u00e3o entre um comando<strong> UPDATE<\/strong> da linguagem <strong>SQL<\/strong>, ou de um comando <strong>INSERT<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Uma t\u00e9cnica para isto seria implementar uma vari\u00e1vel booleana a cada classe persistente. Essas informa\u00e7\u00f5es n\u00e3o precisam ser implementadas nos objetos de neg\u00f3cio, mas devem ser tratadas de alguma forma pela aplica\u00e7\u00e3o de <strong>MOR<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Como foi visto, h\u00e1 mais de uma forma de efetuar-se o mapeamento entre o modelo de objetos e o modelo de dados relacional.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A estrat\u00e9gia de encapsulamento do acesso ao banco de dados determinar\u00e1 como ser\u00e1 implementado o mapeamento.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>&gt;&gt; Quiz recomendado: <br \/>Quiz do SQL<\/strong>: o quanto voc\u00ea manja?<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><strong>Padr\u00f5es de MOR<\/strong><\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Padr\u00f5es de projeto s\u00e3o modelos conceituais que podem ser aplicados em determinadas \u00e1reas de uma aplica\u00e7\u00e3o de acordo com a necessidade.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Em geral, as ferramentas de <strong>MOR<\/strong> s\u00e3o desenvolvidas para trabalhar com um \u201cModelo de Dom\u00ednios\u201d (<em>Domain Model<\/em>).<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Sua base \u00e9 a cria\u00e7\u00e3o de um modelo de objetos que incorpora ambos os dados e o comportamento, criando uma rede de objetos interligados.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00c9 similar a um modelo de banco de dados, mas envolve dados e processos, atributos multivalorados e heran\u00e7a. Confira os 4 principais modelos padr\u00e3o de arquitetura:<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Row Data Gateway<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00c9 um objeto que age como um<em> gateway <\/em>para um \u00fanico registro no banco de dados, ou seja, um objeto que reflete um registro de uma tabela.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Table Data Gateway<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Age sobre uma tabela, mantendo todo o c\u00f3digo SQL de acesso, encapsulando a l\u00f3gica de acesso do banco de dados.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Active Record<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Combina o <em>gateway <\/em>e o objeto de dom\u00ednio em uma \u00fanica classe, combinando a l\u00f3gica de neg\u00f3cio e o acesso ao banco de dados.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Data Mapper<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O mais flex\u00edvel e o mais complexo. Age como um mediador entre os objetos em mem\u00f3ria e o banco de dados, podendo ignorar completamente o layout de banco de dados.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Sua responsabilidade \u00e9 transferir dados entre ambos e geralmente \u00e9 utilizado com um \u201cModelo de Dom\u00ednios\u201d. H\u00e1 tamb\u00e9m outras duas quest\u00f5es envolvidas no processo de mapeamento:<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Diferen\u00e7a de representa\u00e7\u00e3o<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Os objetos s\u00e3o referenciados em tempo real e em mem\u00f3ria, enquanto os dados relacionais s\u00e3o referenciados por chaves que est\u00e3o alocadas em outras tabelas.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Atributos multivalorados<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Os objetos lidam com m\u00faltiplas refer\u00eancias em \u00fanico campo, atrav\u00e9s de cole\u00e7\u00f5es, enquanto n\u00e3o h\u00e1 campos multivalorados no modelo relacional.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Uma forma de lidar com o primeiro problema \u00e9 atrav\u00e9s da manuten\u00e7\u00e3o da identidade relacional de cada objeto com a adi\u00e7\u00e3o de um campo identificador (armazenamento da chave prim\u00e1ria nos atributos do objeto).<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Para o segundo caso, geralmente utiliza-se uma t\u00e9cnica chamada de lazy loading, onde o objeto n\u00e3o cont\u00e9m todos os dados: os dados s\u00e3o atribu\u00eddos ao objeto apenas quando necess\u00e1rio.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><a href=\"http:\/\/bit.ly\/2JS9hZn\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" class=\"wp-image-6521\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/07\/CTA-Rodap\u00e9-Front-end-e-Back-end-30-1024x134.jpg\" alt=\"\" \/><\/a><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Estruturas de heran\u00e7a de um modelo de objetos para um modelo relacional<\/h2>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Heran\u00e7a de tabela simples<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Onde uma tabela representa todas as classes da hierarquia.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Heran\u00e7a horizontal<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Onde cada classe n\u00e3o-abstrata \u00e9 associada \u00e0 sua respectiva tabela, incluindo os atributos da classe herdada.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Heran\u00e7a vertical<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Onde cada classe da hierarquia, inclusive classes abstratas, \u00e9 associada a uma tabela separada no banco de dados.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><strong>Sobre <\/strong>mapeamento objeto-relacional<strong>, qual a conclus\u00e3o?<\/strong><\/h2>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1024\" height=\"678\" class=\"wp-image-5446\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/05\/pilares-carreira-de-ti-1024x678.jpg\" alt=\"homem sentado e fazendo anota\u00e7\u00f5es\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/05\/pilares-carreira-de-ti-1024x678.jpg 1024w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/05\/pilares-carreira-de-ti-300x199.jpg 300w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/05\/pilares-carreira-de-ti-768x508.jpg 768w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/05\/pilares-carreira-de-ti.jpg 1920w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A utiliza\u00e7\u00e3o de t\u00e9cnicas de <strong>MOR<\/strong> possibilita \u00e0s empresas que tem como base <strong>SGBDR<\/strong>, direcionarem seus investimentos em inova\u00e7\u00e3o e tecnologia, com a utiliza\u00e7\u00e3o de solu\u00e7\u00f5es <strong>OO<\/strong>, e ao mesmo tempo, manterem a confiabilidade, seguran\u00e7a, e tradi\u00e7\u00e3o dos bancos de dados relacionais.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Por meio do <strong>MOR<\/strong> diminui-se o acoplamento entre o modelo de dados relacional e a aplica\u00e7\u00e3o <strong>OO<\/strong>, permitindo a portabilidade e a escalabilidade futura das aplica\u00e7\u00f5es.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Desenvolvendo projetos desta maneira voc\u00ea estar\u00e1 contribuindo para a reutiliza\u00e7\u00e3o do seu c\u00f3digo em diferentes \u00e1reas do seu sistema e at\u00e9 mesmo de projetos futuros, sem falar da legibilidade e do aspecto profissional agregado ao seu c\u00f3digo.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">At\u00e9 a pr\u00f3xima!<\/p>\r\n\r\n\r\n\r\n\r\n","protected":false},"excerpt":{"rendered":"<p>O mapeamento objeto-relacional (ORM ou MOR) \u00e9 uma t\u00e9cnica de muito utilizada para converter dados entre bancos relacionais e linguagens orientadas a objeto, como \u00e9 o caso do PHP, C++, Java, Python, Ruby, entre outras. Apesar das linguagens de programa\u00e7\u00e3o modernas possu\u00edrem recursos da POO (Programa\u00e7\u00e3o Orientada a Objetos), a maioria dos SGBD (Sistemas de [&hellip;]<\/p>\n","protected":false},"author":167,"featured_media":12743,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[18],"tags":[],"class_list":["post-5403","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimiento-de-software"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.3 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Como funciona e t\u00e9cnicas de mapeamento objeto-relacional<\/title>\n<meta name=\"description\" content=\"O MOR (Mapeamento Objeto-relacional) \u00e9 uma das t\u00e9cnicas mais efetivas para aproveitamento de c\u00f3digo, seguran\u00e7a e portabilidade. Leia!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.geekhunter.com\/pt\/blog\/mapeamento-objeto-relacional\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mapeamento objeto-relacional: como funciona e t\u00e9cnicas\" \/>\n<meta property=\"og:description\" content=\"O mapeamento objeto-relacional (ORM ou MOR) \u00e9 uma t\u00e9cnica de muito utilizada para converter dados entre bancos relacionais e linguagens orientadas a\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.geekhunter.com\/pt\/blog\/mapeamento-objeto-relacional\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Geekhunter\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/geekhunterbr\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-03-28T14:41:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-04-07T13:08:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/08\/homem-usando-notebook-na-mesa.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"641\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Geekhunter\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@geekhunterbr\" \/>\n<meta name=\"twitter:site\" content=\"@geekhunterbr\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Geekhunter\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/mapeamento-objeto-relacional\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/mapeamento-objeto-relacional\\\/\"},\"author\":{\"name\":\"Geekhunter\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/person\\\/9f62b173345139f7bbdaf55312c3d400\"},\"headline\":\"Mapeamento objeto-relacional: como funciona e t\u00e9cnicas\",\"datePublished\":\"2025-03-28T14:41:58+00:00\",\"dateModified\":\"2025-04-07T13:08:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/mapeamento-objeto-relacional\\\/\"},\"wordCount\":2129,\"publisher\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/mapeamento-objeto-relacional\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/homem-usando-notebook-na-mesa.jpg\",\"articleSection\":[\"Desenvolvimiento de software\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/mapeamento-objeto-relacional\\\/\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/mapeamento-objeto-relacional\\\/\",\"name\":\"Como funciona e t\u00e9cnicas de mapeamento objeto-relacional\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/mapeamento-objeto-relacional\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/mapeamento-objeto-relacional\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/homem-usando-notebook-na-mesa.jpg\",\"datePublished\":\"2025-03-28T14:41:58+00:00\",\"dateModified\":\"2025-04-07T13:08:12+00:00\",\"description\":\"O MOR (Mapeamento Objeto-relacional) \u00e9 uma das t\u00e9cnicas mais efetivas para aproveitamento de c\u00f3digo, seguran\u00e7a e portabilidade. Leia!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/mapeamento-objeto-relacional\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/mapeamento-objeto-relacional\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/mapeamento-objeto-relacional\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/homem-usando-notebook-na-mesa.jpg\",\"contentUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/homem-usando-notebook-na-mesa.jpg\",\"width\":960,\"height\":641,\"caption\":\"Homem de \u00f3culos usando notebook na mesa com uma cozinha ao fundo\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/mapeamento-objeto-relacional\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mundo TI\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/category\\\/mundo-ti\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Desenvolvimiento de software\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/category\\\/mundo-ti\\\/desenvolvimiento-de-software\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Mapeamento objeto-relacional: como funciona e t\u00e9cnicas\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/\",\"name\":\"Blog de TI\",\"description\":\"Dicas para o RH e profissionais da \u00e1rea TI\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\",\"name\":\"GeekHunter\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/icon-1.png\",\"contentUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/icon-1.png\",\"width\":300,\"height\":300,\"caption\":\"GeekHunter\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/geekhunterbr\\\/\",\"https:\\\/\\\/x.com\\\/geekhunterbr\",\"https:\\\/\\\/www.instagram.com\\\/geekhunterbr\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/geekhunter-brasil\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@GeekHunterOfficial\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/person\\\/9f62b173345139f7bbdaf55312c3d400\",\"name\":\"Geekhunter\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"caption\":\"Geekhunter\"},\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/author\\\/matias\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Como funciona e t\u00e9cnicas de mapeamento objeto-relacional","description":"O MOR (Mapeamento Objeto-relacional) \u00e9 uma das t\u00e9cnicas mais efetivas para aproveitamento de c\u00f3digo, seguran\u00e7a e portabilidade. Leia!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.geekhunter.com\/pt\/blog\/mapeamento-objeto-relacional\/","og_locale":"pt_BR","og_type":"article","og_title":"Mapeamento objeto-relacional: como funciona e t\u00e9cnicas","og_description":"O mapeamento objeto-relacional (ORM ou MOR) \u00e9 uma t\u00e9cnica de muito utilizada para converter dados entre bancos relacionais e linguagens orientadas a","og_url":"https:\/\/www.geekhunter.com\/pt\/blog\/mapeamento-objeto-relacional\/","og_site_name":"Blog Geekhunter","article_publisher":"https:\/\/www.facebook.com\/geekhunterbr\/","article_published_time":"2025-03-28T14:41:58+00:00","article_modified_time":"2025-04-07T13:08:12+00:00","og_image":[{"width":960,"height":641,"url":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/08\/homem-usando-notebook-na-mesa.jpg","type":"image\/jpeg"}],"author":"Geekhunter","twitter_card":"summary_large_image","twitter_creator":"@geekhunterbr","twitter_site":"@geekhunterbr","twitter_misc":{"Escrito por":"Geekhunter","Est. tempo de leitura":"13 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/mapeamento-objeto-relacional\/#article","isPartOf":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/mapeamento-objeto-relacional\/"},"author":{"name":"Geekhunter","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/person\/9f62b173345139f7bbdaf55312c3d400"},"headline":"Mapeamento objeto-relacional: como funciona e t\u00e9cnicas","datePublished":"2025-03-28T14:41:58+00:00","dateModified":"2025-04-07T13:08:12+00:00","mainEntityOfPage":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/mapeamento-objeto-relacional\/"},"wordCount":2129,"publisher":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/mapeamento-objeto-relacional\/#primaryimage"},"thumbnailUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/08\/homem-usando-notebook-na-mesa.jpg","articleSection":["Desenvolvimiento de software"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/mapeamento-objeto-relacional\/","url":"https:\/\/www.geekhunter.com\/pt\/blog\/mapeamento-objeto-relacional\/","name":"Como funciona e t\u00e9cnicas de mapeamento objeto-relacional","isPartOf":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/mapeamento-objeto-relacional\/#primaryimage"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/mapeamento-objeto-relacional\/#primaryimage"},"thumbnailUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/08\/homem-usando-notebook-na-mesa.jpg","datePublished":"2025-03-28T14:41:58+00:00","dateModified":"2025-04-07T13:08:12+00:00","description":"O MOR (Mapeamento Objeto-relacional) \u00e9 uma das t\u00e9cnicas mais efetivas para aproveitamento de c\u00f3digo, seguran\u00e7a e portabilidade. Leia!","breadcrumb":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/mapeamento-objeto-relacional\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.geekhunter.com/pt/blog\/mapeamento-objeto-relacional\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/mapeamento-objeto-relacional\/#primaryimage","url":"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2019\/08\/homem-usando-notebook-na-mesa.jpg","contentUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/08\/homem-usando-notebook-na-mesa.jpg","width":960,"height":641,"caption":"Homem de \u00f3culos usando notebook na mesa com uma cozinha ao fundo"},{"@type":"BreadcrumbList","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/mapeamento-objeto-relacional\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/www.geekhunter.com/pt/blog\/"},{"@type":"ListItem","position":2,"name":"Mundo TI","item":"https:\/\/www.geekhunter.com/pt/blog\/category\/mundo-ti\/"},{"@type":"ListItem","position":3,"name":"Desenvolvimiento de software","item":"https:\/\/www.geekhunter.com/pt/blog\/category\/mundo-ti\/desenvolvimiento-de-software\/"},{"@type":"ListItem","position":4,"name":"Mapeamento objeto-relacional: como funciona e t\u00e9cnicas"}]},{"@type":"WebSite","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#website","url":"https:\/\/www.geekhunter.com\/pt\/blog\/","name":"Blog de TI","description":"Dicas para o RH e profissionais da \u00e1rea TI","publisher":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.geekhunter.com/pt/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization","name":"GeekHunter","url":"https:\/\/www.geekhunter.com\/pt\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2024\/10\/icon-1.png","contentUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2024\/10\/icon-1.png","width":300,"height":300,"caption":"GeekHunter"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/geekhunterbr\/","https:\/\/x.com\/geekhunterbr","https:\/\/www.instagram.com\/geekhunterbr\/","https:\/\/www.linkedin.com\/company\/geekhunter-brasil\/","https:\/\/www.youtube.com\/@GeekHunterOfficial"]},{"@type":"Person","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/person\/9f62b173345139f7bbdaf55312c3d400","name":"Geekhunter","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","caption":"Geekhunter"},"url":"https:\/\/www.geekhunter.com\/pt\/blog\/author\/matias\/"}]}},"_links":{"self":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts\/5403","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/users\/167"}],"replies":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/comments?post=5403"}],"version-history":[{"count":0,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts\/5403\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/media\/12743"}],"wp:attachment":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/media?parent=5403"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/categories?post=5403"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/tags?post=5403"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}