Java 的 ORM 框架发展了很多年,一直存在各种各样的问题,相信大家的体会比我还要深,到底这是什么什么呢?我从两个角度来分析一下,大家看看对不对?
1 )语义表达的双重性
一个 Java Bean 的定义,只能表达一种语义,就是与其它相关的 Java 类相互协作实现一项特性,通常用于数据的载体,但不能表达数据库交互时的 SQL 的语义,两种内存的语义差异很大(例如:Java Field 在数据库中映射为 Column,一个 Column 可以进行排序、算术运算、比较运算等),很难通过 Annotation 进行描述,除非 Java 中增加新的特性,用于描述一个 Java Class 的多重语义。既然一个 Java Class 无法满足双重语义的描述,只能新增代码进行定义和描述,此时又出现重复代码和变更的一致性,通过 Maven 或 APT 形式生成,也会存在每次变更后,都需要重新运行任务,才能正常使用,使的开发过程变得更糟。
2 )语法一致性
Java 语法与 SQL 语法从语义上说基本是一致的,但表现形式不一样,例如:Java 中逻辑表达式:a && b 或者 a || b,而 SQL 中则是 a AND b 或者 a OR c,两种类型表达语义上一致,但语法上不能直接互换。同时,也无法 Java 对语义的解析和执行过程进行干预,也就导致了 Java 的表达式无法直接转换为 SQL 表达式,只能以字符串的形式进行拼接,通过对字符串拼接过程进行抽象和封装,形成一系列 API,这也就导致了简单的表达式变成若干 Java 方法的嵌套,严重影响了代码的可理解性。
ObjectiveSQL 完美的解决了上述两个问题,通过 Java 代码的动态生成和 Java 运算符重载等特性,有兴趣的同学可以发起挑战: https://github.com/braisdom/ObjectiveSql
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.