Neste blog Eu falarei sobre um pouco sobre os orms, seus benefícios (prós) e limitações (contras), que é sequelizar e como usá-lo.
Mapeamento de objeto-relacional
é um Técnica para converter dados entre o sistema de programação de tipos de linguagem e banco de dados. Como seu nome indica, isso é endereçado apenas ao banco de dados relacional (SQL). Isso cria um efeito “objeto de banco de dados virtual” no banco de dados relacional, esse efeito é o que nos permite manipular o banco de dados através do código.
Objeto – Referência a / o objeto (s) que podemos usar em Nossa linguagem.
Relacional – Refere-se ao nosso sistema de gerenciador de banco de dados (MySQL, MSSQL, PostgreSQL).
Mapeamento – A referência é referenciada à conexão entre os objetos e as tabelas.
TL; O DR ORM é uma técnica que nos permite fazer perguntas e manipular dados do banco de dados de uma linguagem de programação.
prós
- abstrato: design de uma estrutura ou modelo isolado a partir do banco de dados.
- portátil: permite transportar a estrutura do seu orm qualquer dbms.
- aninhamento de dados: No caso de uma tabela tem um ou mais relacionamentos com os outros.
contras
- lento: se você comparar o tempo de resposta entre uma consulta crua e uma consulta feita de Objetos, a consulta bruta é muito mais rápida porque não há camada (mapeamento).
- complexidade: Às vezes precisaremos fazer consultas complexas, afortunadamente sequelizar permite que você execute consultas brutas.
que é sequelizar?
sequela é um orm baseado em promessas para o node.js. Suporta PostgreSQL, MySQL, Sqlite e MSSQL e entregar características sólidas de transações, relacionamentos entre tabelas, mecanismos de migração e carregamento de dados, e muito mais.
Porque eu decidi usar seqüelizar?
Sequelize os seus objetos como promessas, algo que anda de mãos dadas com o loop de evento do Node.js.
Agora vou mostrar como criar e migrar tabelas, upload dados e como consulte esses dados. Se você quiser verificar o código, você pode clonar daqui.
requisitos
- node.js 8.0 +
- mysql 5.7 +
primeiro instalaremos o módulo sequelize-cli:
npm i -g seqüelizar-cli
então Vamos criar uma pasta onde ele contiver nosso aplicativo, vamos criar um arquivo JS e instalaremos seqüelizar e seu dialeto (neste caso MySQL):
Mkdir Howto -sequelize & & cd howto-seqüelizetouch index.jsnpm init -ynpm i -s sequela mysql2
agora nós tem que iniciar o projeto com sequelize-cli:
sequelize init
sequelizar-cli criou uma estrutura base na raiz do nosso projeto:
Se revisar o arquivo ./config/config.json, vemos que temos 3 opções de conexão para um banco de dados, Vamos modificar a opção “Desenvolvimento”:
"Desenvolvimento": {"nome de usuário": "raiz", "senha": "tucontraseña", "banco de dados": "HowTo-se seqüérreo", "host": "127.0.0.1", "MySQL" "OperatoraliaSe": Falso, "dialectoptions": {"charset": "utf8mb4"}, "logging": true, "benchmark": true}
Agora revista o arquivo ./Models/index. Js. Este arquivo tem uma função para criar uma nova instância sequelize cada vez que é chamada, e tem como uma variável de ambiente padrão para “Desenvolvimento”, que usará o banco de dados, host, usuário, senha e opções que acabamos de adicionar.
Nós acreditamos que nosso banco de dados com o seguinte comando:
seqüelize o db: criar
muito bom! Agora vamos começar a criar nosso Modelos:
Sequelize o modelo: Gerar - nome do usuário - Nome do usuário: string, sobrenome: string, alaverdom: string, e-mail: string seqüelize o modelo: gerar - - Nome IdiançaP - Tribute Nome: String Sequiize Modelo: Gerar --Name User_LENGUAJEP - TRIBUTESSUSEROID: INTEGER, Idioma: Integer
Após a criação de nossos modelos Você tem que fazer o relacionamento entre usuários e idiomas.
./ modelos / user.js
use rigoroso '; module.exports = (sequelizar, datatipos) = {var user = seco lize.define ('user', {name: datatypes.string, sobrenome: datatypes.string, alaVerdom: datatypes.string, e-mail: datatypes.string}, {}); User.associate = função (modelos) {// associações podem ser definidos aqui user.belongstoman (modelos.Linguagem, {através de: 'user_lenguajep', como: 'LínguasProgramming', Estrangeiro: 'UserID',}); Voltar usuário;};
Vamos analisar isso, vemos que nosso modelo de usuário executa uma função pertence que aponta para o modelo de idioma, em poucas palavras que estamos indicando que um usuário pode pertencer a vários idiomas. Nas opções, através da tabela para a qual você tem que atravessar para encontrar esses relacionamentos, como é opcional, é o nome da propriedade ou chave que nos dará esses relacionamentos, marca estrangeira porque a coluna queremos buscar esses Relacionamentos.
./ modelos / idiomap.js
'use rigoroso'; module.exports = (sequelizar, datatipos) ={var lingingp = sequelize.define («idioma», {nome: datatypes.string}, {}); Linguagemp.associate = função (modelos) {// associações pode ser definido aqui a linguagemp.belongstomany (modelos.suario, {através: 'user_lenguajep', como: 'Usuários', Estrangeiro: 'LinguagemPid',}); Devolva o idioma};
Fazemos o mesmo com os idiomas (idioma), mas agora apontando para o modelo de usuário.
Vamos lembrar um pouco o que falamos, Orm Funciona em uma camada que é o mapeamento (mapeamento), essas relações só serão realizadas no projeto, precisamos criar uma migração que afeta o banco de dados. Há ORM é que eles revisam se você fizer alterações em seus modelos e criar novas migrações com base nessas alterações (Django ORM, Peewee), em nosso caso sequelizar não tem isso, para criar nossas migrações:
sequelize migration: gerar - nome - nome de relação-muitos-para-muitos
Isso gerou um novo arquivo com um esqueleto em nossas migrações, agora temos que modificá-lo :
'use estrito'; Module.Exports = {UP: (QueryInterface, sequelize) = {return, {Tipo: 'chave estrangeira', nome: 'fk_usuarioloegajep_usuaro_1', referência: {tabela: 'usuário' Campo: 'id',}, Ondelete: 'sem ação', ONUPDATE: 'sem ação',}), queryinterface.addconstraint ('user_lenguajep' ,, {Tipo: 'chave estrangeira', nome: 'fk_usuariolegegajap_lenguep_1', referências : {Tabela: 'Linguagem', campo: 'ID',}, Ondelete: 'sem ação', ONUPDATE: 'sem ação',}),]}, abaixo: (QueryInterface, sequela) = {return}};
Este arquivo exporta um objeto com 2 propriedades, para cima e para baixo. A propriedade UP é responsável por entregar uma promessa que altera os dados (criar tabelas, relacionamentos, campos, tipos de mudança, etc.), e a propriedade para baixo não, reverter as alterações feitas em UP.
muito bem, agora toca minha parte favorita, você tem que executar os scripts de migração com o seguinte comando:
seqüelize o db: migrar
Boom! Mas o que houve?!?! Se lermos cuidadosamente o erro no console, diz que ele não encontra a tabela user_lenguajet no banco de dados, revise as tabelas. Há algo curioso, tudo acaba com um “s”, isto é porque sequelizar-clu gerencia as placas no plural por padrão, mesmo quando em nossas opções temos freezetablename: TRUE, este caso pode ser visto aqui.
Então só precisamos mudar o nome das tabelas um plural em relação a muitos-para-muitos (user_lenguajeps, usuários, linguagem).
sequelizar db: migrar: Desfazer: Allsequelize DB: migrar
As migrações foram bem sucedidas! Agora temos que preencher essas tabelas, seqüelizar-cli usa as sementes (sementes). Vamos criar 3 arquivos de sementes:
sequelizar sementes: gerar - nome de usuárioEslize sementes: Gerar --Name IdiançaPasca Semente: Gerar --Name user_lenguajap
Estas sementes estão localizadas na pasta ./seeders, você tem que colocar os dados que Queremos carregar no banco de dados.
semi Todo o usuário:
'use rigoroso'; Module.Exports = {UP: (QueryInterface, sequela) = {return QueryInterface.bulkinsert ('Usuários', {}); }, para baixo: (QueryInterface, sequelizar) = {return Queryinterface.bulkdelete ('Usuários', null, {}); }}; pré>Seed Lince:
'use estrito'; módulo.exports = {UP: (QueryInterface, sequelize) = {return Queryinterface.bulkinsert («linguagem», {}); }, para baixo: (QueryInterface, sequela) = {return Queryinterface.bulkdelete («linguagem», null, {}); }}; pré>sementes user_lenguajep:
'use estrito'; Module.Exports = {UP: (QueryInterface, sequelize) = {return Queryinterface.bulkinsert ('user_lenguajeps' ,, {}); }, Para baixo: (QueryInterface, seqüelize) = {return QueryInterface.Bulkdelete ('user_lenguajeps, null, {}); }};Agora você precisa carregar esses dados para o banco de dados com o seguinte comando:
Seqüelizar DB: SEED: Todosmuito bem! Nós já vimos como inicializar um projeto com sequelizar, criar modelos, atribuir relacionamentos, criar migrações, executar e desfazer migrações, criar sementes e enviá-las para o banco de dados, só precisamos fazer consultas. Vamos para o nosso index.js na raiz e escrevemos a seguinte função:
const db = requer ('. Modelos'); Const main = assync () = {tente {Usuários consts = aguardam db.suario.findall ({incluir:}, através de: {atributos:},}],}); Console.log (JSON.Stringify (usuários)); Processo.exit (); } Catch (Erro) {console.log (erro); }}; Main ();Nós salvamos e execute o programa (pelo console ou com a ferramenta de depuração do código do Visual Studio e devemos receber um JSON com uma lista de usuários (neste exemplo, há apenas um) Com seus dados e idiomas:
}]Aprendemos sequelizar-cli e os princípios da sequela, agora podemos criar uma API que executa ações crud para que nossos clientes consomem!