Java ORM 中简洁的关联对象查询和分页查询

2020-11-28 09:41:51 +08:00
 Braisdom

只需要定义一个 DomainModel

@DomainModel
public class Member {
    private String no;
    
    @Queryable
    private String name;
    private Integer gender;
    private String mobile;
    private String otherInfo;

    @Relation(relationType = RelationType.HAS_MANY)
    private List<Order> orders;
}

关联对象查询方法:

Member.queryAll(Member.HAS_MANY_ORDERS);
Member.queryByPrimary(1, Member.HAS_MANY_ORDERS);
Member.queryByName("demo", Member.HAS_MANY_ORDERS);

分页查询:

Page page = Page.create(0, 10);
PagedList<Member> members = Member.pagedQueryAll(page, Member.HAS_MANY_ORDERS);

更多请参考: https://github.com/braisdom/ObjectiveSql

3529 次点击
所在节点    Java
27 条回复
Braisdom
2020-11-28 14:55:25 +08:00
@VHacker1989
兄弟,我没有任何配置,所谓有 Page 的实例也是业务系统中不可或缺的
Braisdom
2020-11-28 15:05:10 +08:00
@VHacker1989 如果你真用了 MyBatis 的 PageHelpper 你再体验一下 ObjectiveSQL 你会觉得 MyBatis 做的太 Low 了,
如果你再看一下两者的代码,就觉得 MyBatis PageHelpper 更 Low 了
wdwwtzy
2020-11-28 22:21:03 +08:00
建议看一下 C#的 entity framework core,应该是各语言 ORM 的天花板了
Braisdom
2020-11-29 10:35:08 +08:00
@wdwwtzy 相信 ObjectiveSQL 将是 ORM 的一个新的巅峰
beginor
2020-11-29 14:18:26 +08:00
@Braisdom 想在 Java 这颗老树上开新华并不那么容易, 毕竟受限于 Java 陈旧的语法, 伪泛型等等。 很多有能力的大公司都开发新的 JVM 语言了, 比如 scalar,kotlin 等等。

当然楼主这个项目还是挺不错的, 毕竟开发者最需要灵活的 SQL 生成方式,linq/lambda 表达式可以说是最好的方式了, 比如 .net 平台上的任何一个 orm 都支持 linq/lambda 表达式查询, 否则只有被鄙视的份, 根本不会有人去使用。

不过我感到奇怪的是, 实现 linq 类似的查询,在 .net 平台上采用的方法是构建表达式树, 然后将表达式树转化为 sql, 中间不需要借助代码生成, 为什么到了 java 这里就必须得生成代码, 还得依赖 ide 插件呢?

另外, 建议楼主可以多写一些英文的文档, 到国外的社区发表一下, 看看国外的开发者的反应如何。
Braisdom
2020-11-29 14:50:16 +08:00
@beginor 本质上,我也设计过 JVM 的语言,之前命名为 JDS(Java Database Script),但最终发现,所谓的新型的语言还是和传统 Java 语言结合太紧密,所以也就放弃了。还是改造现有的 Java 语言最为实际。

我觉得 Lambda 不是最优的方法,我的目标是忘记 SQL 的存在,以 Java 编程模型解决数据查询和分析,以过程化的方式解决 SQL 编程的复杂性。我的 github 上有大量老外关注的,我也在尝试在国外的社区推广
Braisdom
2020-11-29 15:02:53 +08:00
@beginor 还有一点,我想阐述一下,不存在什么老树开新花,我的目标是改变传统的 Java 编程模型,Spring 是现在比较流行的编程模型,但我想一步一步改变它,先坐 ORM 开始

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

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

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

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

© 2021 V2EX