当前位置: 首页 > news >正文

告别臃肿:为什么 Drizzle ORM 是 TypeScript 后端的未来?

1. 引言:我们受够了“黑盒”魔法

作为一名后端开发者,你一定有过这样的崩溃时刻:

你正在使用某个主流 ORM(比如 TypeORM 或 Prisma)。起初,一切都很美好,User.findMany() 跑得很欢。但随着业务变复杂,你发现:

  1. 性能黑洞:一个简单的查询,ORM 居然生成了 50 行极其低效的 SQL Join 语句。

  2. 启动龟速:在 Serverless 环境下(如 AWS Lambda),ORM 庞大的运行时让冷启动时间慢得像蜗牛。

  3. 调试噩梦:报错信息像天书,你根本不知道 ORM 底层到底对数据库做了什么。

你开始怀念手写 SQL 的日子——极速、精准、完全可控。但手写 SQL 又让你失去了 TypeScript 的类型提示,还得手动拼接字符串,不仅累还容易注入 SQL。

如果有一种工具,既能让你像写 SQL 一样思考,又能拥有 TypeScript 的极致类型安全,还几乎没有运行时开销,你会心动吗?

这,就是 Drizzle ORM


2. 概念拆解:如果你懂 SQL,你就懂 Drizzle

2.1 生活化类比:翻译机 vs. 智能纠错笔

为了理解 Drizzle 和传统 ORM 的区别,我们来打个比方:

  • 传统 ORM (Prisma/TypeORM) 就像一台“万能翻译机”: 你说:“我要一份宫保鸡丁”。翻译机可能会在厨房里一番操作,最后给你端出来一份菜。但你不知道它加了多少盐,是不是用了预制菜。它把厨房(数据库)完全屏蔽了,你虽然省心,但失去了控制权

  • Drizzle ORM 就像一支“智能语法纠错笔”: 你依然是主厨,你需要自己决定“先切肉,再热油”(编写查询逻辑)。但是,Drizzle 这支笔会在你写菜谱时实时告诉你:“嘿,这里少加了糖”或者“这种肉不能搭配这种酱汁”(类型检查)。

    核心理念:Drizzle 只有一层极薄的抽象。它不会隐藏 SQL,它只是用 TypeScript 的语法“拥抱”了 SQL。

2.2 核心工作流图解

如果无法查看图片,请想象以下层级结构:

  1. TypeScript Schema: 你用 TS 定义表结构(这是唯一的真理源头)。

  2. Drizzle Logic: 你调用 Drizzle 的方法(如 .select().from()),这些方法与标准 SQL 关键词一一对应。

  3. SQL Output: Drizzle 瞬间将其转换为纯净的 SQL 字符串,零多余逻辑

  4. Database: 执行查询。


3. 动手实战:三分钟上手 Drizzle

我们将构建一个极简的“用户-文章”系统。为了方便演示,我们使用 SQLite(但在 Postgres 或 MySQL 上体验几乎一致)。

第一步:安装依赖

Bash
 
npm install drizzle-orm better-sqlite3
npm install -D drizzle-kit @types/better-sqlite3

第二步:定义 Schema(真理之源)

在 Drizzle 中,你的 TS 代码就是数据库结构。

TypeScript
 
// schema.ts
import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';// 定义 Users 表
export const users = sqliteTable('users', {id: integer('id').primaryKey({ autoIncrement: true }),fullName: text('full_name'), // 映射到数据库的 'full_name' 字段isPro: integer('is_pro', { mode: 'boolean' }).default(false), // 自动处理 boolean 转换
});// 定义 Posts 表
export const posts = sqliteTable('posts', {id: integer('id').primaryKey({ autoIncrement: true }),title: text('title').notNull(),authorId: integer('author_id').references(() => users.id), // 外键关联
});

第三步:连接与写入 (Hello World)

TypeScript
 
// index.ts
import { drizzle } from 'drizzle-orm/better-sqlite3';
import Database from 'better-sqlite3';
import { users, posts } from './schema';
import { eq } from 'drizzle-orm';// 1. 初始化数据库连接
const sqlite = new Database('sqlite.db');
const db = drizzle(sqlite);async function main() {// 模拟迁移(实际项目中请使用 drizzle-kit push)sqlite.exec(`CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, full_name TEXT, is_pro INTEGER);CREATE TABLE IF NOT EXISTS posts (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, author_id INTEGER);`);console.log('Inserting data...');// 2. 插入数据 - 看起来非常像 SQL// INSERT INTO users (full_name, is_pro) VALUES ('Tony Stark', true) RETURNING *;const newUser = await db.insert(users).values({fullName: 'Tony Stark',isPro: true,}).returning(); // Drizzle 特性:直接返回插入后的数据console.log('Created User:', newUser);// 3. 关联插入await db.insert(posts).values({title: 'How to build an Iron Man suit',authorId: newUser[0].id,});
}main();

第四步:查询数据 (The "Why")

这就是 Drizzle 发光的地方。看这个查询,它既是 SQL 又是 TS。

TypeScript
 
// ... 上接 index.tsasync function queryData() {// SELECT * FROM users WHERE is_pro = 1;const proUsers = await db.select().from(users).where(eq(users.isPro, true)); // 使用 eq (equal) 运算符console.log('Pro Users:', proUsers);// 这里的 proUsers 类型被完美推导为:// { id: number; fullName: string | null; isPro: boolean | null }[]
}

解析:

  • db.select().from(users): 这不是什么黑魔法 API,这读起来就是 SQL。

  • eq(users.isPro, true): Drizzle 提供了完整的 SQL 运算符封装(eq, gt, like, and, or 等),确保你不会拼错 SQL 语法。


4. 进阶深潜:关系查询与最佳实践

痛点:Join 很难写?

