我正在寻找一个SQL实用程序库,它允许我做一些事情,比如使用like对前缀搜索字符串进行转义,或者通过添加术语(具有占位符支持)以编程方式编写查询的WHERE部分。
发布于 2010-08-23 04:01:58
像Quaere,LIQUidFORM,jaQu,JEQUEL (Java Embedded SQL )这样的项目都提供了一个流畅的接口来编写QUEry语句,这可能就是你想要的。例如,使用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网页的底部有更多的信息。
发布于 2010-08-23 03:41:47
典型的ORM框架如hibernate或JPA即可提供此功能。
例如,在hibernate中。
from Document doc fetch all properties where lower(doc.name) like 'cats%'将返回nqme以cat开头的Document对象。
对于参数查询:
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。
发布于 2010-08-23 03:33:11
如果您还在考虑这些低级术语中的SQL,我会说您还不够面向对象。
从对象的角度思考你的问题。你仍然深陷原始水平的泥潭。
考虑在模型对象之上进行更好的持久化抽象: DAO模式、Spring JDBC、iBatis、Hibernate等ORM工具。
https://stackoverflow.com/questions/3542966
复制相似问题