替代 Apache Commons DbUtils 的轻量级 JDBC 帮助程序库 [关闭]

Posted

技术标签:

【中文标题】替代 Apache Commons DbUtils 的轻量级 JDBC 帮助程序库 [关闭]【英文标题】:Lightweight JDBC helper library alternative to Apache Commons DbUtils [closed] 【发布时间】:2011-10-31 13:30:46 【问题描述】:

我刚刚开发了自己的小型 JDBC 帮助程序库,我已经意识到这将是一场维护噩梦。

我不是在寻找一个成熟的 ORM,比如 Hibernate,它只是一种轻巧且有用的东西,可以快速使 JDBC 调用传递 SQL 语句,而不会弄乱检查的异常、手动关闭资源等......

根据您的经验,您能推荐一个不错的 JDBC 帮助库吗?

到目前为止,我已经查看了Apache Commons DbUtils,这似乎很不错。还有什么想法吗?

【问题讨论】:

【参考方案1】:

以下是与简单 JDBC 交互时“减轻痛苦”的工具列表:

春天的JdbcTemplate jOOQ(也可以与 SQL 字符串一起使用 - 免责声明:我为供应商工作) Apache DbUtils(你自己也提到过) JDBI sql2o persism

【讨论】:

JDBC 真的很棒,我认为应该从 Spring Framwork 外部化它 @deFreitas:为什么?这只是一节课,你可以在 10-20 分钟内自己写出来...... 因为我不认为以良好的代码质量重写 JDCTemplate 和 PlatformTransactionManager 只需 20 分钟,因为我不明白为什么要重写有效的东西非常好,它由所有社区维护 不确定你的意思。 JdbcTemplate 的本质只是 JDBC API 的语法糖。但是好吧,如果你不想自己动手,只需从 Spring 复制粘贴一个。它是 ASL 2.0 许可的,因此您可以随意使用它,消除对 Spring 的依赖。但无论如何,你可能还有别的意思。 @sajjadG 前两个是按字母顺序排列的。其余的都是随机的。【参考方案2】:

还有ORMLite 和MyBatis,它们也很轻量级。使用 spring 和它的 rowmappers 非常简单,但确实需要您直接处理 JDBC。上述任何一种方法都会对您隐藏很多内容,同时不会像 hibernate 那样过于复杂。

【讨论】:

【参考方案3】:

https://code.google.com/p/jdbc-helper/

这是我从其项目页面复制的描述: 受 Spring Jdbctemplate 和 Commons Dbutils 项目的启发,JdbcHelper 是一个非常小的库,用于帮助开发人员编写常见的 jdbc 操作。 JdbcHelper 非常轻量级。它只有约 70K,并且没有外部依赖项。

【讨论】:

【参考方案4】:

有Yank,它是一个封装了DBUtils 的超轻量级JDBC 持久层。要使用它,您为每个表创建一个 POJO 和一个 DAO 类。您可以编写自己的 SQL 语句并通过 DBProxy 类执行查询。您不必处理连接、结果集或其他低级 JDBC 代码。 Yank jar 在 2.0.0 版中只有 13 KB,它仅依赖于 SLF4J、DBUtils 和一个第三方数据库 jar,无论您使用哪种数据库技术。

【讨论】:

我只需要看到“BooksDAO.selectAllBooks()”就知道这不能正常工作。它实际上是我 6 年前建造的,并且犯了我所做的所有错误。它应该是“new BooksDAO(transaction).selectAllBooks()”。事务分界和上下文不能与查询纠缠在一起,也不应该通过静态方式处理,否则会影响可测试性和可调试性。 “...这不能很好地工作”是一个非常不公平的说法。如果您不需要在每个事务中执行多个语句,它实际上工作得很好。 Yank 从未声称支持多语句交易。 我看过 Yank 源代码,我认为这不是一个好习惯。我写了一个简单的 DbUtils 帮助。 a123159521.iteye.com/blog/2200647 @herrtim 我不认为这种说法是不公平的。即使您不想在事务中支持多个语句,静态附着也会杀死您。如果没有将 BooksDAO 静态绑定到数据库和具体实现,您将无法编写任何依赖于 BooksDAO 的代码。我支持SomeDAO.someStaticMethod() == 不好的做法。 someDAOImplementation.someInstanceMethod() 非常出色。 不要在 Yank 上浪费时间,这很痛苦……您将花费数小时处理无法追踪的错误。最后,此驱动程序无法执行更新,并且在翻译 SQL 文本命令时存在严重问题。【参考方案5】:

Spring Framework (spring-dao) 是你的朋友。如果你正确地编程你的接口,以后(如果有必要的话)你可以很容易地切换到像 Hibernate 这样更强大的东西。也不要低估 Hibernate:Native SQL 为您提供了完整的 SQL 功能,并且您仍然可以从对象映射中受益——除非您只需要执行像 select count(*) from ... 这样简单的查询,否则无论如何您都必须对其进行编程。

【讨论】:

【参考方案6】:

如果不需要 ORM,我会使用弹簧 JdbcTemplate。

例子

http://www.theserverside.com/tip/Database-Access-with-Spring-30-and-the-JdbcTemplate http://www.vogella.de/articles/SpringJDBC/article.html

【讨论】:

以上是关于替代 Apache Commons DbUtils 的轻量级 JDBC 帮助程序库 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

apache-commons-dbutils 可以将 bean 转换为 SQL 语句吗?

在Maven项目中使用apache的commons-dbutils

在Maven项目中使用apache的commons-dbutils

Apache DBUtils框架 结果处理器

10.25JDBC之Apache-DBUtils实现CRUD操作

QueryRunner类