SQL实用程序函数的开源Java库?

时间:2010-08-22 19:21:50

标签: java sql

我正在寻找一个SQL实用程序库,它允许我做一些事情,比如使用LIKE转义字符串以进行前缀搜索,或者通过添加术语(使用占位符支持)以编程方式编写查询的WHERE部分。

3 个答案:

答案 0 :(得分:2)

QuaereLIQUidFORMjaQuJEQUEL等项目(Java嵌入式QUEry语言)都提供了一个流畅的界面来编写SQL语句,可能就是你所说的寻找。例如,使用JEQUEL:

public void testParameterExample() {
    final Sql sql = select(ARTICLE.NAME, ARTICLE.ARTICLE_NO)
            .from(ARTICLE)
            .where(ARTICLE.OID.in(named("article_oid"))).toSql();
    assertEquals("select ARTICLE.NAME, ARTICLE.ARTICLE_NO from ARTICLE where ARTICLE.OID in (:article_oid)", sql.toString());

    final Collection<String> articleDesc = sql.executeOn(dataSource)
            .withParams("article_oid", Arrays.asList(10, 11, 12))
            .mapBeans(new BeanRowMapper<ArticleBean, String>() {
                public String mapBean(final ArticleBean bean) {
                    return bean.getArticleNo() + "/" + bean.getName();
                }
            });
    assertEquals(1, articleDesc.size());
    assertEquals("12345/Foobar", articleDesc.iterator().next());
}

更多内容位于jaQu网页的底部。

答案 1 :(得分:1)

像hibernate或JPA这样的典型ORM框架提供了开箱即用的功能。

例如在hibernate中。

from Document doc fetch all properties where lower(doc.name) like 'cats%'

将返回Document对象,其中nqme以cats开头。

对于参数查询:

Query q = s.createQuery("from foo Foo as foo where foo.name=:name and foo.size=:size");
q.setProperties(fooBean); // fooBean has getName() and getSize()
List foos = q.list();

它还将为您节省大量样板,以创建所需的所有JDBC对象和所有错误处理。

如果您需要接近SQL,请仔细查看iBatis。

答案 2 :(得分:0)

如果你仍然在考虑这些低级术语中的SQL,我会说你不是面向对象的。

从对象的角度思考你的问题。你还处于原始水平。[/ p>

在模型对象的基础上考虑更好的持久化抽象:DAO模式,Spring JDBC,iBatis,Hibernate等ORM工具。