发布时间:2026/7/15 21:02:28
MySQL 系统学习 第五阶段:企业级 MySQL 实战开发 第七章: TypeORM 高级查询
一、Repository 是什么定义RepositoryEntity 对应的数据访问对象负责操作数据库。简单理解Entity负责描述表结构。Repository负责操作表数据。关系Controller ↓ Service ↓ Repository ↓ Database例如User EntityEntity(user) export class User { }对应RepositoryUser获取 RepositoryInjectable() export class UserService { constructor( InjectRepository(User) private userRepository:RepositoryUser ){} }二、为什么企业项目不推荐 Service 直接写 SQL例如不推荐async findUser(){ return this.dataSource.query( SELECT * FROM user WHERE id1 ) }原因1. 数据库耦合以后MySQL换 PostgreSQL。大量 SQL 需要修改。2. 缺少类型提示SQL字符串。TypeScript不知道返回结构。3. 维护困难大型项目SQL散落。推荐Servicereturn this.userRepository.find();三、save() 新增和修改save()为什么既能新增又能修改因为 TypeORM 根据主键是否存在。判断。新增没有 idconst user{ username:Tom } repository.save(user);生成INSERT INTO user修改有 idconst user{ id:1, username:Jack } repository.save(user);生成UPDATE user SET usernameJack WHERE id1判断有主键 ↓ UPDATE 没有主键 ↓ INSERT四、find 查询最常用查询。查询全部find()SQLSELECT * FROM user;例如const users await userRepository.find();返回[ { id:1, username:Tom } ]五、select 查询指定字段企业不推荐find()查询全部。例如只需要用户名、年龄。find({ select:{ username:true, age:true } })SQLSELECT username,age FROM user;优点减少数据传输提高性能六、findOne 查询单条用于根据ID查询。findOne({ where:{ id:1 } })SQLSELECT * FROM user WHERE id1;常见登录findOne({ where:{ username:admin } })七、where 条件查询等于查询find({ where:{ status:1 } })SQLWHERE status1八、Like 模糊查询对应 SQLLIKE例如搜索用户名包含Tom。import {Like} from typeorm; find({ where:{ username:Like(%Tom%) } })SQLWHERE username LIKE %Tom%Like 和 区别精确匹配usernameTomLike模糊username LIKE %Tom%使用场景搜索框。例如后台用户搜索。九、In 多值查询SQLWHERE id IN(1,2,3)TypeORMfind({ where:{ id:In([1,2,3]) } })例如查询多个用户1 2 3为什么比多个 OR 好错误id1 OR id2 OR id3复杂。推荐id IN(1,2,3)十、Between 范围查询SQLBETWEEN例如年龄18-30。find({ where:{ age:Between(18,30) } })SQLWHERE age BETWEEN 18 AND 30应用时间范围金额范围年龄范围十一、排序 OrderSQLORDER BYTypeORMfind({ order:{ createTime:DESC } })SQLORDER BY create_time DESC常见最新数据DESC十二、分页查询 ⭐⭐⭐⭐⭐后台系统必备。例如用户列表100万用户。不能一次查询全部。分页第一页 1-20 第二页 21-40TypeORMfind({ skip:0, take:20 })对应 SQLLIMIT 20 OFFSET 0skip跳过多少条。例如第二页20条一页。skip:20take取多少条。take:20对应skip OFFSET take LIMIT十三、findAndCount()后台列表最常用。为什么因为列表需要数据总数量例如页面用户列表 第1页 共10000条普通查询两次SELECT * SELECT COUNT(*)TypeORMconst [ users, total ]await repository.findAndCount({ skip:0, take:20 });返回[ [ user1, user2 ], 10000 ]十四、update()直接更新。update( 1, { username:Jack } )SQLUPDATE user SET usernameJack WHERE id1特点不会查询原数据。优点快。缺点不会触发 Entity 生命周期。十五、save() 和 update() 区别save()流程查询对象 ↓ 保存 ↓ 更新适合复杂对象。update()直接SQL UPDATE。适合简单修改。例如修改状态推荐update( id, { status:0 } )十六、delete()物理删除。delete(id)SQLDELETE FROM user WHERE id1企业慎用。十七、softDelete()软删除。softDelete(id)SQLUPDATE user SET deleted_atNOW() WHERE id1企业推荐。十八、relations 关联查询例如订单查询用户find({ relations:{ user:true } })SQLJOIN。但是不要大量使用。原因关联太多SQL复杂。性能下降。十九、QueryBuilder ⭐⭐⭐⭐⭐复杂查询推荐。例如查询订单数量大于10的用户。find困难。QueryBuildercreateQueryBuilder(user) .leftJoin(user.orders,order) .where(order.count10) .getMany();优势1. 支持复杂SQLJOINGROUP BYHAVING子查询。2. 性能控制更强3. 企业复杂列表必用二十、企业用户列表分页搜索接口需求GET /users条件用户名搜索状态过滤分页排序参数{ keyword:tom, status:1, page:1, size:20 }查询findAndCount({ where:{ username:Like(%tom%), status:1 }, skip:0, take:20, order:{ createTime:DESC } })返回{ list:[ {} ], total:1000, page:1, size:20 }二十一、本章总结方法作用find查询列表findOne查询单条save新增/修改update更新delete删除softDelete软删除Like模糊搜索In多值查询Between范围查询skip跳过take数量findAndCount分页QueryBuilder复杂查询本章核心一句话简单查询使用 Repository复杂业务查询使用 QueryBuilder企业列表接口基本离不开分页 条件 排序。

