在过去的几个月中,Jimmer(一个面向Java和Kolin的革命性ORM)和首批用户高度互动,新加了很多功能,解决了用户们在实际项目中遇到的各种难题。
本文写作目的
现在,Jimmer文档的首页以图文并貌的方式书写了通俗版的首页。但图片、gif和视频体积不小,git pages访问速度非常慢,为了方便所有人快速获取首页资料,编写本文作为镜像。
Jimmer提供了很多明显区别于传统方案的能力。其中最重要的能力,就是开发人员不再面对零散的实体对象和实体关系,而是以任意复杂的数据结构为操作目标。
把任意复杂的数据结构
作为一个整体进行操作,这是Jimmer的核心,也是Jimmer革命性的所在。本文以此为中心,涉及4个议题。
- 表达任意复杂的数据结构
- 查询任意复杂的数据结构
- 保存任意复杂的数据结构
- 缓存任意复杂的数据结构
一、表达任意复杂的数据结构
这幅图示范了一个全局的关系型数据库模型和三个业务视角。
每个业务视角观察全局关系型数据库模型中的某个区域。
-
该区域的形状千变万化,你可以自由决定它是否包含某些实体、关联甚至属性。
这里所说的属性,不仅包括上图已展示的数据库映射属性,还包括和数据库结构无关的业务性属性。
-
该区域的形状无需事先设计,随时无成本定义,无限灵活,随着需求的变化而变化。
当然,作为面向Java和Kotlin的解决方案,Jimmer的实体类型必然是强类型的,但,同时也是动态的。
所谓动态实体,指实体对象的任何属性,无论是普通属性、关联属性还是和数据模型无关的业务性属性,都可以不指定。这样,动态实体可以描述任意复杂的数据结构。
不指定对象的某个属性,和把对象的某个属性设置为null,在Jimmer中是完全不同的两回事。
另外,Jimmer保证动态实体所描述的数据结构不包含环形引用,是一个由聚合根和单向关系构成的树,所以,可以直接通过HTTP协议传递。
动态实体既可以表达任意复杂的数据结构,又能直接参与HTTP传输。所以,开发人员应该:
使用统一的实体模型来表达任何业务所需的数据格式,而非为每一个业务场景所需的数据格式定义DTO。
<—CSDN引用不支持换行—>
这非常重要,不仅是因为它避免冗余的数据定义让系统丧失紧凑型;更因为它是整个Jimmer的核心,其它革命性的功能都以此为基础。
二、查询任意复杂的数据结构
Jimmer提供了两种方法,用于查询任意复杂的数据结构
-
在服务端指定被查询数据结构的形状
详情:对象抓取器
-
在客户端端指定被查询数据结构的形状