Java中动态SQL库的比较

And*_*ite 7 java hibernate dynamic-sql mybatis

考虑一个只需要对后备数据库进行实时搜索的只读服务.该服务需要能够生成相当复杂的选择查询,以基于多表对象生成摘要,报告和结果.库/框架选择的优先级是(sql)的性能,可维护性和寿命.

Hibernate - 似乎需要"技巧"才能生成正确的SQL,Criteria API看起来很有前途,但在涉及任意查询时也有一些限制.

MyBatis - 没有类似Criteria的API,但它清晰干净,通常不需要Hibernate的技巧和推文.有限的数据库抽象.

其他一些尚待评估的解决方案包括:SQLBuilder,Squiggle,Querydsl,JOOQ或自定义解决方案.

SO用户发现的最有效的方法是提供快速的多功能搜索服务.

[更新] -我在Hibernate面临的一些技巧和问题是......

通常,两次加入同一个表似乎会导致问题.我甚至设法欺骗hibernate生成正确的SQL只是为了让它映射结果错误,因为它缓存了实体的第一个实例并假设第二个连接中的列是多余的.通过注释表达的条件连接也很痛苦.不是说它不可能,但非常神秘而且不直观.

为了回答下面的X-Zero,我想从规范到结果.即,消费者告诉我他们所知道的,并且我构建了一个即时回答他们问题的查询.在实践中,我打算对他们可以传递的内容有一些限制.

Eug*_*hov 3

对于面向查询的服务,我强烈建议远离 Hibernate 或类似的 JPA 框架。MyBatis 可能是一个不错的选择,它为从 SQL 片段动态构建查询提供了一些基本的脚本支持,但您必须自己处理 SQL 方言。

另外,要添加到您的列表中,还有Spring SQL Template类和JDBI,尽管它们都没有解决 SQL 方言的问题。