【问题标题】:SQL Provider with Java使用 Java 的 SQL 提供程序
【发布时间】:2026-02-09 19:35:01
【问题描述】:

我即将创建一个项目,我希望在其中有一个将我的应用程序连接到数据库的类。

我想以最好的面向对象的方式,遵循 Solid 原则!

我的问题是:

将 Provider 划分为子类是否明智,例如从数据库获取信息的子类和可以将数据插入数据库的子类?还是您将这些功能保留在一个庞大的类中?

【问题讨论】:

    标签: java database provider


    【解决方案1】:

    我建议您查看 Martin Fowler 的 Patterns of Enterprise Application Architecture。他有一篇关于持久性模式的精彩章节。

    这个问题已经解决了很多很多次:ORM 解决方案,如 JPA 和 Hibernate、iBatis 映射、Spring JDBC。我无法想象你将如何改进以前所做的事情。如果您无法清楚说明有何不同,我建议您在投资新事物之前先使用经过编写、测试和验证的内容。

    如果必须,我建议使用通用 DAO。这是一个非常简单的:

    package persistence;
    
    public interface GenericDao<K, V> {
        V find(K key);
        List<V> find();
        K save(V value);
        void update(V value);
        void delete(V value);
    }
    

    【讨论】:

      【解决方案2】:

      我不同意 ORM 总是要走的路。

      如果您想在靠近数据库的地方进行编程,像 mybatis 这样的查询映射器是 ORM 方法的有用替代方案。

      MyBatis 数据映射器框架可以更轻松地将关系数据库与面向对象的应用程序一起使用。 MyBatis 使用 XML 描述符或注释将对象与存储过程或 SQL 语句耦合。简单性是 MyBatis 数据映射器相对于对象关系映射工具的最大优势。

      mybatis 是 supported by Spring,这让您的生活更加更轻松。

      【讨论】:

      • +1 - 我完全同意。如果你没有实体对象模型,那么 ORM 就没有意义。
      【解决方案3】:

      您可以从阅读DAO pattern 开始。完成后,深入研究ORM frameworks

      简短的回答:是的,一定要将特定对象/类的持久性代码放在一起。

      干杯,

      【讨论】:

      • 那么提供者是1个大类,既包含获取数据又包含插入数据?
      • 但理论上所有的SQL语句都应该在同一个类中?
      • 不,不是。你似乎太沉迷于理论和你原来的想法。如果您对通用 DAO 的实现是 ORM,那么将为您生成 SQL。您将编写很少或根本不编写 SQL。
      • 在实践中,您可能需要一个通用的 DAO 并将其扩展为具体的 DTO。一旦您在模型中获得超过 3 个类,您将需要阅读 JPA 和 Hibernate:hibernate.org
      • 但是如果你想拥有一个包含所有 SQL 的提供程序类(1 个类)比将 1 个类分成几个类更好吗?
      【解决方案4】:

      通常最好按对象(即客户、客户、汽车)而不是功能(即读写)来拆分这些类。这是ORM使用的方法,java具体看Hibernate ORM Framework

      http://docs.jboss.org/hibernate/orm/3.5/api/

      上面的文档,毫无疑问你可以在 google 上找到好的教程

      【讨论】:

        最近更新 更多