java orm 性能_为什么 Java 没有好用的 ORM 框架?

现在已经改变了,ORM 最初的出现主要是Java 程序员需要在字符串的基础上抽象出可复用的基础模型,但由于SQL 太过于灵活,所以Java 的抽象一直不够理想,主要体现在以下几个方面:

1)模型表达双重性问题

模型表达双重性就是同一个Java Bean 需要同时表达Java 的特性和SQL 的特性,因为两种计算逻辑的差异性很大,无法在同一个Java Bean 中进行描述,分开描述就会出现重复代码和变更时的一致性问题。

2)语法一致性问题

Java 表达式的语法和SQL 表达式的语法有相似的地方,也有不同的地方,例如:逻辑表达式,Java中是 a && b 或者a || b,而在SQL中是a and b 或者a or b 等,两个语法不能互换,就会导致大量字符串形式的编码存在。

ObjectiveSQL 通过动态代码生成,保持一个模型承载两种语义,通过运算符重载,实现两种表达式语法的一致性,同时解决了动态查询的复杂性。

简单示例:

Order.Table orderTable = Order.asTable();

Select select = new Select();

select.project((sum(orderTable.amount) / sum(orderTable.quantity) * 100).as("unit_amount"))

.from(orderTable)

.where(orderTable.quantity > 30 &&

orderTable.salesAt.between("2020-05-02 23:59:59", "2020-05-02 23:59:59"))

.groupBy(orderTable.memberId);

生成的SQL 代码,语法基本一致:

SELECT (SUM(`orders_t0`.`amount` ) / SUM(`orders_t0`.`quantity` ) * 100) AS unit_amount

FROM `orders` AS `orders_t0`

WHERE `orders_t0`.`quantity` > 30 AND `orders_t0`.`sales_at` BETWEEN '2020-05-01 00:00:00' AND '2020-05-02 23:59:59'

GROUP BY `orders_t0`.`member_id`

补充一下性能测试:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值