首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

TypeORM -仅更新提供的值,其余值保持不变

基础概念

TypeORM 是一个用于 Node.js 的 ORM(对象关系映射)库,它允许开发者以面向对象的方式操作数据库。TypeORM 支持多种数据库系统,如 MySQL、PostgreSQL、SQLite 等。通过 TypeORM,开发者可以避免直接编写 SQL 查询,从而提高开发效率和代码的可维护性。

相关优势

  1. 类型安全:TypeORM 提供了类型安全的查询构建器,可以在编译时捕获错误。
  2. 跨数据库支持:支持多种数据库系统,易于切换和维护。
  3. 实体关系映射:可以方便地定义和管理实体之间的关系。
  4. 迁移工具:内置迁移工具,方便数据库结构的版本控制和部署。
  5. 集成测试:提供了一套测试工具,方便进行集成测试。

类型

TypeORM 支持多种类型的实体和关系,包括但不限于:

  • 基本类型(如 String、Number、Boolean 等)
  • 枚举类型
  • 关联关系(如一对一、一对多、多对多)

应用场景

TypeORM 适用于各种需要与数据库交互的应用场景,包括但不限于:

  • Web 应用
  • 移动应用后端
  • 微服务架构
  • 数据分析平台

仅更新提供的值,其余值保持不变

在 TypeORM 中,如果你只想更新实体中的某些字段,而保持其他字段不变,可以使用 update 方法并结合 Pick 工具类型来实现。

示例代码

假设我们有一个 User 实体:

代码语言:txt
复制
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  email: string;

  @Column()
  age: number;
}

现在我们只想更新用户的 nameage 字段,可以这样做:

代码语言:txt
复制
import { getRepository } from 'typeorm';
import { User } from './entity/User';
import { Pick } from 'typescript';

async function updateUser(userId: number, updates: Partial<User>) {
  const userRepository = getRepository(User);
  const user = await userRepository.findOne(userId);

  if (!user) {
    throw new Error('User not found');
  }

  const updateFields = Object.keys(updates).reduce((acc, key) => {
    acc[key] = (updates as Pick<User, typeof key>)[key];
    return acc;
  }, {} as Partial<User>);

  await userRepository.update(userId, updateFields);
}

在这个示例中,我们使用了 Partial<User> 来表示可以更新的部分字段,并通过 Pick 工具类型来提取这些字段。这样可以确保只有提供的字段会被更新,而其他字段保持不变。

参考链接

通过这种方式,你可以有效地管理数据库更新操作,避免不必要的字段修改,从而提高数据的一致性和安全性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

有了 Prisma,就别用 TypeORM

整体对比​ 更新频率&下载量​ TypeORM 距离上次更新已经几近半年了(下图来源 24 年 1 月 1 日,没想到年初竟然还复活), 从下载量以及 star 数来看,如今 Prisma 已经超过...再结合上文提到更新频率,哦,那没事了。...synchronize: true 导致数据丢失​ synchronize 表示数据库结构是否和代码保持同步,官方提及到请不要在生产环境中使用,但在开发阶段这也并不是一个很好做法。...因此针对数据库更新操作最正确做法是使用迁移(migrate)。 接入成本​ 在 Nest 项目中,Prisma 接入成本远比 TypeORM容易许多。...而在 Prisma 中,提供了 专门用于聚合方法 aggregate,可以特别轻松实现聚合函数查询。

