终于有自己的 ORM 框架了!吊打 Hibernate/Mybatis,并且开源!!!

废话不多说,先看结果
每秒操作次数
横坐标表示每次从数据库中查询到的数据对象的数量。
纵坐标表示每秒操作次数。

每次操作耗时
横坐标表示每次从数据库中查询到的数据对象的数量。
纵坐标表示每次操作耗时(微秒)。

如果你厌倦了 Hibernate 的隐式行为与复杂映射、以及 MyBatis 手写 SQL 的低复用与易碎性,是时候试试 Jimmer 了——一款面向现代应用场景的 Java/Kotlin ORM:类型安全、高性能、GraphQL 风格对象图抓取、不可变实体与优秀的 Spring Boot 集成。想快速上手?直接看官方 Quickstart 与文档:
官网与文档:Jimmer 官方站点
Quickstart 教程:Jimmer Quickstart

1 Jimmer 是什么?
Jimmer 是 JVM 中最先进的 ORM,同时面向 Java 和 Kotlin
ORM 核心
所有读写相关 API,都为操作任意复杂的数据结构而设计,而非为操作简单对象而设计
实体对象可以是残缺的的,即使任何读写操作都可以只针对对象的部分属性,而非所有属性
直接读写任意复杂的数据结构,数据结构的层次和形状由具体业务场景随意指定,无需事先统一固化设计
为批量操作而设计
查询功能没有
N + 1
问题,即使实体对象具备用户自定义的复杂的业务计算属性,仍然如此充分发挥底层数据批量修改的能力,被保存数据结构的每一层对象都采用 JDBC 批量操作
充分发挥底层数据库的 upsert 能力,尽可能避免复杂批量修改中夹带 select 语句,如果无法做到,清晰地告诉用户为什么
即使执行复杂的批量修改,对常见的数据库约束错误进行细致的调查的翻译,业务项目亲自处理数据库约束异常成为历史
强类型 DSL 支持
强类型 DSL 和使用数据库特有能力不冲突,你仍然可以使用特定数据库产品的特有功能
为任意复杂的多表动态查询而设计,一改业内绝大部分动态查询方案都是针对单表操作的现状
智能优化生成的 SQL
不仅为了生成 SQL,更是为了超越 Native SQL,提供更便捷的能力
以此 ORM 为基础打造了一套综合性方案解决方案,包括
DTO 语言,以极其廉价的成本解决多数情况下业务模型和数据模型不完全一致的问题
更全面更强大的缓存机制,以及高度自动化的缓存一致性
更强大客户端文档和代码生成能力,包括 Jimmer 独创的远程异常
快速创建 GraphQL 服务
跨越微服务的远程实体关联
2. 一个新的 ORM,为什么?
现有痛点
当前技术生态下,访问关系型数据库技术体系存在很大缺陷,请看下图。

以 JPA 为代表的静态语言 ORM
以为 ActiveRecord (Ruby) 为代表的动态语言 ORM
以 MyBatis 为代表的轻量级 SQL Builder/Mapper
根本原因
上文中,我们阐述了关系型数据库领域的三种常见方案,但无论如何选择,我们都无法兼顾便捷性、灵活性和代码安全性。为什么会导致这样呢?
信息
就 JVM 生态而言,POJO 是导致这个问题的根本原因。
POJO*(也可以叫结构体)*缺乏必要的灵活性和表达力,却几乎被所有的 JVM 框架作为数据模型和核心,严重限制了 JVM 生态的技术创新。
因此,在 Jimmer 中,ORM 实体对象并非 POJO。而是另外一种独特的万能数据对象*(后文会介绍)*,这种独特的实体对象撑起了 Jimmer 所有上层重大的变革,是整个框架的基石。
备注
事实上,Jimmer 实体对象不仅可以应用在 ORM 领域,它几乎可以用在任何以结构化数据维护为目的的场景,并提升各种技术栈的表达力。
目前,Jimmer 实体仅在关系型数据库访问领域发挥出作用,只是因为精力不够所致。
3. 完整的功能

4. 结语
一个好的技术框架的发展离不开一个好的社区土壤的培养和浇灌,各位如果还没有了解过 Jimmer, 欢迎去体验和尝试,保证一定会给到你惊喜。
官网与文档:Jimmer 官方站点
Quickstart 教程:Jimmer Quickstart
后续会连载关于 jimmer 的详细介绍文章,也欢迎提出指正建议
评论