我已经stumbled通过一个漂亮的SQL构建器框架,称为JOOQ。顺便说一下,在俄罗斯的JOOQ听起来像名词意思是“虫”(作为昆虫),“甲虫”;)Java:JOOQ持久性框架性能和反馈
如果您有任何关于JOOQ的反馈,它的性能等,请分享。链接到关于JOOQ的博客也很受欢迎。
我已经stumbled通过一个漂亮的SQL构建器框架,称为JOOQ。顺便说一下,在俄罗斯的JOOQ听起来像名词意思是“虫”(作为昆虫),“甲虫”;)Java:JOOQ持久性框架性能和反馈
如果您有任何关于JOOQ的反馈,它的性能等,请分享。链接到关于JOOQ的博客也很受欢迎。
我想我应该在这里回答,因为我在一个半月前开始使用jooq,所以我有一些经验。
我想使用的工具,像jooq因为:
那么,与jooq我能做到这一切。我的主要要求是jooq能够处理足够复杂的查询(嵌套,分组等)。那已经完成了。
我也希望能够使用尽可能少的代码行来运行查询,并且能够使用jooq fluent API来实现此目的,它允许类似jquery的调用来执行SELECT。
在我使用jooq的路上,我报告了一个one or two bugs,我必须说,他们的修复速度惊人地快。
我也missed some features我再说一次,我已经有几乎所有的人。
我非常喜欢的是,jooq现在使用SLF4J来报告一些非常有趣的数据,并输出它所建立的实际查询。它真的帮助我调试。
Jooq甚至为存储过程,UDF和可更新记录集生成Java工件,但我目前不使用这些工件。
重要的是,jooq透明地支持DB2,Derby,H2,HSQLDB,MySQL,Oracle,PostGreSQL,SQLite,SQL Server和Sybase SQL Anywhere。我觉得非常广泛的名单。
Jooq已将support forum in Google groups卢卡斯日夜准备回答我的问题甚至最愚蠢的问题。
Jooq支持Maven,因为我所有的Java项目都是基于Maven的,所以对我来说这是一个很大的解脱。我们仍然想念发电机的Maven插件,但这并不重要,因为运行发电机是一块蛋糕。
用jooq写我的查询我突然发现,它们变得非常便于携带,因为我几乎从未在代码中使用任何MySQL特有的功能,因为jooq试图尽可能便携。对于那些不能忍受这种特殊情况的人来说,我知道支持SQL扩展也是如此。
从我的角度来看,jooq缺少什么?
那么,除了SELECT语句之外,没有流利的API。这使代码变得复杂一点,并使UPDATE/DELETE语句写得更复杂一点。但我认为这将很快加入。
刚刚在1.5.9中实施!哈!对我来说太快了;)
还有一件事。 Jooq有一本很好的手册,但是......我不知道。可能我只是不明白它的结构或体系结构......当我第一次开始使用jooq时,我打开了一个又一个寻找我需要的功能的页面。例如,尝试猜测,在jooq manual中描述UPDATE和DELETE语句,看看内容......但我相信这确实是主观的。我甚至无法解释,从我的角度来看,手册有什么问题。当我可以,我会张贴一两张票;)
手册也不是很好的导航,因为Trac没有自动的“这里,那里和后面”的链接。
那么,对于我在莫斯科(俄罗斯)Trac页面打不开,所以阅读手册有点无聊。
手册也遗漏了贡献者的jooq的良好体系结构描述。 Jooq遵循按合同设计的原则,当我想通过在IDE中使用通常的Ctrl-Click方法名称来实现某些功能时,我最终进入了一个没有实现的沉闷界面;)我太聪明了,马上就要开始改进jooq了,但我当然会很高兴地理解jooq究竟是如何从架构到架构的。
可惜我们无法贡献jooq手册。我预计它会出现在某种wiki中。
我还想改善的是the waynews are reported。我宁愿链接到那里的手册,或者举例说明这个或那个新功能是如何工作的。
Release notes link in manual实际上只是一个路线图。我想,明天我会自己做一个...
Jooq目前也有相对较小的社区,但我很高兴地报告说,它不会影响代码质量或引入新功能的方式。
Jooq是一个很好的项目。我将坚持为我的未来项目。我很喜欢。
如果您只查找SQL构建器解决方案。我有一个项目是Java的ORM框架,但它仍然是不成熟的,并且在不断的发展中处理许多数据库的原始用法。 https://github.com/ahmetalpbalkan/orman
在这个阶段没有文档,但是它可以只使用Java链方法构建安全查询,并且可以处理许多SQL操作。它也可以分别将类字段映射到表列。
下面是查询的样本构建查询操作
SELECT COUNT(*) FROM sailors WHERE
rating>4 AND rating<9 GROUP BY rating HAVING AVG(age)>20;
Java代码:
QueryBuilder qb = QueryBuilder.getBuilder(QueryType.SELECT);
System.out.println(qb
.from("sailors")
.where(
C.and(
C.gt("rating", 5),
C.lt("rating", 9)))
.groupBy("rating")
.having(
C.gt(
new OperationalField(QueryFieldOperation.AVG,
"age").toString(), 20)
).getQuery());
(!LOL干脆放弃开发框架)
最有可能是行不通的为你,但只是想宣布我的项目:P
你的框架看起来很像我JPA/CriteriaQuery。你为什么创建自己的?它与JPA有什么不同? – 2011-05-22 13:43:34
为什么不贡献给jOOQ呢? :) – 2011-05-22 14:11:26
我的项目的主要目标是创建一个注释驱动的ORM,就像JPA一样。 QueryBuilder只是它的一个功能。这与jooq不同。正如你所说'jOOQ不是一个OR映射器',但我的是。 – 2011-05-22 15:27:50
你也可以拿一个请看MentaBean,这是一个轻量级的ORM和SQL Builder,可以让您尽可能接近SQL,为样板代码提供很多帮助。这里有一个例子:
编程配置:
private BeanConfig getUserBeanConfig() {
// programmatic configuration for the bean... (no annotation or XML)
BeanConfig config = new BeanConfig(User.class, "Users");
config.pk("id", DBTypes.AUTOINCREMENT);
config.field("username", DBTypes.STRING);
config.field("birthdate", "bd", DBTypes.DATE); // note that the database column name is different
config.field("status", new EnumValueType(User.Status.class));
config.field("deleted", DBTypes.BOOLEANINT);
config.field("insertTime", "insert_time", DBTypes.TIMESTAMP).defaultToNow("insertTime");
return config;
}
// create table Users(id integer primary key auto_increment,
// username varchar(25), bd datetime, status varchar(20),
// deleted tinyint, insert_time timestamp)
一个简单的SQL连接查询:
Post p = new Post(1);
StringBuilder query = new StringBuilder(256);
query.append("select ");
query.append(session.buildSelect(Post.class, "p"));
query.append(", ");
query.append(session.buildSelect(User.class, "u"));
query.append(" from Posts p join Users u on p.user_id = u.id");
query.append(" where p.id = ?");
stmt = conn.prepareStatement(query.toString());
stmt.setInt(1, p.getId());
rset = stmt.executeQuery();
if (rset.next()) {
session.populateBean(rset, p, "p");
u = new User();
session.populateBean(rset, u, "u");
p.setUser(u);
}
Interresting就知道了!我甚至不知道JOOQ,我认为我没有对它感兴趣(我更喜欢存储过程中普通的旧SQL,并使用它的特定功能对一个DB进行优化),但从您的描述看来,它似乎是一个ORM做对了。这太不常见了。所以欢迎来到JOOQ – 2011-05-19 09:46:56
@Nicolas Jooq不是一个ORM。 – 2011-05-19 18:49:09
@FractalizeR 2年过去了,[但似乎Wiki认为它是一个ORM](http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software)。 – yair 2014-05-14 19:36:08