【问题标题】:How to design JDBC access in Java library?如何在 Java 库中设计 JDBC 访问?
【发布时间】:2014-02-09 16:16:01
【问题描述】:

我们现在要实现一个库,该库在许多应用程序中隐藏通用业务逻辑。

库需要访问数据库。

我们必须考虑哪些设计决策才能将工作做得最好(以降低长期支持成本)?

以前我只使用 Spring SimpleJdbcTemplateplain JDBC 代码,并希望像 SimpleJdbcTemplate 一样简单,不依赖于庞大的框架并避免外部库的版本冲突(回想一下 - 我们说的是库,而不是应用程序) .

【问题讨论】:

标签: java jdbc


【解决方案1】:

花了几个小时后,我发现了不错的项目:

【讨论】:

    【解决方案2】:
    1. 使用连接池。任何服务器应用程序,连接池对于减少连接/断开连接数据库非常有效。可以考虑 dbcp 或 # of connection pooling。

    2. 单独的读/写连接。 如果您正在考虑扩展,我想推荐单独的读写数据库连接。通常 RDBMS 支持只读副本。所以对于写连接,它只能用于数据库写入/更新/删除,而读连接只能用于读取事务。可以想象,读取事务的百分比通常为 70~90%(取决于应用程序类型)

    3. 在考虑 Spring JDBC 或纯 JDBC 等之前,最好先考虑纯 SQL 编码或 OR-Mapping(JPA、Hibernate、Mybatis 等)。 有优有劣取决于框架。

    【讨论】:

    • 谢谢解答! ORM 在依赖膨胀框架方面存在劣势。很难强迫用户使用你喜欢的任何框架......
    • 如果你在 ORM 框架中感到负担。 MyBatis 怎么样。它非常简单轻巧。和 SpringJDBCTemplate 非常相似。
    【解决方案3】:

    我会使用 spring-jdbc 进行数据库交互。库可能有依赖关系。使用Maven,不会有版本问题。 spring-jdbc 不大。

    【讨论】:

    • Spring-jdbc 要求:spring-corespring-beansspring-txspring-asm。我担心使用库的应用程序对 Spring 版本有一些问题。例如,如果应用程序使用 Spring 2.0 和我们的库 Spring 4.0 - 会发生什么?
    • 使用该库的人将调整他们项目的 pom。
    • 正如 Evgeniy 提到的,通过您的 pom,您可以包含项目特定的依赖项。 >>>>> 通常我更喜欢使用相同的 spring 版本依赖。 >>>>> 如果您需要不同的 API 依赖于不同的 spring 版本,您需要将特定的依赖项添加为 OSGi 包。因此,允许单独加载各个核心依赖项 jar,并在运行时仅使用它们的依赖项。 >>>>> 坦率地说,如果你选择不同版本的库,你已经增加了复杂性
    猜你喜欢
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多