Prisma是Node.js與TypeScript的ORM框架
使用資料庫是應用程式開發中最具挑戰性的領域之一。資料建模,模式遷移和編寫資料庫查詢是應用程式開發人員每天處理的常見任務。
Node.js生態系統雖然在構建資料庫支援的應用程式中越來越流行,但並未為應用程式開發人員提供處理這些任務的現代工具。
應用程式開發人員應該關心資料,而不是SQL。
隨著工具變得更加專業化,應用程式開發人員應該能夠專注於為組織實現增值功能,而不是花費時間透過編寫膠合程式碼來遍歷應用程式的各個層。
使用Prisma時,您可以在Prisma模式中定義資料模型。以下是Prisma模型的樣例:
model Post { id Int @id @default(autoincrement()) title String content String? published Boolean @default(false) author User? @relation(fields: [authorId], references: [id]) authorId Int? } model User { id Int @id @default(autoincrement()) email String @unique name String? posts Post[] } |
這些模型中的每一個都對映到基礎資料庫中的表,並充當Prisma Client提供的生成的資料訪問API的基礎。Prisma的VS Code擴充套件提供語法高亮顯示,自動完成,快速修復和許多其他功能,使資料建模具有神奇而令人愉悅的體驗
駭客新聞網友評論:
我過去曾經使用過Django,SQLAlchemy,Sequelize,Knex和TypeORM,我喜歡Prisma。極其強大的型別安全性使Sequelize看起來像個玩笑。查詢引擎本身以rust編寫,可在事件迴圈的每個週期內組合並最佳化查詢,因此GraphQL N + 1問題已成為過去。
此外,它背後的團隊和社群也很棒!我從沒想到在ORM背後建立活躍的開發人員社群會很重要,但是由於Sequelize-Typescript的作者被迫於去年下半年放棄,而TypeORM的作者也缺席了,Prisma讓人感到新鮮。我真的希望他們能找到一種方法來建立可持續的業務。支援程式包,功能開發合同,以及一些使他們在財務上受到激勵的東西,以使其不斷完善。
我使用Prisma已有一段時間了,我非常喜歡。我使用過的TypeScript最佳ORM。我最大的問題是可測試性。
當然,我可以在Jest或其他測試中模擬Prisma客戶端,但是如果我想測試狀態,則幾乎必須使用JS模擬來重新實現記憶體資料庫。我還可以連線到用於測試的真實資料庫,但這實在太過分了,我通常對測試Prisma本身不感興趣,僅對我自己的程式碼感興趣。我希望Prisma具有測試模式,在此模式下,您可以使用臨時記憶體SQLite DB替換客戶端,而無需編寫大量的樣板檔案。
“應用程式開發人員應該關心資料,而不是SQL”? 任何被ORM生成低效的SQL(並隨後不得不學習和關心SQL)所咬傷的人都知道這種說法是不正確的。
我在最新專案中採用了Prisma,對此我有不同的感覺。
-生成的客戶端是頂級的。在TypeScript中完全指定了可以由使用者擴充套件的智慧型別。
-模式語言很棒。它提供了可以完整地表達您的資料庫結構的凝聚力體驗,並且還提供了管理該結構的演變的遷移框架。
-在模型級別沒有實現訪問控制的鉤子,因此您最終需要圍繞基本查詢建立一個更高階別的API來自行實現這些查詢,這是一筆相當大的投資。
稜鏡不足之處在於測試。Prisma中的測試故事是您可以使用實時資料庫,也可以在應用程式中完全排除對Prisma的所有呼叫。後者意味著您最終要為實現而不是行為編寫一堆測試,或者最終要手動編寫適合Prisma API的記憶體資料庫。前者意味著您需要在每個測試用例之後完全重新建立資料庫。
總而言之,我們可能不會放棄它,但是我將繼續尋找更好的方法來測試我的端點。
TypeORM->經典ORM,是Node中的“預設”選擇,但與Java存在的ORM或Django ORM之類相比,還不是很成熟。以我的經驗,這不是一個了不起的庫,事務管理有點痛苦,我已經看到了一些錯誤。
Knex->它可以工作,但不確定為什麼要使用它而不是TypeORM
MikroORM->沒有太多經驗,我的一位同事真的很喜歡它,閱讀它背後的原理,然後看看這是否對您有用,因為它有點自以為是
Slonik->從未使用過它,但可能是我在新專案中設定的。像許多人一樣,我認為查詢構建器是BS,而我更喜歡使用SQL:Slonik在為您提供常用的getOne / getMany實用程式的同時,使這一操作變得非常容易
我想嘗試Prisma。
相關文章
- 精讀《Prisma 的使用》
- Java ORM 框架指南JavaORM框架
- 自定義ORM框架ORM框架
- 使用C++的ORM框架QxORMC++ORM框架
- Node.js 配合 express 框架、ejs 、mongodb 實現應用 && [使用 TypeScript 重構]Node.jsExpress框架MongoDBTypeScript
- ORM框架之GreenDao3.0整合與註解(一)ORM框架
- “造輪運動”之 ORM框架系列(二)~ 說說我心目中的ORM框架ORM框架
- 非框架內使用 ORM框架ORM
- Python之ORM框架SQLAlchemyPythonORM框架SQL
- 手擼ORM淺談ORM框架之Add篇ORM框架
- 手擼ORM淺談ORM框架之Update篇ORM框架
- 手擼ORM淺談ORM框架之Query篇ORM框架
- 手擼ORM淺談ORM框架之Delete篇ORM框架delete
- 手把手擼套框架-ORM框架的選擇框架ORM
- 手擼ORM淺談ORM框架之基礎篇ORM框架
- 用 TypeScript 開發 Node.js 程式TypeScriptNode.js
- 核心技術靠化緣是要不來的——自己動手寫ORM框架ORM框架
- Flask框架之八SQLAlchemy -ormFlask框架SQLORM
- 我們需要什麼樣的 ORM 框架ORM框架
- sproket/Persism:Java低程式碼的ORM框架JavaORM框架
- ReScript 與 TypeScript,誰是前端圈的“當紅辣子雞”TypeScript前端
- Nest.js 5 正式版,基於 TypeScript 面向切面程式設計 的 node.js 微服務框架TypeScript程式設計Node.js微服務框架
- node 整合sequelize ORM 框架學習ORM框架
- 輕量級orm框架——gzero指南ORM框架
- Node.js Express 框架Node.jsExpress框架
- 移動端orm框架效能測評ORM框架
- 手寫開源ORM框架介紹ORM框架
- fong - 純typescript的node gRPC微服務框架TypeScriptRPC微服務框架
- Django框架:8、聚合查詢、分組查詢、F與Q查詢、ORM查詢最佳化、ORM事務操作、ORM常用欄位型別、ORM常用欄位引數Django框架ORM型別
- 什麼是 TypeScript 的 Module AugmentationTypeScript
- typescript:never與keyof的妙用TypeScript
- TypeScript介面與類的使用TypeScript
- 一款新的超強的ORM框架 mybatis-mp !!!ORM框架MyBatis
- 手把手教你寫一個Java的orm框架(4)JavaORM框架
- 手把手教你寫一個Java的orm框架(2)JavaORM框架
- 手把手教你寫一個Java的orm框架(1)JavaORM框架
- 手把手教你寫一個Java的orm框架(3)JavaORM框架
- 2022年了有哪些值得推薦的.NET ORM框架?ORM框架