O que é Dapper e como utilizar

AspNetMVC

Antes de falar em Dapper se faz necessário ter o conhecimento do que é um ORM, caso você ainda não esteja familiarizado com o assunto.

ORM (Object Relational Mapper) é uma técnica para mapeamento objeto relacional. Se você persiste dados em suas aplicações, muito provavelmente já utilizou um banco SQLServer ou MySQL, por exemplo. Estes são exemplos de bancos de dados relacionais onde os dados são armazenados em tabelas.

Do lado da implementação, normalmente uma tabela torna-se uma classe e você terá que escrever códigos SQL para por exemplo inserir um registro, atualizar, selecionar e excluir, o famoso CRUD. Ao selecionar os dados de uma tabela você acabaria tendo de mapear esta tabela para uma classe. Os ORMs são justamente a ponte entre os dois mundos, permitindo facilidade e produtividade já que você não precisa escrever comandos SQL e o mapeamento entre as tabelas e as entidades é feito de forma automática.

Existem vários ORMs onde os mais conhecidos são o Hibernate, NHibernate e Entity Framework. Vale ressaltar que toda esta facilidade não vem de graça e é claro que existe uma diferença de performance entre conversar diretamente com seu banco de dados via ADO.NET ou usar um intermediário, além de poder camuflar problemas gravíssimos. Códigos ORM também podem ser muito complexos, com otimização e manutenção difíceis.

No meio do caminho disso tudo estão os micro ORMs que foram criados diretamente sobre o ADO .NET com a proposta de aumentar o desempenho das interações 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ão:

Mas o que é Dapper?

O Dapper é um Micro ORM (Object Relational Mapping) voltado para o desenvolvimento .NET, onde seu principal objetivo é melhorar o desempenho das consultas ao banco de dados. Ele não conta com toda a gama de um ORM mais facilita muito o desenvolvimento de aplicações com melhor desempenho.

Um pouco da história

O Dapper foi desenvolvido por Marc Gravell e Sam Saffron enquanto trabalhavam no Stack Overflow, eles estavam resolvendo problemas de performance da aplicação. O Stack Overflow conta com um tráfego extremamente alto onde em 2015 teve cerca de 5,7 bilhões de exibições de páginas. A saída que encontraram para melhorar a performance do Stack Overfolw foi criar seu próprio ORM, onde o mesmo visava performance nas consultas de banco de dados.

Hoje o projeto continua ativo, teve sua utilização muito difundida no meio do desenvolvimento. O mesmo é de código aberto, disponível no Github (http://github.com/StackExchange/dapper-dot-net).

Como o Dapper funciona?

O Dapper trabalha com o conceito de Extension methods, onde ele implementa um método de extensão da classe de conexão 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.

Utilizando o Dapper criando um CRUD

Preparei um exemplo com um CRUD completo utilizando Dapper que você pode baixar aqui https://github.com/fabiobrandao/dapper-samples.