为什么 Java 没有好用的 ORM 框架?
因为语言特性的关系,动态语言天生就比静态语言更加适合干ORM这件事,目前ORM里最流行的Active Record和链式调用模式,最早就来源Ruby on Rail,PHP的laravel,python的Django,都是跟着学过来的而已。
一个高度灵活的ORM需要的语言特性有类型推导,lambda表达式等等,这些特性早期java是没有的。最近的几个版本才加上。
所以这限制了java这边的ORM的能力发挥。你可以观察到像Hibernate和基于它实现的spring data jpa,在灵活性是是远不如一些动态语言实现的ORM的。
最后就是,我个人认为,某些思想限制住了java系的ORM发展,比如spring data jpa主推的条件查询居然是“用方法名称映射查询语句”这种极其不方便的方式,Example系的链式调用方式不是首选,而且存在诸多限制。
不过自从java8之后,也出现了一些大量使用动态语言特性的ORM,基本上已经追平了动态语言系的ORM,比如JOOQ(要收费),ebean ROM(具备响应式能力的ORM,不过我更看重的是它的sql映射能力),mybatis-plus(mybatis增强,国人项目,除了联表还是得写sql,实现了对单表的任意crud可以不写额外代码,这点确实厉害)。