在传统 ORM 中,关联查询(Relation)往往很隐晦。Drizzle 提供了两种模式:SQL 模式查询构建器模式 (Relational Queries)

模式一:SQL Like (硬核模式)

如果你擅长 SQL,想精确控制 Join:

TypeScript
 
const result = await db.select().from(users).leftJoin(posts, eq(users.id, posts.authorId)) // 显式 Left Join.where(eq(users.id, 1));

优势:你知道每一个 Join 是如何发生的,性能完全可控。

模式二:Drizzle Queries (Prisma 风格)

如果你想要类似 Prisma 的嵌套查询体验,Drizzle 也支持(且性能更好):

TypeScript
 
// 需要先在 schema 中定义 relations (略)
const result = await db.query.users.findMany({with: {posts: true // 自动把帖子带出来}
});

最佳实践建议

  1. 一定要用 Drizzle Kit: 不要手动写 SQL 建表。使用 drizzle-kit 命令行工具,它可以根据你的 schema.ts 自动生成 SQL 迁移文件(Migration files)。

    命令:npx drizzle-kit generate:sqlite

  2. Serverless 的首选: 由于 Drizzle 没有复杂的运行时对象映射,它的体积极小,且支持 Edge 环境(如 Cloudflare Workers)。如果你的业务在 Edge 上,Drizzle 几乎是唯一选择。

  3. 分离类型定义: 你可以利用 Drizzle 提供的工具从 schema 中推导出 TS 类型,用于前端传参校验:

    TypeScript
     
    import { type InferSelectModel } from 'drizzle-orm';
    type User = InferSelectModel<typeof users>; // 自动获得 User 类型

5. 总结与延伸

一句话总结: Drizzle ORM 不是为了替代 SQL,而是为了让 TypeScript 开发者能以类型安全零开销的方式,重新找回对数据库的掌控权

🚀 下一步 (Next Step)

立刻动手: 不要只看不练。请打开你的编辑器,创建一个新文件夹,试着把你自己项目中的一个复杂 SQL 查询(包含 Join 的那种),用 Drizzle 的 select().from().leftJoin() 语法重写一遍

你会惊讶地发现,原来在 TypeScript 里写 SQL 可以这么丝滑。

http://www.rkmt.cn/news/82216.html

相关文章:

  • 医用/低速/生物制药/血站/大容量/微量高速/血库/自动/低温冷冻/国产离心机厂家排名 2025:实力厂家、优质品牌及选购技巧 - 品牌推荐大师
  • 暂时修复龙芯+深度 25Lazarus安装lazreport的lr_dialogdesign.lpk后Lazarus程序无法启动的Bug(完善的处理方法)
  • windriver 第10章:PCI高级功能
  • 2025年北京合同审查工具服务推荐:合同审查工具哪个好? - mypinpai
  • 2025年高低温试验箱国内哪家好哪家性价比高?国产高低温试验箱制造商/生产商/供应商推荐 - 品牌推荐大师
  • 泰克示波器差分探头偏置校准:完整操作指南
  • 医用/低速/生物制药/血站/大容量/微量高速/国产离心机推荐品牌 TOP3:3大品牌及靠谱生产商盘点 - 品牌推荐大师
  • 剑指offer-49、把字符串转换成整数
  • 用户推荐的好评超声波分散机厂家有哪些/哪个品牌售后好 - 品牌推荐大师
  • 微信小程序,企业展示级小程序和餐饮小程序的开发成本
  • 国产/医用/低速/生物制药/血站/大容量/微量高速/血库/自动/低温冷冻/实验室离心机品牌推荐:2024年3大品牌及靠谱生产商汇总 - 品牌推荐大师
  • Nacos3.1启动配置
  • 2025年铝棒|铝管|铝板|铝型材|镁合金|铝合金锭|铝合金线材哪个牌子好售后好,十大知名供应商|优质厂家|靠谱厂家|源头厂家|行业领先企业推荐 - 品牌推荐大师1
  • 用户推荐的好评超声波切割机厂家有哪些/哪个品牌售后好 - 品牌推荐大师
  • 国产/医用/低速/生物制药/血站/大容量/微量高速/血库/自动/低温冷冻/实验室离心机实力厂家怎么挑?优质品牌推荐与科学选购建议 - 品牌推荐大师
  • Bilibili AI Summary - 让AI帮你快速总结B站视频
  • 2025年比较好的出海预制钢结构工程厂家推荐及选择参考 - 品牌宣传支持者
  • Oracle窗口函数
  • 软件推荐:Beyond.Compare.v3.3.13.18981 文本对比软件
  • 2025年杭州艺术学校TOP5推荐:杭州艺术学校靠谱的美术中 - 工业推荐榜
  • 2025年度靠谱的超级电容生产商TOP5权威推荐:看哪家售后 - myqiye
  • 2025年杭州会议室全彩屏本地服务商推荐:靠谱的本地会议室全 - 工业品牌热点
  • 2025-2026年恒温恒湿试验箱十大厂家盘点,涵盖高低温试验箱/冷热冲击试验箱供应商,带您快速了解行业内的优质品牌与核心优势 - 品牌推荐大师1
  • windriver 第8章:调试驱动程序
  • visual studio提示使用100缩放放比例重新启动
  • 2025年中国铝合金精密管材品牌制造商推荐:电子用铝合金精密 - myqiye
  • 2025年热门的大型排油烟机清洗厂家最新用户好评榜 - 行业平台推荐
  • 2025年高品质铝合金精密管材五大推荐制造商,看哪家售后优? - myqiye
  • 2025年五大中医智能装备定制厂家排行榜,中医智能装备正规厂 - mypinpai
  • 常熟国强和茂管材有限公司产品的市场认可度高吗?质量如何? - myqiye