相关新闻

CameraService 详解二(open camera)
2026/7/15 21:02:28

CameraService 详解二(open camera)

前面介绍了camera service的初始化过程,这里接着介绍open camera在camera service的流程。前面有介绍camera app的常用接口,通过调用api2提供的opencamera接口调用到cameraservice来打开一个指定逻辑camera id的camera对象,在camera service再…

阅读更多
Python网络CSV直读实战:HTTP控制、编码压缩与企业级健壮性
2026/7/15 21:02:28

Python网络CSV直读实战:HTTP控制、编码压缩与企业级健壮性

1. 项目概述:为什么“直接读取网络CSV”是每个数据从业者绕不开的基本功你有没有遇到过这样的场景:早上刚收到运营同事发来的链接,说“最新用户行为数据在这儿,快跑个分析”;或者在复现某篇论文时,作者只给…

阅读更多
C语言实战:手搓进制转换器,实现十六进制与十进制的灵活互转
2026/7/15 21:02:28

C语言实战:手搓进制转换器,实现十六进制与十进制的灵活互转

1. 为什么需要手动实现进制转换?在嵌入式开发和底层编程中,我们经常需要直接操作硬件寄存器或处理内存数据,这些场景下十六进制表示尤为常见。虽然C标准库提供了strtol和printf等现成函数,但手动实现转换算法能带来三个关键好处&a…

阅读更多
TI CC2564C双模蓝牙控制器开发实战:从硬件设计到软件调优
2026/7/15 22:02:28

TI CC2564C双模蓝牙控制器开发实战:从硬件设计到软件调优

1. 项目概述与核心价值在嵌入式无线通信领域,蓝牙技术早已不是新鲜事物,但如何为你的产品选一颗“好芯”,让它既能稳定连接,又能省电耐用,这中间的学问可就大了。我最近在为一个工业传感器网关项目做硬件选型&#xff…

阅读更多
网络安全“兵器谱”TOP30实战榜 · 附薪资进阶路线图
2026/7/15 22:02:28

网络安全“兵器谱”TOP30实战榜 · 附薪资进阶路线图

30款顶级攻防工具深度解读 三阶段晋级路线 2026薪资对标信息密度极高,建议立即收藏反复研读。📌 开篇:你的“武器”决定你能走多远在网络安全这个战场上,工具就是你的拳头。只会用Nessus跑个扫描报告的人,和能用手工…

阅读更多
【1970-2025】中国农田生产潜力|GAEZ模型|多分辨率栅格
2026/7/15 22:02:28

【1970-2025】中国农田生产潜力|GAEZ模型|多分辨率栅格

🔍 数据简介 本次分享1970-2025年中国农田生产潜力栅格数据集,基于GAEZ模型综合光温水土等要素估算,全国全覆盖、多年份连续,适配粮食安全、耕地承载力与气候变化影响研究,多分辨率可选、直接可用。 📦 数据…

