历经 3 年,终于得以实现了

2020-11-21 23:19:37 +08:00
 Braisdom

写了 15 年的程序,人到中年总有很多话要说,千言万语尽在项目里,里面有我想说的一切。

项目地址: https://github.com/braisdom/ObjectiveSql

ObjectiveSQL 是我构想了很长时间,到底是让 Java 像 SQL 一样编程,还是让 SQL 让 Java 一样编程,纠结了很久,还是让 Java 更像 SQL,Java 的语法表现力不够,只能扩展 Javac,实现了算法运算,比较运算,逻辑运算符重载,并封装了常用数据的的函数,抽象了 Expression,使的 Java 非常接的 SQL,同时也实现了简单 SQL 编程的代码生成,基本不需要写代码,也不需要配置就能实现简单 SQL 的编程,话不多说,先看示例,有兴趣可以到 github 上看。

Order.Table orderTable = Order.asTable();
Select select = new Select();

select.project(sum(orderTable.amount) / sum(orderTable.quantity) * 100)
    .from(orderTable)
    .groupBy(orderTable.productId);
Member.Table member = Member.asTable();
Order.Table order = Order.asTable();

Select select = new Select();

select.from(order, member)
        .where(order.memberId.eq(member.id));
select.project(member.no,
        member.name,
        member.mobile,
        countDistinct(order.no).as("order_count"),
        sum(order.quantity).as("total_quantity"),
        sum(order.amount).as("total_amount"),
        min(order.salesAt).as("first_shopping"),
        max(order.salesAt).as("last_shopping"));
select.groupBy(member.no, member.name, member.mobile);

ObjectiveSQL is an ORM framework in Java base on ActiveRecord pattern, which encourages rapid development and clean, codes with the least, and convention over configuration.

Features

25974 次点击
所在节点    Java
163 条回复
ZiLong
2020-11-23 10:39:14 +08:00
点赞,支持,这是有人不断提出挑战,落实行动,才会有不断的进步
zclHIT
2020-11-23 10:54:43 +08:00
aiden4
2020-11-23 11:21:16 +08:00
rails 就是这样子写 sql 的,用起来还是很舒服的。java 确实缺少这样的东西
mazhimazh
2020-11-23 11:33:48 +08:00
支持,哈哈,你历时 3 年写软件,我历时 3 年是研究 JVM 源代码,并且写 3 本书,明年 8 月就 3 年,也快完成了
GM
2020-11-23 12:07:41 +08:00
已经很不错了,点个赞。

其实我一直在找类似 ActiveRecord 的 Java 实现,一直没找到感觉好用的,ActiveJDBC 、ActiveJpa 都不够好用。

你这参考 lombok 的思路倒是个方法,可以用来实现一套 ActiveRecord for Java 。
Braisdom
2020-11-23 12:35:21 +08:00
@GM 是的,那些我都尝试过做的都不是特别理想,不实用,太过 Java 了
zoharSoul
2020-11-23 14:00:06 +08:00
感觉用 kotlin 实现好一些.
天然支持中缀表达式和运算符重载.

熟悉起来会更像 sql
cmdOptionKana
2020-11-23 14:05:05 +08:00
@zoharSoul 对哦,这个改成 kotlin 看起来会很酷,甚至可能比 Linq 更酷!
Braisdom
2020-11-23 14:05:47 +08:00
@zoharSoul 非常认可你的想法,这也是 Java 语言糟糕的地方,不够灵活
但话说回来,Kotlin 语言想成为主流,过程还是很漫长的,Android 后续也会向 Flutter 倾斜,Kotlin 后面的发展比较难呀。
很多好东西不一定会流行,但历史会记住它的
Braisdom
2020-11-23 14:08:18 +08:00
如果 ObjectiveSQL 后续的发展能够起来,我准备在 Python 端探索方向,Python 的受众群体也是比较大的。
122006
2020-11-23 14:13:22 +08:00
用类似于 lombok 实现运算符重载,太强了。
安卓不知道能不能支持,理论上 lombok 也可以说明应该只是兼容的问题,在安卓中直接写 sql 比较少的,如果可以证明稳定性的话推广起来比 springboot 上容易太多
vitoliu
2020-11-23 14:14:07 +08:00
支持,感受产品->创造产品->激发新产品
zoharSoul
2020-11-23 14:15:48 +08:00
@Braisdom
#129
目前 android 上 kotlin 已经是主流的, 官方已经 all in kotlin 了.
在传统的后端领域还不好说.
cmdOptionKana
2020-11-23 14:17:47 +08:00
@Braisdom 楼主,请看一下 kotlin 的这个特性,就花你 2 分钟时间 https://medium.com/makingtuenti/infix-functions-in-kotlin-2db3d3142dd2

用上这个,可以让你这个项目看起来很 geek, 很酷!
zsc8917zsc
2020-11-23 14:22:47 +08:00
Java 版的 Linq2SQL,点赞支持,向大佬致敬
Braisdom
2020-11-23 14:29:00 +08:00
@cmdOptionKana Kotlin 的语法的确比较优美
语法表现力更强,相比 Java, C 这类语言太过传统,长远来看它们还是什么被淘汰的。
就像喝白酒一下,现在的年轻人,喝白酒的越来越少了。
brezp
2020-11-23 15:22:27 +08:00
支持, 下次自己的项目拿来试试
Braisdom
2020-11-23 15:40:45 +08:00
@brezp 感谢支持,我现在正在开发分页的特性,相比其它 ORM 框架,分页使用起来也会特别简单
bk201
2020-11-23 16:05:16 +08:00
我是不明白为啥要把可以让 dba 去优化的 sql 写成代码。
Braisdom
2020-11-23 16:16:18 +08:00
@bk201 你可以看一下前面我的解释,
DBA 和程序员 需要的是不同的 SQL 编程方式,程序员需要的更多是动态的 SQL 构造过程,传统 SQL 远远做不到。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/727939

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX