Java 如何使用JOOQ或任何其他库使用以下数据构建方言敏感的SQL查询?
我有一个字符串列表,这些字符串将作为列作为Java 如何使用JOOQ或任何其他库使用以下数据构建方言敏感的SQL查询?,java,relational-database,query-builder,querydsl,jooq,Java,Relational Database,Query Builder,Querydsl,Jooq,我有一个字符串列表,这些字符串将作为列作为sqlselect语句的一部分。以及表示要在SQL查询中联接的表的另一个字符串列表 List<String> columns = Arrays.asList("sakila.actor.first_name", "sakila.city.city", "sakila.category.category_id"); List<String> tables = Arrays.asList("actor", "film_
sqlselect
语句的一部分。以及表示要在SQL
查询中联接的表的另一个字符串列表
List<String> columns = Arrays.asList("sakila.actor.first_name", "sakila.city.city",
"sakila.category.category_id");
List<String> tables = Arrays.asList("actor", "film_actor", "film", "inventory", "store",
"address", "city", "country", "film_category", "category");
List columns=Arrays.asList(“sakila.actor.first_name”,“sakila.city.city”,
“sakila.category.category_id”);
列表表=数组。asList(“演员”、“电影演员”、“电影”、“存货”、“商店”,
“地址”、“城市”、“国家”、“电影类别”、“类别”);
连接条件用XML表示,如下所示
<join type="inner" operator="=">
<!-- type can be right or left or full also -->
<left table="rental" column="staff_id"/>
<right table="staff" column="staff_id"/>
</join>
我已经解封了XML,并且有一个表示上述XML的自定义联接对象列表
在这些列表的帮助下,我创建了SQL select语句。但是查询在某些情况下与MySQL不兼容,在另一种情况下与Postgres不兼容。我想支持所有的数据库。如何使用带有此类列表(主要是字符串)的JOOQ构建此类查询?或者事实上还有其他好的图书馆吗?我只对表示SQL的字符串感兴趣,不必立即执行它
我试图使用
JOOQ
,但似乎我需要了解一下它的API。任何关于我的用例的例子都会有很大的帮助。谢谢。任何答案在很大程度上取决于您所说的“查询在某些情况下与MySQL不兼容,在另一种情况下与Postgres不兼容”的意思。除非您使用特定于数据库的功能,否则jOOQ构建的大多数查询都可以在不同的数据库中正常运行。幸运的是,通过您的简单示例,您没有这样做
直接回答您的问题:您可以轻松地将XML“打开”条件转换为包含可用数据的条件对象。在jOOQ的API中,它看起来像(假设您有一个名为create
)的DSLContext对象):
您也可以使用查询语法,这可能更适合您的动态查询:
SelectQuery selectQuery = create.selectQuery();
selectQuery.addSelect(selectFields);
selectQuery.addFrom(leftTable);
selectQuery.addJoin(rightTable, joinCondition);
您需要迭代列数组,并使用此API将它们转换为字段。这可能看起来像:
List<Field<?>> fieldColumns = new ArrayList();
for (String column : columns) fieldColumns.add(fieldByName(column.split('.')));
列表
List<Field<?>> fieldColumns = new ArrayList();
for (String column : columns) fieldColumns.add(fieldByName(column.split('.')));