阅读更多
亲手挖出第一个SQL注入漏洞,其实就这5步(第六弹·漏洞入门篇)
2026/7/15 22:02:28

亲手挖出第一个SQL注入漏洞,其实就这5步(第六弹·漏洞入门篇)

你离“挖到第一个漏洞”可能只差15分钟。 全文约1900字,阅读约6分钟。今天带你从零到手,亲自撕开一个SQL注入漏洞。一、为什么SQL注入是“漏洞之王”?先给你看一组数据:OWASP Top 10(2021版) 中&#xff0c…

阅读更多
【AI技术_工具_资讯】用 Python 写一个「自愈式」定时任务:失败自动重试 + 飞书告警
2026/7/15 22:02:28

【AI技术_工具_资讯】用 Python 写一个「自愈式」定时任务:失败自动重试 + 飞书告警

前言 做过运维或自动化的人都有过这样的经历:写好了一个定时爬虫,凌晨两点它静悄悄地挂了,报错日志淹没在系统消息里。你一觉醒来发现当天数据全空了,只能手忙脚乱地手动补跑。 问题不在「写脚本」,而在「让脚本可靠运…

阅读更多
ChatGPT目标拆解必须跨过的3道专业门槛,错过将导致6–8周无效训练(附自查量表)
2026/7/15 21:02:28

ChatGPT目标拆解必须跨过的3道专业门槛,错过将导致6–8周无效训练(附自查量表)

更多请点击: https://codechina.net 第一章:ChatGPT目标拆解的认知重构与底层逻辑 传统AI应用常将“生成高质量回答”视为单一黑箱目标,而ChatGPT的工程实践揭示:真正可落地的智能系统必须完成目标的结构性拆解——从用户意图识别…

阅读更多
智慧树刷课插件:5分钟实现自动化学习的智能助手
2026/7/14 6:43:28

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

阅读更多
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案
2026/7/14 11:30:33

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

阅读更多
办公自动化实战:5个免费工具构建合同处理流水线
2026/7/14 19:02:31

办公自动化实战:5个免费工具构建合同处理流水线

1. 这不是“又一个工具包”,而是一套经过237次真实场景验证的效率组合拳“2026.04.28实用教程工具分享”这个标题乍看平平无奇,像极了你邮箱里被自动归入“促销/订阅”文件夹的那类通知——但如果你真把它当普通更新忽略,接下来半年里&#x…

阅读更多
YOLO11 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点
2026/7/15 0:02:23

YOLO11 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

前言 本文介绍了面向红外小目标检测的时空特征融合模块——STFFM,用于增强复杂背景下目标与噪声、杂波的区分能力。该方法通过拼接空间特征与时间/运动特征,并结合通道注意力、空间注意力和残差增强机制,实现对关键语义通道与疑似目标区域的…

阅读更多
YOLO26 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点
2026/7/15 0:02:24

YOLO26 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

前言 本文介绍了面向复杂背景小目标检测的时空特征融合模块——STFFM。该模块通过空间分支与时间/运动分支的特征拼接,引入通道注意力和空间注意力对融合特征进行自适应筛选,并结合残差增强与通道压缩,突出目标区域、抑制背景噪声。我们将 S…

阅读更多
AI框架决定企业AI能走多远
2026/7/15 0:02:24

AI框架决定企业AI能走多远

企业AI建设的第一性原理 企业搞AI,最关键的决定是什么?不是选哪家大模型,不是先做哪个场景,不是招多少AI人才——而是选哪个AI开发框架。 为什么?因为框架决定了企业AI能力的"天花板"。选对了框架&#xff0…

阅读更多
基于Dify与DeepSeek构建私有知识库问答系统实战指南
2026/7/13 21:11:56

基于Dify与DeepSeek构建私有知识库问答系统实战指南

在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…

阅读更多
FAE放射组学分析工具:医学影像特征探索的完整解决方案
2026/7/14 16:39:14

FAE放射组学分析工具:医学影像特征探索的完整解决方案

FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE 你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…

阅读更多
DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!
2026/7/14 16:39:14

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖! 【免费下载链接】DesktopNaotu 桌面版脑图 (百度脑图离线版,思维导图) 跨平台支持 Windows/Linux/Mac OS. (A cross-platform multilingual Mind Map Tool) 项目地址:…

阅读更多