base de données

Un outil Sumor Cloud.
Plus de documentation Un connecteur de base de données pour MySQL, etc. Basé sur une entité.

CI Test Coverage Audit

Installation

npm i @sumor/database --save

Prérequis

Version de Node.JS

Nécessite Node.JS version 18.x ou supérieure

Nécessite Node.JS module ES

Comme ce package est écrit en module ES, veuillez changer le code suivant dans votre fichier package.json:

{
  "type": "module"
}

Utilisation

Installation de la base de données

Vous pouvez utiliser la méthode install pour installer une entité et une vue dans la base de données.

database.install(config, [chemin des ressources], [données des ressources])

cas 1 : installer une entité et une vue à partir du chemin des ressources, cela chargera les données/entité et données/vue à partir du chemin racine du projet.

import database from '@sumor/database'

const config = {
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'database',
  port: 3306
}

await database.install(config.database, process.cwd() + '/data')

cas 2 : installer une entité et une vue à partir des données des ressources, cela chargera les données/entité et données/vue à partir de l'objet data.

import database from '@sumor/database'

await database.install(config, {
  entity: {
    Car: {
      property: {
        brand: {
          type: 'string',
          length: 100
        },
        model: {
          type: 'string',
          length: 100
        }
      }
    }
  },
  view: {}
})

Utilisation générale

import database from '@sumor/database'

const config = {
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'database',
  port: 3306
}

// obtenir un client avec un pool de connexions
const client = await database.client(config)

// obtenir une connexion
const db = await client.connect()

// définir l'utilisateur opérationnel
db.setUser('testeur')

// créer un enregistrement
const car1Id = await db.insert('Car', {
  brand: 'BMW',
  model: 'X5'
})
const car2Id = await db.insert('Car', {
  brand: 'BMW',
  model: 'X6'
})

// lire un enregistrement
const car = await db.single('Car', { id: carId })
// car = {id: car1Id, brand: 'BMW', model: 'X5'}

// interroger les enregistrements
const cars = await db.query('Car', {
  brand: 'BMW'
})
// cars = [{id: car1Id, brand: 'BMW', model: 'X5'}, {id: car2Id, brand: 'BMW', model: 'X6'}]

// compter les enregistrements
const count = await db.count('Car', {
  brand: 'BMW'
})
// count = 2

// mettre à jour un enregistrement
await db.update(
  'Car',
  { id: car1Id },
  {
    brand: 'BMW',
    model: 'X5M'
  }
)

// assurer un enregistrement
await db.ensure('Car', ['brand'], {
  brand: 'BMW',
  model: 'X5C'
})
// n'insérera pas d'enregistrement si la marque 'BMW' existe déjà

// modifier un enregistrement
await db.modify('Car', ['brand'], {
  brand: 'BMW',
  model: 'X5C'
})
// mettra à jour le modèle de l'enregistrement si la marque 'BMW' existe déjà

// supprimer un enregistrement
await db.delete('Car', { id: car1Id })

// fermer la connexion
await db.commit()

// annuler
await db.rollback()

// fermer la connexion
await db.release()

// détruire le client lorsque le serveur doit être arrêté
await client.destroy()

Options de requête

// interroger les enregistrements avec des options
const cars = await db.select(
  'Car',
  {
    brand: 'BMW'
  },
  {
    term: 'X5',
    termRange: ['model'],
    top: 10,
    skip: 0
  }
)

Options de définition d'entité

Index

Vous pouvez ajouter un tableau d'index à la définition d'entité pour créer un index sur la table, par défaut, il créera un index sur le champ id.

Jointure

Vous pouvez ajouter un objet de jointure à la définition d'entité pour créer une jointure sur la table. Comme dans l'exemple ci-dessous, il créera le champ userId dans l'entité Car.

import database from '@sumor/database'

const config = {
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'database',
  port: 3306
}

await database.install(config, {
  entity: {
    Car: {
      property: {
        brand: {
          type: 'string',
          length: 100
        },
        model: {
          type: 'string',
          length: 100
        }
      },
      index: ['userId'],
      join: {
        user: 'User'
      }
    }
  },
  view: {}
})