RDB.js:适用于Node.js和Typescript的终极对象关系映射器

RDB.js 是适用于 Node.js 和 Typescript 的终极对象关系映射器,可与 Postgres、MS SQL、MySQL、Sybase SAP 和 SQLite 等流行数据库无缝集成。无论您是使用 TypeScript 还是 JavaScript(包括 CommonJS 和 ECMAScript)构建应用程序,RDB 都能满足您的需求。

成都创新互联专注于网站建设|成都网站维护|优化|托管以及网络推广,积累了大量的网站设计与制作经验,为许多企业提供了网站定制设计服务,案例作品覆盖成都除甲醛等行业。能根据企业所处的行业与销售的产品,结合品牌形象的塑造,量身定制品质网站。

RDB.js:https://rdbjs.org/

关键特性

安装与使用

$ npm install rdb

示例

这里我们选择 SQLite。

npm install sqlite3

map.js 地图.js

import rdb from "rdb";

const map = rdb
  .map((x) => ({
    customer: x.table("customer").map(({ column }) => ({
      id: column("id")
        .numeric()
        .primary()
        .notNullExceptInsert(),
      name: column("name").string(),
      balance: column("balance").numeric(),
      isActive: column("isActive").boolean(),
    })),

    order: x.table("_order").map(({ column }) => ({
      id: column("id")
        .numeric()
        .primary()
        .notNullExceptInsert(),
      orderDate: column("orderDate").date().notNull(),
      customerId: column("customerId")
        .numeric()
        .notNullExceptInsert(),
    })),

    orderLine: x.table("orderLine").map(({ column }) => ({
      id: column("id").numeric().primary(),
      orderId: column("orderId").numeric(),
      product: column("product").string(),
    })),

    deliveryAddress: x
      .table("deliveryAddress")
      .map(({ column }) => ({
        id: column("id").numeric().primary(),
        orderId: column("orderId").numeric(),
        name: column("name").string(),
        street: column("street").string(),
        postalCode: column("postalCode").string(),
        postalPlace: column("postalPlace").string(),
        countryCode: column("countryCode").string(),
      })),
  }))
  .map((x) => ({
    order: x.order.map((v) => ({
      customer: v.references(x.customer).by("customerId"),
      lines: v.hasMany(x.orderLine).by("orderId"),
      deliveryAddress: hasOne(x.deliveryAddress).by(
        "orderId"
      ),
    })),
  }));

export default map;

update.js 更新.js

import map from "./map";
const db = map.sqlite("demo.db");

updateRow();

async function updateRow() {
  const order = await db.order.getById(2, {
    lines: true,
  });
  order.lines.push({
    product: "broomstick",
  });

  await order.saveChanges();
}

filter.js 过滤器.js

import map from "./map";
const db = map.sqlite("demo.db");

getRows();

async function getRows() {
  const filter = db.order.lines
    .any((line) => line.product.contains("broomstick"))
    .and(db.order.customer.name.startsWith("Harry"));

  const orders = await db.order.getMany(filter, {
    lines: true,
    deliveryAddress: true,
    customer: true,
  });

  console.dir(orders, { depth: Infinity });
}

文章标题:RDB.js:适用于Node.js和Typescript的终极对象关系映射器
网页路径:http://www.turtgq.com/article/dpegshh.html

其他资讯