1.7K22
  • node 数据库ORM框架TypeORM入门

    目标是保持支持最新Javascript特性来帮助开发各种用到数据库应用 – 不管是轻应用还是企业级。...到javascript对象属性 提供一对一,多对一,一对多,多对多关系处理 还有更多 … 不同于其他JavaScript ORM,TypeORM使用是数据映射模式,可以很轻松创建出松耦合、可伸缩...把Photo实体加到数据连接实体列表中,所有需要在这个连接下使用实体都必须加到这个列表中。 autoSchemaSync选项可以在应用启动时确保你实体和数据库保持同步。...cascadeUpdate: true, // 在更新Album时,会自动更新相册里Photo cascadeRemove: true // 在移除Album时,...cascadeUpdate: true, // 在更新Album时,会自动更新相册里Photo cascadeRemove: true // 在移除Album时,

    8.8K20

    基于 Nest.js+TypeORM 实战,项目已开源,推荐!

    考拉 Nest.js 系列文章(系列会持续更新): 学完这篇 Nest.js 实战,还没入门来锤我!...接下来探索一下如何用TypeORM创建一对一、一对多和多对多关系。 一对一 一对一指是表中一条数据关联另外一个表中另一条数据。例如用户表和用户档案表, 一个用户只有一份档案。...,publishTime是文章状态为发布publish时才会添加相应, 这些字段都是在新增/更新文章时单独处理。...,实现功能是:根据获取当前用户角色与当前正在处理路径所需实际角色进行比较,判断是否满足条件。...介绍三种 TypeORM提供多表关联查询方式 Find选项 Query Builder 原生SQL find 选项 所有存储库和管理器查找方法都接受特殊选项,您可以使用这些选项查询所需数据: 查询所有文章

    10.9K41

    使用 NextJS 和 TailwindCSS 重构我个人博客

    而文章内容写完之后是通常不变,所以可以先将页面静态存储在服务器上,这样就可以大大减小数据库压力。 getStaticProps 在构建时请求数据。...获取文章详情 export async function getStaticProps({ params }) { // 如果页面的路由是 /posts/1, 这 params.id 就是1...Prisma 支持 Mysql、Postgresql 和 Sqlite, 访问官网我们可以很容易上手,也可以快速从老项目接入 虽然 Prisma 和 TypeORM 解决了类似的问题,但它们工作方式却大相径庭...与 TypeORM 对比 TypeORM 是一种传统 ORM,它将表映射到模型类。这些模型类可用于生成 SQL 迁移。然后,模型类实例在运行时为应用程序 CRUD 查询提供一个接口。...Prisma CRUD 查询由 Prisma Client 提供,这是一个针对 Node.js 和 TypeScript 轻量级且完全类型安全数据库客户端。

    2.6K20

    混搭 TypeScript + GraphQL + DI + Decorator 风格写 Node.js 应用

    Mapper 型,允许将业务规则绑定到实体。...); **简单来讲,这样好处在于解耦 Model 和 Controller,同时保持业务逻辑独立性(从而带来更好扩展性、更方便单元测试等),抽象出来 Service 可以被多个 Controller...服务器,而真正进行分页操作还是 Service 层,内部利用 ORM 提供方法;在TypeORM分页功能实现,可以参考一下官方 find 选项完整示例: userRepository.find...**模式),这个 Article 类就是 ORM 中实体,定义也非常简单: // src/entity/article.ts import { Entity, PrimaryGeneratedColumn...前端技术发展迭代相对来说迭代比较快,这是好事,能让你用新技术做得更少、收获地更多;当然不可否认这对前端同学也是挑战,需要你都保持不断学习心态,去及时补充这些新知识。学无止境,与君共勉。

    3.3K20

    使用 NextJS 和 TailwindCSS 重构我博客

    而文章内容写完之后是通常不变,所以可以先将页面静态存储在服务器上,这样就可以大大减小数据库压力。 getStaticProps 在构建时请求数据。...获取文章详情 export async function getStaticProps({ params }) { // 如果页面的路由是 /posts/1, 这 params.id 就是1...Prisma 支持 Mysql、Postgresql 和 Sqlite, 访问官网我们可以很容易上手,也可以快速从老项目接入 虽然 Prisma 和 TypeORM 解决了类似的问题,但它们工作方式却大相径庭...与 TypeORM 对比 TypeORM 是一种传统 ORM,它将表映射到模型类。这些模型类可用于生成 SQL 迁移。然后,模型类实例在运行时为应用程序 CRUD 查询提供一个接口。...Prisma CRUD 查询由 Prisma Client 提供,这是一个针对 Node.js 和 TypeScript 轻量级且完全类型安全数据库客户端。

    2.3K20

    如何使用 NestJs、PostgreSQL、Redis 构建基于用户设备授权验证

    由于设备连接增加,只有受信任设备才能访问和与应用程序资源进行交互,这一点至关重要。本文将解决一个现实问题,并为开发人员提供实用见解,以增强应用程序安全性。...它为在线银行或金融交易等活动增加了额外安全层。 它可以帮助防止跨站请求伪造(CSRF)攻击。 它保护用户隐私,从而减少个人信息潜在曝光。 我们将使用NestJs和Redis来进行演示。...typeorm @nestjs/typeorm :由于我们使用PostgreSQL,我们需要它作为我们对象关系模型。 运行我们服务器 运行下面的命令来启动我们服务器。...更新app.module.ts 此外,我们需要更新我们应用程序应用模块,以整合我们认证模块和其他在应用程序中所需模块。...这只是为了演示已经认证或未认证设备尝试进行 GET 请求时情况。 更新身份验证控制器 通过导入身份验证守卫并创建一个路由 /hello 来更新auth控制器,用于 signUp() 服务函数。

    37420

    为什么SwiftUI视图使用结构体?

    在UIKit中,每个视图都来自一个名为UIView类,该类具有许多属性和方法:背景色,确定放置方式约束,用于将其内容呈现到其中图层等等。...在SwiftUI中,我们所有的视图都是简单结构体,几乎可以自由创建。想想看:如果您制作一个包含一个整数结构体,则结构体整个大小就是:一个整数。没有其他。...没有从父类,祖父母类或曾祖父母类等继承余值——它们完全包含您可以看到内容,仅此而已。...您会发现,类能够自由更改,这可能导致代码混乱——SwiftUI如何知道什么更改了并需要更新UI?...相比之下,AppleUIView文档列出了UIView拥有的约200种属性和方法,无论是否需要它们,所有这些属性和方法都将传递给子类。

    3.2K10

    狼叔直播 Reaction《学习指北:Node.js 2022 全解析》

    读完需要6分钟,速读需3分钟 这是前端食堂第 100 篇原创 食用指南 本文是狼叔在 2 月 16 日在掘金直播《学习指北:Node.js 2022 全解析》 Reaction,狼叔直播干货很多...从 Node.js 源码更新内容来看,Node.js 正在健康平稳发展、从可用到好用在转变,在易用性上有很大提升。性能牌打完了,开始打“用户体验”牌。...2.版本更新变化较大,升级比较积极 去年主要是使用 Node12,2021 年 Node14 占比将近一半,更新还是较快。...https://github.com/typicode/xv[23] uvu uvu[24] 源码学习。...: https://github.com/typeorm/typeorm [10] midway: https://github.com/midwayjs/midway [11] daruk: https

    90420

    2024年Node.js精选:50款工具库集锦,项目开发轻松上手(三)

    实时连接还需采取坚固安全措施,防止未授权访问和数据泄露。此外,由于异步特性,调试实时互动可能会带来挑战。...此外,熟练使用丰富模式语言需要一定学习投入。...https://www.npmjs.com/package/joi 25、Prettier:让代码风格统一神器 在软件开发中,保持一致代码风格对于提高代码可读性和可维护性极为重要。...注意事项 虽然Prettier在确保代码风格一致性方面提供了显著便利,但有态度本质在某些情况下可能限制了特定格式化选择。此外,自动化修改可能需要仔细审核,以避免意外代码变更。...,但定制选项可能会增加设置复杂性。

    25010

    使用嵌入式SQL(五)

    如果InterSystems SQL将SQLCODE设置为负整数(表示错误),则设置%msg。如果SQLCODE设置为0或100,则%msg变量与其先前保持不变。...经过多行操作之后,%ROWID变量包含系统分配最后一条插入,更新或删除记录RowID(对象ID)。如果未插入,更新或删除任何记录,则%ROWID变量值将保持不变。...可更新游标是其中顶部FROM子句包含一个元素(单个表名或可更新视图名)游标。如果游标不可更新,则%ROWID保持不变。...具有DISTINCT关键字或GROUP BY子句基于游标的SELECT不会设置%ROWID。 %ROWID与其先前(如果有)保持不变。...完成简单SELECT语句后,%ROWID保持不变。在Dynamic SQL中,相应%ROWID属性返回插入,更新或删除最后一条记录RowID

    2.6K20

    精读《Prisma 使用》

    概述 Prisma 提供了大量工具,包括 Prisma Schema、Prisma Client、Prisma Migrate、Prisma CLI、Prisma Studio 等,其中最核心两个是...@unique 设置字段唯一。 @relation 设置关联,上面已经提到过了。 @map 设置映射,上面也提到过了。 @updatedAt 修饰字段用来存储上次更新时间,一般是数据库自带能力。...Prisma Schema 好处 其实从语法上,Prisma Schema 与 Typeorm 基于 Class + 装饰器拓展几乎可以等价转换,但 Prisma Schema 在实际使用中有一个很不错优势...至于 Prisma Client API 设计其实并没有特别突出之处,无论与 sequelize 还是 typeorm API 设计相比,都没有太大优化,只是风格不同。...讨论地址是:精读《Prisma 使用》· Issue #362 · dt-fe/weekly 版权声明:自由转载-非商用-非衍生-保持署名(创意共享 3.0 许可证)

    3.6K30

    NestJS折腾记- (0) 开胃菜, TypeORM 连接远程MySQL(ssh tunnel)及Linux信息过滤裁切基础

    适合尝尝鲜,目前有1W+ star, 上正式线我觉得等version 6会稳定些, 这个系列我会以一个真实项目的开发进展作为基础,一边爬坑一边水文; 后台大佬用PHP,我打算用空闲时间拿nestjs重写我们后台管理系统提供那部分接口.../app.service'; // 用户模块,注册,登录,更新个人信息 import { UsersModule } from '....'; // entity装饰器提供一个options可以配置关联表名,引擎等等,具体看她interface // 不提供name的话,,类名就是表名了 @Entity({ name: 'sx_admin..., { length: 255 }) admin_passwd: string; // 创建时间 @Column('timestamp') created_at: number; // 更新时间...若是ssh没有配置定时发送信号,一段时间后会自动停止会话(packet_write_wait:); 此时要么去配置,要么我们改写下alias , 用-o ServerAliveInterval=60 来保持连接连接这

    2K30

    findIndex()方法

    大家好,又见面了,我是你们朋友全栈君。 findIndex() 方法返回数组中通过测试第一个元素索引(作为函数提供)。...findIndex() 方法对数组中存在每个元素执行一次函数: 如果找到函数返回 true 数组元素,则 findIndex() 返回该数组元素索引(并且不检查剩余值) 否则返回 -1 注释...:findIndex() 不会为没有数组元素执行函数。...获取数组中第一个等于或大于 18 元素索引: var ages = [3, 10, 18, 20]; function checkAdult(age) { return age >...本站提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    25830
    领券