{"id":134,"date":"2019-03-10T18:50:44","date_gmt":"2019-03-10T21:50:44","guid":{"rendered":"http:\/\/fabiobrandao.net.br\/blog\/?p=134"},"modified":"2023-03-12T18:48:29","modified_gmt":"2023-03-12T21:48:29","slug":"o-que-e-dapper-e-como-utilizar","status":"publish","type":"post","link":"https:\/\/fabiobrandao.net.br\/blog\/asp-net-mvc\/o-que-e-dapper-e-como-utilizar\/","title":{"rendered":"O que \u00e9 Dapper e como utilizar"},"content":{"rendered":"<p>Antes de falar em <strong>Dapper<\/strong> se faz necess\u00e1rio ter o conhecimento do que \u00e9 um <strong>ORM<\/strong>, caso voc\u00ea ainda n\u00e3o esteja familiarizado com o assunto.<\/p>\n<p>ORM (Object Relational Mapper) \u00e9 uma t\u00e9cnica para mapeamento objeto relacional. Se voc\u00ea persiste dados em suas aplica\u00e7\u00f5es, muito provavelmente j\u00e1 utilizou um banco SQLServer ou MySQL, por exemplo. Estes s\u00e3o exemplos de bancos de dados relacionais onde os dados s\u00e3o armazenados em tabelas.<\/p>\n<p>Do lado da implementa\u00e7\u00e3o, normalmente uma tabela torna-se uma classe e voc\u00ea ter\u00e1 que escrever c\u00f3digos SQL para por exemplo inserir um registro, atualizar, selecionar e excluir, o famoso CRUD. Ao selecionar os dados de uma tabela voc\u00ea acabaria tendo de mapear esta tabela para uma classe. Os ORMs s\u00e3o justamente a ponte entre os dois mundos, permitindo facilidade e produtividade j\u00e1 que voc\u00ea n\u00e3o precisa escrever comandos SQL e o mapeamento entre as tabelas e as entidades \u00e9 feito de forma autom\u00e1tica.<\/p>\n<p>Existem v\u00e1rios ORMs onde os mais conhecidos s\u00e3o o <strong>Hibernate<\/strong>, <strong>NHibernate<\/strong>\u00a0e <strong>Entity Framework<\/strong>. Vale ressaltar que toda esta facilidade n\u00e3o vem de gra\u00e7a e \u00e9 claro que existe uma diferen\u00e7a de performance entre conversar diretamente com seu banco de dados via ADO.NET ou usar um intermedi\u00e1rio, al\u00e9m de poder camuflar problemas grav\u00edssimos. C\u00f3digos ORM tamb\u00e9m podem ser muito complexos, com otimiza\u00e7\u00e3o e manuten\u00e7\u00e3o dif\u00edceis.<\/p>\n<p>No meio do caminho disso tudo est\u00e3o os micro ORMs que foram criados diretamente sobre o ADO .NET com a proposta de aumentar o desempenho das intera\u00e7\u00f5es com os bancos de dados relacionais. Basicamente eles utilizam Reflection para gerar objetos a partir do resultado da leitura dos dados. Os mais conhecidos micro ORMs s\u00e3o:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.toptensoftware.com\/petapoco\/\">PetaPoco<\/a><\/li>\n<li><a href=\"http:\/\/blog.wekeroad.com\/helpy-stuff\/and-i-shall-call-it-massive\">Massive<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/markrendle\/Simple.Data\">Simple.Data<\/a><\/li>\n<li><a href=\"http:\/\/code.google.com\/p\/dapper-dot-net\/\">Dapper.Net<\/a><\/li>\n<\/ul>\n<h2>Mas o que \u00e9 Dapper?<\/h2>\n<p>O Dapper \u00e9 um Micro ORM (Object Relational Mapping) voltado para o desenvolvimento .NET, onde seu principal objetivo \u00e9 melhorar o desempenho das consultas ao banco de dados. Ele n\u00e3o conta com toda a gama de um ORM mais facilita muito o desenvolvimento de aplica\u00e7\u00f5es com melhor desempenho.<\/p>\n<h2>Um pouco da hist\u00f3ria<\/h2>\n<p>O Dapper foi desenvolvido por Marc Gravell e Sam Saffron enquanto trabalhavam no Stack Overflow, eles estavam resolvendo problemas de performance da aplica\u00e7\u00e3o. O Stack Overflow conta com um tr\u00e1fego extremamente alto onde em 2015 teve cerca de 5,7 bilh\u00f5es de exibi\u00e7\u00f5es de p\u00e1ginas. A sa\u00edda que encontraram para melhorar a performance do Stack Overfolw foi criar seu pr\u00f3prio ORM, onde o mesmo visava performance nas consultas de banco de dados.<\/p>\n<p>Hoje o projeto continua ativo, teve sua utiliza\u00e7\u00e3o muito difundida no meio do desenvolvimento. O mesmo \u00e9 de c\u00f3digo aberto, dispon\u00edvel no Github (<a href=\"http:\/\/github.com\/StackExchange\/dapper-dot-net\">http:\/\/github.com\/StackExchange\/dapper-dot-net<\/a>).<\/p>\n<h2>Como o Dapper funciona?<\/h2>\n<p>O Dapper trabalha com o conceito de Extension methods, onde ele implementa um m\u00e9todo de extens\u00e3o da classe de conex\u00e3o do banco, onde ao fazer a consulta ao banco de dados o mesmo vai fazer o mapeamento do retorno do Data Reader para o Modelo de dados.<\/p>\n<h2>Utilizando o Dapper criando um CRUD<\/h2>\n<p>Preparei um exemplo com um CRUD completo utilizando Dapper que voc\u00ea pode baixar aqui <a href=\"https:\/\/github.com\/fabiobrandao\/dapper-samples\">https:\/\/github.com\/fabiobrandao\/dapper-samples<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Antes de falar em Dapper se faz necess\u00e1rio ter o conhecimento do que \u00e9 um ORM, caso voc\u00ea ainda n\u00e3o esteja familiarizado com o assunto. ORM (Object Relational Mapper) \u00e9&#8230; <\/p>\n","protected":false},"author":1,"featured_media":397,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[11],"tags":[22,21],"class_list":["post-134","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-asp-net-mvc","tag-crud","tag-dapper"],"_links":{"self":[{"href":"https:\/\/fabiobrandao.net.br\/blog\/wp-json\/wp\/v2\/posts\/134","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fabiobrandao.net.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fabiobrandao.net.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fabiobrandao.net.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fabiobrandao.net.br\/blog\/wp-json\/wp\/v2\/comments?post=134"}],"version-history":[{"count":7,"href":"https:\/\/fabiobrandao.net.br\/blog\/wp-json\/wp\/v2\/posts\/134\/revisions"}],"predecessor-version":[{"id":141,"href":"https:\/\/fabiobrandao.net.br\/blog\/wp-json\/wp\/v2\/posts\/134\/revisions\/141"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fabiobrandao.net.br\/blog\/wp-json\/wp\/v2\/media\/397"}],"wp:attachment":[{"href":"https:\/\/fabiobrandao.net.br\/blog\/wp-json\/wp\/v2\/media?parent=134"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fabiobrandao.net.br\/blog\/wp-json\/wp\/v2\/categories?post=134"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fabiobrandao.net.br\/blog\/wp-json\/wp\/v2\/tags?post=134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}