📜  反对.js |用于 Node.js 的 SQL 友好 ORM(1)

📅  最后修改于: 2023-12-03 14:50:32.943000             🧑  作者: Mango

反对.js | 用于 Node.js 的 SQL 友好 ORM

简介

反对.js 是一款使用 TypeScript 编写的 Node.js ORM(对象关系映射)。它可以让你通过编写 JavaScript 代码来操作关系型数据库。反对.js 支持 MySQL、PostgreSQL、SQLite、Microsoft SQL Server 等数据库。

反对.js 特点如下:

  • 支持 TypeScript 和 JavaScript
  • 支持原生 SQL 查询
  • 提供鲁棒性数据验证
  • 支持事务
  • 支持多种数据库
安装

你可以使用 npm 进行安装:

npm install objection --save
快速开始
连接数据库

在使用反对.js 之前,你需要先连接到数据库。下面是一个连接到 MySQL 数据库的示例:

import { Model } from 'objection';
import Knex from 'knex';

const knex = Knex({
  client: 'mysql2',
  connection: {
    host: '127.0.0.1',
    user: 'your_database_user',
    password: 'your_database_password',
    database: 'myapp_test'
  }
});

Model.knex(knex);
创建模型

创建模型是使用反对.js 的第一步。模型是对应数据库表的映射,通过模型你可以对数据库进行增删改查等操作。

import { Model } from 'objection';

class Person extends Model {
  static get tableName() {
    return 'persons';
  }
}

async function test() {
  const persons = await Person.query();
  console.log(persons);
}

这里我们创建了一个名为 Person 的模型,并指定它对应数据库中的 persons 表。我们通过调用静态方法 Person.query 来执行查询操作。

查询数据

反对.js 提供丰富的查询 API,让你可以非常方便地查询数据。

// 查询所有数据
const persons = await Person.query();

// 查询指定 ID 的数据
const person = await Person.query().findById(1);

// 查询名字为 Alice 的数据
const persons = await Person.query().where('name', 'Alice');

// 查询名字为 Alice 或 Bob 的数据
const persons = await Person.query().where('name', 'Alice').orWhere('name', 'Bob');

// 查询名字以 A 开头的数据
const persons = await Person.query().where('name', 'like', 'A%');
新增数据

使用 insert 方法可以新增数据。

const person = await Person.query().insert({
  name: 'Alice',
  age: 20
});
更新数据

使用 update 方法可以更新数据。

await Person.query().findById(1).update({
  name: 'Alice',
  age: 21
});
删除数据

使用 delete 方法可以删除数据。

await Person.query().delete().where('id', 1);
数据验证

反对.js 提供了鲁棒性的数据验证,让你可以轻松验证数据是否符合要求。

import { Model } from 'objection';
import Joi from 'joi';

class Person extends Model {
  static get tableName() {
    return 'persons';
  }

  static get jsonSchema() {
    return Joi.object({
      name: Joi.string().required(),
      age: Joi.number().integer().min(0).max(100)
    });
  }
}

const person = await Person.query().insert({
  name: 'Alice',
  age: 20,
  email: 'alice@example.com'
}); // 这里会抛出异常,因为 email 不在模型定义中
总结

反对.js 是一款优秀的 Node.js ORM,提供了方便的 API 和强大的验证功能。如果你需要对数据库进行操作,反对.js 绝对是一个值得推荐的选择。