不仅仅是 SQL 的替代品
Ebean ORM 查询 适合典型的 OLTP 查询,但是不太适合一些手动 SQL,尤其是在报告和 OLAP 领域。同样,当前版本对递归查询也没有太好的支持。
Ebean 查询专注于 OLTP,在适当地情况下不要忘了使用 SQL
对象图构建
将 ORM 查询视为对象图构造是很有用的,也就是说,当你创建一个 ORM 查询的时候,就是在定义读取对象图的中需要过滤/判断的那部分。
加载
对于 Ebean select()和fetch()了对于对象图的读取,select()是相对于对象图根节点的,而fetch()则是相对于对象图子叶节点。 在更多高级情况下,可以使用FetchConfig来控制对象图的哪些部分采用 急加载/懒加载,或者对象图的哪一部分从数据库读取,哪一部分从 L2缓存,哪一部分L3级缓存读取。
对象图的某些部分可以从L2高速缓存,L3文档库被加载
加载-查询调优
调优以获得最佳性能的ORM查询归结为:
- 什么性质的加载(只加载你需要为给定的用例)
- 对象图的哪些部分采用懒加载,哪些部分采用急加载
- 对象图的那些部分从数据库读取,那些部分从 L2 高速缓存读取,哪些部分从 L3 文档库中读取
- 不执行查询所有使用L2高速缓存查询
- 不执行查询所有使用L3文档库