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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。