Tom*_*icz 15 java sql api fluent
我想知道是否有任何库可用于将SQL查询表示为Java中的对象.
在代码中,我有很多类型为java.lang.String的静态变量,它们是手写的SQL查询.我会寻找具有漂亮的流畅 API的库,它允许我将查询表示为对象而不是字符串.
例:
Query q = select("DATE", "QUOTE")
  .from("STOCKMARKET")
  .where(eq("CORP", "?"))
  .orderBy("DATE", DESC);
Tim*_*per 13
Querydsl支持查询SQL,JPA和JDO后端.
上面的例子变成:
query.from(stockmarket).where(stockmarket.corp.eq(someVar))
    .orderBy(stockmarket.date.desc())
    .list(stockmarket.date, stockmarket.quote);
Querydsl使用通过APT生成代码将SQL模式镜像到Java查询类型.这样查询完全是类型安全的(或者与SQL"符合模式").
我是Querydsl的维护者,所以这个答案是有偏见的.
我在这里发布了Querydsl与其他框架的比较.
这些是一些很好的专有库,可以动态创建类型安全的SQL查询
除了上述之外,总会有
你在jOOQ中的例子:
create.select(DATE, QUOTE)
      .from(STOCKMARKET)
      .where(CORP.equal(123))
      .orderBy(DATE.desc());
http://www.hibernate.org/ 可能是Java最强大的ORM库.它可以做更多,然后只是简单的查询映射.因此,您可以轻松地在应用程序中的其他位置实现它.对于你的情况,它可以这样做:
public class LookupCodeName
{
    private String code;
    private String name;
 /*... getter-setters ... */
}
public class someBL {
public List<LookupCodeName> returnSomeEntity() {
      SQLQuery sqlQuery =  (SQLQuery)((HibernateSession)em).getHibernateSession()
                        .createSQLQuery( "SELECT st.name as name, st.code as code FROM someTable st")
                        .addScalar("code")
                        .addScalar("name")
.setResultTransformer(Transformers.aliasToBean(LookupCodeName.class));
    }
return (List<LookupCodeName>)sqlQuery.list();
}
杰克尔看起来很漂亮:http://www.jequel.de/
它使用流畅的界面,因此它很容易阅读,几乎像自然SQL(来自文档):
SqlString sql = select(ARTICLE.OID)
               .from(ARTICLE, ARTICLE_COLOR)
               .where(ARTICLE.OID.eq(ARTICLE_COLOR.ARTICLE_OID)
               .and(ARTICLE.ARTICLE_NO.is_not(NULL)));
它还支持使用参数对DataSource执行查询,因此它也处理参数化查询的创建.
| 归档时间: | 
 | 
| 查看次数: | 5167 次 | 
| 最近记录: |