• 不限语言,你觉得最好用的框架和 ORM 是什么?
  • 发布于 1天前
  • 44 热度
    13 评论
如题,不限语言,你觉得最好用的框架和 ORM 是什么?欢迎交流你的想法!
用户评论
  • 随风流浪
  • 自己对 mybais-plus 进行了二次封装,感觉挺好用的。贴两个例子
    @Override
    public PageVO<AiChatVO> queryChatPage(AiChatReq aiChatReq) {
    SysCacheUserDto adminUserInfo = getAdminUserInfo();
    return select(aiChatMapper)
    .where()
    .eq(AiChat::getUserId,adminUserInfo.getId())
    .orderDesc(AiChat::getCreateTime)
    .page(aiChatReq, AiChatVO.class);
    }
    
    @Override
    public Map<Long,ChatRecordMsgJsonDto> queryMsg(List<Long> ids) {
    if (CollectionUtils.isEmpty(ids)){
    return Map.of();
    }
    return where(aiChatRecordMsgMapper)
    .in(BaseDO::getId, ids)
    .hasMap(
    BaseDO::getId,
    v-> JSONObject.parseObject(v.getMsgDetail().toString(),ChatRecordMsgJsonDto.class)
    );

  • 2025/8/20 9:12:00 [ 0 ] [ 0 ] 回复
  • 枪蹦狗友
  • c# 的 entity framework 啊,最好用没有之一
    linq 语法、状态跟踪等等
    举个简单的例子,就这个简单的例子很多语言都实现的很丑
    var users = dbContext.Users
    .Where(u => u.Age > 18)
    .OrderBy(u => u.Name)
    .ToList();
    users.First().Name = "zhangsan";
    dbContext.Save();

  • 2025/8/20 9:07:00 [ 0 ] [ 0 ] 回复
  • Zappos
  • 我给 TypeScript ORM 排个名:
    Drizzle > Kysely > Orchid ORM >> MikroORM > Prisma > TypeORM

    Drizzle 、Kysely 已经是版本答案了:没有太花哨的功能,只需要写 SQL ,ORM | SQL Builder 将给你类型安全的查询结果。
    Kysely 只是一个 SQL Builder ,类型安全方面做得也是最好的; Drizzle 在 SQL Builder 的基础上加了表结构定义,能满足表迁移的许多工作,因此把 Drizzle 排在 Kysely 前面。
    Orchid ORM 非常小众,除了 SQL Builder 和表结构定义还加了许多 EntityManager | Repository 的糖,但主要还是以 SQL Builder 为主。

    再之后就是传统的围绕 Entity 的 ORM 。这一类 ORM 都内置了丰富的 EntityManager | Repository 的功能,SQL Builder 功能只是作为兜底方案。这类 ORM 的通病是 Repository API 无法满足所有的 SQL 写法,到头来还是得写 SQL 。


    这其中功能做的最全的是 MikroORM ,隐式事务、实体事件监听、过滤器、Migrations 、Seeding ,也内置了 Knex 作为 SQL Builder 。

    Prisma 的主要槽点是:使用自己发明的 Prisma Schema 用于定义表结构、使用自己发明的 Repository API 用于读写数据库,后果是增加了学习成本,隐藏了许多细节碰到问题了不太容易排查;


    TypeORM 毫无疑问垫底,连最基础的空安全和类型安全都不好。隔壁 MikroORM 6.5 已经在用 `defineEntity` 尝试摆脱了对 Decorators 的依赖。TypeORM 前两年都没怎么维护,今年有了新的团队接手才开始处理积攒了几年的 issue 。
  • 2025/8/19 12:32:00 [ 0 ] [ 0 ] 回复
  • Cactus
  • 夸 Laravel 还行,但是夸 Prisma 的真是没预料到,这辈子都不想再用:
    根本不能算模型定义的模型
    migration 根本没法用
    简单的保存是有了 id 还用要 id 执行一遍查询,然后再更新,然后在获取更新后的结果
  • 2025/8/19 12:26:00 [ 0 ] [ 0 ] 回复
  • Pigeon
  • Prisma ,用起来很自然,心智负担很小。
    事务直接放数组里面:
    const [posts, totalPosts] = await prisma.$transaction([
    prisma.post.findMany({ where: { title: { contains: 'prisma' } } }),
    prisma.post.count(),
    ])
  • 2025/8/19 12:08:00 [ 0 ] [ 0 ] 回复