当前位置:首页 >知识 >RDB.js:适用于 Node.js 和 Typescript 的终极对象关系映射器 RDB 都能满足您的关系需求

RDB.js:适用于 Node.js 和 Typescript 的终极对象关系映射器 RDB 都能满足您的关系需求

2024-06-30 17:14:20 [百科] 来源:避面尹邢网

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

作者:zhangzhang 开发 前端 RDB.js 是适用于 Node.js 和 Typescript 的终极对象关系映射器,可与 Postgres、的对象MS SQL、终极MySQL、关系Sybase SAP 和 SQLite 等流行数据库无缝集成。用于映射

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

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

RDB.js:适用于 Node.js 和 Typescript 的终极对象关系映射器 RDB 都能满足您的关系需求

关键特性

  • 丰富的查询模式:RDB 提供了强大而直观的查询模型,可轻松检索、的对象过滤和操作数据库中的终极数据。
  • 简明 API:RDB 拥有简明且便于开发人员使用的 API,可让您使用简单而富有表现力的语法与数据库进行交互。
  • 无需代码生成:享受完整的智能感知,即使在表映射中,也不需要繁琐的代码生成。
  • 支持 TypeScript 和 JavaScript:RDB 完全支持 TypeScript 和 JavaScript,让您可以充分利用静态类型和现代 ECMAScript 功能的优势。
  • 可在浏览器中使用:通过使用 Express.js 插件,您可以在浏览器中安全地使用 RDB,该插件用于保护敏感的数据库凭据,避免在客户端级别暴露。这个方法反映了传统的 REST API,并使用了高级 TypeScript 工具来增强功能。

安装与使用

$ npm install rdb

示例

RDB.js:适用于 Node.js 和 Typescript 的终极对象关系映射器 RDB 都能满足您的关系需求

这里我们选择 SQLite。

RDB.js:适用于 Node.js 和 Typescript 的终极对象关系映射器 RDB 都能满足您的关系需求

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 });}


责任编辑:华轩 来源: 独立开发者张张 Node.js前端开发Typescript

(责任编辑:时尚)

    推荐文章
    热点阅读