【问题标题】:SQL Builders in JavaJava 中的 SQL 构建器
【发布时间】:2014-02-11 10:18:39
【问题描述】:

我目前正在四处寻找 Java 中的 SQL 构建器。我的基本愿望是这样的:

SelectBuilder sb = new SelectBuilder(source, alias); // Source can be subquery
sb.select(column1, alias1);
sb.select(column2, alias2);
sb.joinWith(joinObj, joinAlias);
sb.where(column1, operator, value)
sb.orderBy(column1, DESC)
// etc etc etc

...并且它确实准备了语句

我研究了 JOOQ,我的印象是它太复杂了,不适合我的口味。我不想为我的模式设置一些 xml 或 xsd 文件。我最多允许写bean。我看过 Squiggle,但它只支持 SELECT 而不是其余的。 MyBatis 还不够好,因为它没有完全抽象出 SQL 语法。我还尝试了 Stack Overflow 推荐的更多帖子,例如 thisthat

我真的不喜欢几个基于 Java 的 SQL 构建器的另一件事是链接语法:即 select().from().where().etc().etc().etc()

无论如何,你们知道其他可能满足我要求的 SQL Builders 吗?我在网上搜索了两天,还没有找到任何东西。洞察力将不胜感激!!!

【问题讨论】:

    标签: java sql


    【解决方案1】:

    我研究过 JOOQ,我的印象是它太复杂了,不适合我的口味

    这到底是什么意思? :)

    我不想为我的架构设置一些 xml 或 xsd 文件

    您不必这样做。您可以在没有代码生成器的情况下使用 jOOQ,如下所述: https://www.jooq.org/doc/latest/manual/getting-started/use-cases/jooq-as-a-standalone-sql-builder

    但是,如果您不使用代码生成器,您将错过大量有用的功能。怎么说呢? Hours of writing code manually saves seconds of setting up the code generator. 关于why you should use the code generator, read this article here 的更有说服力的论据。

    我真的不喜欢几个基于 Java 的 SQL 构建器的另一件事是链接语法:即 select().from().where().etc().etc().etc()

    为什么不呢?这真的很有帮助。但话又说回来,你不必这样做。 jOOQ 有 2 个 API。 DSL API(你不喜欢的)和模型 API。在此处查看此页面: https://www.jooq.org/doc/latest/manual/sql-building/sql-statements/dsl-and-non-dsl

    【讨论】:

    • 它可以与任何数据库一起使用吗?或仅开源
    • @Makky:查看 jOOQ 版本支持的数据库产品列表:jooq.org/download/#databases
    【解决方案2】:

    看看这些:

    http://www.querydsl.com/

    https://github.com/ivanceras/fluent-sql

    Hibernate Criteria API 也有流畅的界面。 根据我的经验,如果查询比 select from sometable 更复杂,那么这些流畅的 api-s 会使 sql 非常不可读。

    【讨论】:

    • 感谢您的意见。我已经看过 QueryDSL,它与 JOOP 并没有太大的不同。休眠是我试图远离的东西,因为它涉及太多设置。我最感兴趣的是某种形式的 String Builder,它通过易于阅读的函数根据 SQL 语法规则构建。我用过一个很棒的,但它是 .NET 的内置房屋,不向公众开放。
    • 我们还为 Java 开发了一个内部类似 ORM 的工具,我们计划在 2 月内开源。这不是完全流畅的 api,但它隐藏了表和字段-列映射。可以很容易地编写 select from where 没有 sql。它依赖于 java 持久化注解来进行表和字段-列的映射。当然更复杂的查询也可以用sql编写
    • 你知道的。也许只有我一个人,但似乎我认识的很多人都有自己的内部 ORM,它比 Java 在线可用的更轻量级和更灵活。很奇怪。这就像让所有这些小型开发公司重新发明轮子一样。我自己的工作场所有自己的 SQL Builder,它比 JOOP 之类的要好很多倍。我想知道为什么 Java 的开源社区在这个领域落后这么多。
    • @user1836155:过去 10 年我只做 jOOQ。我非常很好奇贵公司在哪些方面做得更好。您是否正在考虑一个非常具体的用例?那么也许。但是对于通用 SQL 查询构建?我真诚地怀疑它:)
    猜你喜欢
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多