Neste artigo eu vou apresentar o Sequelize e mostrar como usar esse ORM para acessar um banco de dados MySql. |
Se você esta chegando agora sugiro que leia os seguintes artigos onde apresento os conceitos sobre o Node js:
Os pré-requisitos para acompanhar o artigo são:
Para saber mais sobre o editor VS Code leia os seguintes artigos :
Apresentando o Sequelize
O Sequelize é um ORM(Object/Relational Mapper) baseado em Promise para Node.js e io.js, e suporta os dialetos PostgreSQL, MySQL, MariaDB, SQLite e MSSQL e recursos a transação, relacionamentos, replicação de leitura e muito mais.
Ele possui um mecanismo de migração muito poderoso que pode transformar um esquema existente de banco de dados em uma nova versão e também fornece mecanismos de sincronização de banco de dados que podem criar estrutura de banco de dados especificando a estrutura do modelo.
O
Sequelize esta disponível via NPM e sua instalação pode ser feita executando o
comando no Node.js:
npm
install --save sequelize
A seguir você deve instalar instalar o conector para o banco de dados que você deseja acessar usando o Sequelize, e, isso pode ser feito executando os comandos abaixo:
$ npm install --save pg pg-hstore
$ npm install --save mysql // para os dialetos mysql e mariadb
$ npm install --save sqlite3
$ npm install --save tedious // para o SQL Server
Criando o schema MySql
Vamos agora mostrar na prática como usar o Sequelize para acessar um banco de dados MySQL.
Para isso eu vou criar um novo schema no MySQL usando o MySQL Workbench conforme os passos a seguir:
Passo 1
- Abra o MySQL WorkBench e clique no ícone para criar um novo schema: (ou clique com o botão direito do mouse sobre a área Schemas e a seguir em Create Schema)
Passo 2
- A seguir informe o nome do schema, eu usei o nome mac_demo, e clique no botão Apply;
Passo 3
- Na próxima janela clique em Apply e a seguir em Finish;
Ao final você deverá ver na área SCHEMAS do MySql WorkBench o schema mac_demo criado e pronto para ser usado:
Criando a aplicação Node e instalando o Sequelize
Neste momento você já deve ter o Node.js e o NPM instalados para poder continuar.
Crie uma pasta na sua máquina local onde será criada a nossa aplicação Node e onde vamos instalar o Sequelize e os pacotes necessários.
Para isso abra uma janela de prompt de comando clicando no ícone do Windows e a seguir em Prompt de Comando digitando cmd ou command na barra de tarefas. (Eu estou usando o Windows 10)
Com a janela de comandos aberta digite os comandos:
Vamos iniciar nossa aplicação criando o arquivo package.json que será usado para definir os pacotes que iremos usar em nossa aplicação.
Digite no prompt e comando : npm init -y (se você não usar o -y terá que responder algumas perguntas relacionadas ao projeto)
Será criado o arquivo package.json e seu conteúdo será exibido a seguir conforme mostra a figura.
Vamos agora instalar o Sequelize digitando o seguinte comando : npm install --save sequelize (o --save salva no arquivo package.json a dependência ao sequelize.)
Agora vamos instalar o Connector para o MySql digitando o seguinte comando : npm install --save mysql (o --save salva no arquivo package.json a dependência ao conector MySql.)
Abrindo o arquivo package.json podemos ver as dependências do mysql e do sequelize informadas. Isso é importante pois com base apenas na informação deste arquivo podemos gerar todas as dependências usando o NPM através do comando : npm install
Pronto ! Já temos o Sequelize e o conector para o MySQL instalados em nossa aplicação agora vamos primeiro estabelecer uma conexão e testar se estamos conseguindo acessar o schema mac_demo criado.
Usando o VS Code e criando a arquivo app.js da aplicação
Vamos agora usar o editor VS Code para poder criar o arquivo app.js na pasta sequelize_demo da nossa aplicação.
Abra o VS Code e no menu File clique na opção Open Folder
Selecione a pasta sequelize_demo que criamos para o nosso projeto.
Você deve visualizar apenas a pasta node_modules que foi criada no projeto e que contém todos os arquivos de dependências necessários para a execução da nossa aplicação.
Deverá ver também o arquivo package.json.
Clique no ícone New File para criar um novo arquivo no projeto e informe o nome app.js:
A seguir digite o código abaixo no arquivo app.js :
Vamos entender o código :
Neste código a primeira coisa que eu fiz foi importar um módulo sequelize usando require('sequelize'). Assim Sequelize representa uma variável de referência ao Sequelize.
Não precisamos importar nada referente ao conector com o banco de dados usado pois o Sequelize cuida disso.
A seguir criamos uma nova instância do Sequelize usando o seu construtor que possui a seguinte sintaxe:
onde :
Para mais detalhes veja a documentação em : http://sequelize.readthedocs.io/en/latest/api/sequelize/
A seguir estou usando o parâmetro authenticate que retorna uma Promise para verificar a conexão com o banco de dados mac_demo do MysQL:
Nota: Promise é um objeto usado para processamento assíncrono. Um Promise (de "promessa") representa um valor que pode estar disponível agora, no futuro ou nunca.
var conexao =
connection.authenticate()
.then(function(){
console.log('Conexão com o MySQL foi
estabelecida com sucesso');
})
.catch(function (err) {
console.log('Não foi possível se conectar com o
banco de dados MySql');
})
.done();
Agora vamos rodar a nossa aplicação, digitando :: node app.js
Observe a mensagem indicando que a conexão foi estabelecida com sucesso.
Muito bem...
Agora vamos criar uma tabela chamada Artigos neste schema e definir dois campos : titulo e assunto
Depois vamos incluir um registro na tabela e para concluir vamos exibir o registro incluido.
Para isso vamos alterar o código do arquivo app.js conforme mostrado a seguir:
Entendendo o código:
Usamos o
método define para definir mapeamentos entre um modelo e uma tabela.
Com esse método o Sequelize irá automaticamente adicionar os atributos
createdAt e updatedAt e assim, você será capaz de saber quando foi a
entrada no banco de dados e quando ele foi atualizado a última vez. (Em outro
artigo vou mostrar como inibir esse recurso)
var Artigos =
connection.define('artigos', {
titulo: Sequelize.STRING,
assunto : Sequelize.TEXT
});
Assim o método define irá criar a tabela Artigos contendo os campos :
Para saber mais detalhes sobre os tipos de dados consulte aqui http://docs.sequelizejs.com/en/latest/api/datatypes/
Depois disso estamos usando o método sync() para sincronizar os modelos para o banco de dados com a tabela e usando o método create() para incluir um registro nos campos titulo e assunto. (sync() retorna uma Promise)
connection.sync().then(function
() {
Artigos.create({
titulo: 'Usando Sequelize',
assunto: 'Neste artigo vamos abordar como
usar os recursos do Sequelize'
})
});
Finalmente estamos usando o método findAll() para listar todos os registros da tabela artigos.
connection.sync().then(function () {
Artigos.findAll().then(function(artigos) {
console.log(artigos.dataValues)
});
});
Para testar basta digitar o comando : node app.js
Você também pode executar o comando no VS Code. Para isso pressione CTRL+SHIFT+' para abrir a janela de comandos e digite : node app
Como vemos temos o registro incluído e exibido no console. Para constatar vamos abrir o MySQL WorkBench e verificar a tabela e os seus dados:
Observe que por padrão os campos createdAt e updateAt foram criados e atualizados.
O registro esta duplicado porque eu executei duas vezes o comando : node app.js
E assim, nesse primeiro contato com o Sequelize, já acessamos um banco de dados MySQL , criamos uma tabela e inserimos um registro.
Nada mal...
Aguarde mais novidades sobre o Sequelize.
Referências: