【问题标题】:Java library to write sql statements?Java库写sql语句?
【发布时间】:2011-10-22 03:50:57
【问题描述】:

是否存在可以创建 sql 语句的 java 库? 我不是在寻找花哨的东西,只是在“字符串操作”级别:我只使用 jdbc(带有 Preparestatements 和 Resultsets),但我真的不喜欢传递包含 SQL 代码的大字符串......

我需要的是一个“简单”的 Select 类(或类似的东西);在我看来,我真正想要的就是能够做到

SQLStatement stat = Select("*").from("table").where("condition and condition").orderby("something");
ResultSet rs = Connection.getResultSet(stat.toString());
/* equals to "select * from table where condition and condition order by something" */

也许我是盲人,但我找不到类似的东西......

显然,我想要一些方法/类能够编写 inserts 和 updates 以及其他东西......

我排除 ORM 有两个原因:

  1. 数据库架构是“旧”的,我无法更改它,我不确定如何调整 ORM 以遵循我们的数据库
  2. AFAIK ORM 需要更改模型(可能添加基类,可能您需要实现接口)并且我的项目中的模型又大又旧且脾气暴躁
  3. 说实话,我不太喜欢 ORM:对象和集合论不是用来映射的(恕我直言)

【问题讨论】:

  • 为什么不使用 ORM?因为有 plenty!!!
  • 这不存在的原因可能有两个:a.) 用有意义的方法名称替换字符串连接并不是 很大的收获和 b.) 你不应该首先使用字符串操作来构建完整的选择(尤其是不是 where 条件)。
  • 有趣的是,上周我也有同样的想法! :)
  • 由于SELECT,INSERT,UPDATE,DELETE 语句可能因您使用的数据库服务器而异。所以没有方言很难使用它。在 Java 中,最常见的实用程序是 Hibernate,它具有所有这些功能以及更多功能。
  • @Joachim Sauer 我总是忘记语句的精确语法(我不经常去这个级别)并且 IDE 根本无法解析字符串,所以我在运行时发现了语法问题(是的,我使用unittest,但每次我发现错误总是只是一个错字,如“SLECT”或“WERE”)

标签: java sql code-generation


【解决方案1】:

ORM(对象关系映射)库就是线索。

Hibernate 是最成熟的一个。

Hibernate-s Criteria API 是一种面向对象的方式来创建您希望的查询。 Criteria API doc.

【讨论】:

  • +1。 Hibernate Criteria 允许您编写查询,例如:createCriteria(Stuff.class).add(Restrictions.eq("property", propValue)).addOrder(Order.asc("name")).list();
  • 嗯,我正在浏览Criteria 文档,它似乎正是我想要的......只是......为什么他们不使用类似于 SQL 的 API?
  • @Vito:他们确实支持 HQL,这有点类似于 SQL,但以编程方式构建标准具有您上面提到的所有优点。
【解决方案2】:

Hibernate 很可能是您正在寻找的。它包含许多高级功能,但 SQL 语句更直接。

看看他们的网站:http://www.hibernate.org/

我还建议您浏览本指南:

https://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java

【讨论】:

  • 我支持这个答案。 Hibernate 可能正是您正在寻找的。它将所有数据库表和关系映射为 Java 类,您可以通过 std java 方式的方法调用方便地使用这些类,而不是在您的程序中包含大量的 sql 代码。
【解决方案3】:

试试SQLBuilder 项目。老实说,我没有使用过这个。查看他们的文档,我认为它可能符合您的要求。

您也可以尝试在 Sourceforge、Google 代码等中找到类似的 API。

【讨论】:

    【解决方案4】:

    我不确定您是将 Java 用于本机应用程序还是用于 Web。 如果您使用 Java 网页版,您可以考虑使用 Play framework

    很简单,而且 Hibernate 包含在一个非常简单的实现中(在自己实现 Hibernate 时更容易)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      相关资源
      最近更新 更多