我的问题类似于
Java中有什么好的动态SQL生成器库吗? https://stackoverflow.com/questions/5620985/is-there-any-good-dynamic-sql-builder-library-in-java
然而,从上述线程中得出的一个重要观点是:
Querydsl 和 jOOQ 似乎是最流行和最成熟的选择,但有一点需要注意:两者都依赖于代码生成的概念,其中为数据库表和字段生成元类。这有助于实现漂亮、干净的 DSL,但它尝试为仅在运行时已知的数据库创建查询时面临问题.
除了使用普通 JDBC + 字符串连接之外,还有什么方法可以在运行时创建查询吗?
我正在寻找一个可用于构建表单来查询现有数据库的 Web 应用程序。现在,如果类似的东西已经存在,那么指向此类产品的链接也将受到欢迎。
虽然数据库元数据的源代码生成确实为使用增加了很多价值jOOQ http://www.jooq.org,这不是先决条件。许多 jOOQ 用户将 jOOQ 用于您设想的相同用例。这也体现在jOOQ教程 http://www.jooq.org/doc/latest/manual/getting-started/use-cases/jooq-as-a-standalone-sql-builder/,其中将使用 jOOQ 而不生成代码列为完全有效的用例。例如:
String sql = create.select(
fieldByName("BOOK","TITLE"),
fieldByName("AUTHOR","FIRST_NAME"),
fieldByName("AUTHOR","LAST_NAME"))
.from(tableByName("BOOK"))
.join(tableByName("AUTHOR"))
.on(fieldByName("BOOK", "AUTHOR_ID").eq(
fieldByName("AUTHOR", "ID")))
.where(fieldByName("BOOK", "PUBLISHED_IN").eq(1948))
.getSQL();
以类似的方式,可以使用以下命令从任何查询中提取绑定值查询.getBindValues() http://www.jooq.org/javadoc/latest/org/jooq/Query.html#getBindValues%28%29.
这种方法仍然会击败动态 SQL 语句的普通 JDBC + 字符串连接,因为您无需担心:
- 语法正确性
- 跨数据库兼容性
- SQL注入
- 绑定变量索引
(免责声明:我为 jOOQ 的供应商工作)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)