首页
/ Prisma ORM 6.2.0版本发布:JSON/枚举支持与ULID特性解析

Prisma ORM 6.2.0版本发布:JSON/枚举支持与ULID特性解析

2025-05-31 23:36:45作者:劳婵绚Shirley

Prisma是一个现代化的TypeScript/JavaScript ORM工具,它通过类型安全的API简化了数据库操作。在最新发布的6.2.0版本中,Prisma带来了多项重要更新,包括对SQLite中JSON和枚举字段的支持、ULID值的自动生成、新的批量更新返回功能等。

核心特性解析

字段排除功能正式发布

Prisma 6.2.0将omit功能从预览状态提升为正式可用。这一特性解决了开发者长期以来的需求:在查询结果中排除特定字段。现在,开发者可以无需配置预览特性即可使用这一功能。

字段排除可以在两个层面实现:

  1. 查询级别排除:在单个查询中指定要排除的字段
const result = await prisma.user.findMany({
  omit: {
    password: true,
  },
});
  1. 全局级别排除:在Prisma客户端初始化时配置,适用于所有相关查询
const prisma = new PrismaClient({
  omit: {
    user: {
      password: true
    }
  }
})

这一特性特别适用于敏感数据处理场景,如密码字段的自动排除。

SQLite增强:JSON与枚举支持

6.2.0版本为SQLite数据库添加了期待已久的JSON和枚举字段支持。开发者现在可以在SQLite中使用这些数据类型,与其他数据库保持一致的开发体验。

示例模型定义:

model User {
  id   Int    @id @default(autoincrement())
  name String
  role Role  
  data Json
}

enum Role {
  Customer
  Admin 
}

JSON字段支持复杂数据结构的存储,而枚举类型则确保了字段值的类型安全。

ULID支持

Prisma现在支持自动生成ULID(Universally Unique Lexicographically Sortable Identifier)值。ULID是26字符的字母数字字符串,具有可排序特性,适合作为分布式系统中的唯一标识符。

使用方式简单直观:

model User {
  id String @id @default(ulid())  
}

新增updateManyAndReturn方法

6.2.0版本引入了updateManyAndReturn方法,解决了批量更新时无法获取更新后记录的问题。与仅返回受影响记录数的updateMany不同,新方法会返回更新后的完整记录。

示例用法:

const users = await prisma.user.updateManyAndReturn({
  where: { email: { contains: 'prisma.io' } },
  data: { role: 'ADMIN' }
})

需要注意的是,此功能目前仅支持PostgreSQL、CockroachDB和SQLite数据库。

技术实现细节

SQLite的JSON实现

Prisma在SQLite中实现的JSON支持实际上是将JSON数据存储为TEXT类型,并在应用层进行序列化和反序列化。这种实现方式虽然不如专门的JSON类型高效,但提供了与其他数据库一致的使用体验。

ULID生成机制

Prisma的ULID实现遵循ULID规范,生成的ID具有以下特点:

  • 前10字符基于时间戳(毫秒精度)
  • 后16字符基于随机数
  • 按字典序可排序
  • 不区分大小写

性能考量

updateManyAndReturn方法虽然提供了便利,但在处理大量数据时需要注意性能影响。Prisma团队建议在需要返回记录的场合使用此方法,而在仅需计数时继续使用传统的updateMany

升级建议

对于现有项目,升级到6.2.0版本相对简单:

  1. 更新package.json中的Prisma依赖版本
  2. 如果之前使用了omitApi预览特性,可以移除相关配置
  3. 对于SQLite项目,现在可以安全地添加JSON和枚举字段
  4. 考虑在适当场景替换现有的UUID或cuid2为ULID

总结

Prisma 6.2.0版本通过多项实用特性的添加和优化,进一步提升了开发体验。特别是SQLite功能的增强,使得这一轻量级数据库在Prisma生态中获得更广泛的应用场景。ULID支持和新的批量操作方法则为现代应用开发提供了更多选择。

这些更新体现了Prisma团队对开发者需求的持续关注,也展示了该项目在Node.js ORM领域的领先地位。随着功能的不断完善,Prisma正成为构建类型安全、高效数据库层的首选解决方案。

登录后查看全文
热门项目推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
176
260
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
854
505
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
182
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
254
295
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
331
1.08 K
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
397
370
note-gennote-gen
一款跨平台的 Markdown AI 笔记软件,致力于使用 AI 建立记录和写作的桥梁。
TSX
83
4
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
kernelkernel
deepin linux kernel
C
21
5