O Prisma é um conjunto de ferramentas que permite a você trabalhar de maneira mais eficiente com bancos de dados NoSQL, como o MongoDB. Ele inclui um conjunto de bibliotecas em diferentes linguagens de programação que permitem que você se conecte a um banco de dados e execute consultas de maneira rápida e fácil.
Uma das principais vantagens do Prisma é sua abstração de banco de dados. Ele fornece uma camada de abstração por cima do banco de dados subjacente, o que significa que você pode escrever consultas usando um tipado forte e uma sintaxe mais limpa, em vez de ter que lidar diretamente com o código SQL ou os comandos do MongoDB. Isso pode tornar o desenvolvimento de aplicações com bancos de dados mais rápido e menos propenso a erros.
Outra vantagem do Prisma é a capacidade de gerar automaticamente o código de acesso ao banco de dados. Ao definir o modelo de dados da sua aplicação em um arquivo Prisma, o Prisma pode gerar automaticamente o código de acesso ao banco de dados, o que significa que você não precisa escrever manualmente as consultas e os códigos de conexão. Isso pode economizar muito tempo e esforço durante o desenvolvimento da sua aplicação.
Aqui está um exemplo de como você poderia usar o Prisma para se conectar a um banco de dados MongoDB e inserir um novo documento em uma coleção:
Neste exemplo, estamos usando o Prisma para criar uma nova instância de PrismaClient
e, em seguida, chamando o método create
da propriedade user
para inserir um novo documento na coleção de usuários. O documento é criado com os campos name
e email
, que são especificados no objeto de dados passado para o método create
. Depois que o documento é criado, o objeto inteiro é exibido no console.
const { PrismaClient } = require('@prisma/client')
const prisma = new PrismaClient()
async function main() {
const newUser = await prisma.user.create({
data: {
name: 'John',
email: 'john@example.com',
},
})
console.log(newUser)
}
main()
.catch(e => console.error(e))
.finally(async () => {
await prisma.disconnect()
})
Aqui vai uma lista com os principais comandos do Prisma DB
prisma generate
: gera o código de acesso ao banco de dados a partir do arquivo de modelo do Prisma.prisma introspect
: examina o banco de dados e gera o arquivo de modelo do Prisma a partir dele.prisma migrate save
: cria uma nova migração a partir do arquivo de modelo atual do Prisma.prisma migrate up
: aplica as migrações pendentes ao banco de dados.prisma migrate down
: reverte as últimas migrações aplicadas ao banco de dados.prisma reset
: remove todos os dados do banco de dados e aplica novamente todas as migrações.prisma playground
: inicia o playground do Prisma, um ambiente interativo para explorar e testar consultas.
Exemplos de códigos com o Prisma e Schema.Prisma
exemplo de um arquivo de modelo do Prisma que define um banco de dados para uma aplicação de gerenciamento de tarefas:
Copy codetype Task {
id: ID! @id
title: String!
description: String
completed: Boolean @default(value: false)
createdAt: DateTime! @default(value: now())
updatedAt: DateTime! @default(value: now())
}
Neste exemplo, estamos definindo uma coleção de documentos chamada Task
com os seguintes campos:
id
: um ID único gerado automaticamente para cada tarefa.title
: o título da tarefa (obrigatório).description
: uma descrição opcional da tarefa.completed
: um indicador de se a tarefa foi concluída ou não (opcional, com valor padrão defalse
).createdAt
: a data em que a tarefa foi criada (opcional, com valor padrão de “agora”).updatedAt
: a data em que a tarefa foi atualizada pela última vez (opcional, com valor padrão de “agora”).
Observe que estamos usando os decoradores @id
, @default
e !
para especificar propriedades adicionais dos campos. Por exemplo, o decorador @id
indica que o campo id
é a chave primária da coleção, enquanto o decorador
Modelo do Prisma que define um banco de dados com cinco entidades diferentes, três das quais estão vinculadas entre si:
type User {
id: ID! @id
name: String!
email: String!
password: String!
tasks: [Task!]! @relation(name: "UserTasks")
}
type Task {
id: ID! @id
title: String!
description: String
completed: Boolean @default(value: false)
createdAt: DateTime! @default(value: now())
updatedAt: DateTime! @default(value: now())
owner: User! @relation(name: "UserTasks")
}
type Project {
id: ID! @id
name: String!
description: String
tasks: [Task!]! @relation(name: "ProjectTasks")
}
type Tag {
id: ID! @id
name: String!
tasks: [Task!]! @relation(name: "TagTasks")
}
type Comment {
id: ID! @id
content: String!
task: Task! @relation(name: "TaskComments")
author: User! @