分析一下Java ORM 框架的原理,大家怎么看?

ObjectiveSql 发布于 2020/12/15 12:35
阅读 568
收藏 2

开源之夏第三届火热来袭,高校学生参与赢万元奖金!>>>

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

加载中
1
开源爱好者X
开源爱好者X

楼主:语义表达的双重性怎么解释?

ObjectiveSql
ObjectiveSql
回复 @tonglingbaoyu : 理解的非常准确,但目前Java 是无法做的,只能通过两个类,描述同一个模型,但表达两种不同的语义。只是ObjectiveSQL 所做的事情
山下农-山上仙
山下农-山上仙
回复 @ObjectiveSql : 意思是既想表达Java中field的运行状态,还要表达sql的里的column中数值是吗
ObjectiveSql
ObjectiveSql
我的描述可能有点复杂了,语义的双重性其实就是一个Class Field 需要表达Java 中状态,还要表达数据库中的Column,正是由于这两种语义的冲突,导致了ORM 框架发展过种中遇到了障碍。
0
浪里刀
浪里刀

没太看懂,有点深奥,估计是我水平有限

ObjectiveSql
ObjectiveSql
该评论暂时无法显示,详情咨询 QQ 群:点此入群
0
小99
小99
有强制使用索引的方法吗?
ObjectiveSql
ObjectiveSql
强制索引只是MySQL 语法层面,只需要基于基础API 进行封装即可
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部