Java 如何使用JDBC处理DAO之间的交互?

Java 如何使用JDBC处理DAO之间的交互?,java,jdbc,dao,Java,Jdbc,Dao,我在弄清楚如何使用JDBC处理应用程序上实体之间的交互时遇到了一个问题。以前我使用过Hibernate,但这不是一个真正的问题,因为几乎所有问题都是自动或通过注释解决的。现在,使用JDBC并没有这样的魔力 假设我有这样的课程: class A{ private String name; private List<B> bs; private C c; } class AService{ private ADao aDao; void save

我在弄清楚如何使用JDBC处理应用程序上实体之间的交互时遇到了一个问题。以前我使用过Hibernate,但这不是一个真正的问题,因为几乎所有问题都是自动或通过注释解决的。现在,使用JDBC并没有这样的魔力

假设我有这样的课程:

class A{
    private String name;
    private List<B> bs;
    private C c;
}

class AService{
    private ADao aDao;
    void save(A a){
        aDao.persist(a);
    }
}

class ADao{
    void persist(A a){
        //open connection and autocommit false
        //persist C
        //persist B's
        //persist A
        //commit
    }
}
A类{
私有字符串名称;
私人名单;
私人C C;
}
类别A服务{
私人阿多阿多;
作废保存(A){
aDao.persist(a);
}
}
阿多类{
(A){
//打开连接和自动提交错误
//持久性C
//B's
//坚持
//承诺
}
}
B和C有各自的DAO和服务。
现在,据我所知,你们不应该把刀和其他刀混在一起。。。这意味着我不应该在ADao中使用BDao和/或CDao,而应该使用他们的服务

如果这是真的,那么我该如何实现期望的行为呢?我可以在事务上持久化多个实体?服务不应该知道任何关于连接或其他的。。。这些是我无法传播到业务层的详细实现

到目前为止我还没有在网上找到任何东西。。。所有的例子都是一个实体,我唯一能想到的解决方案就是在我的另一个DAO上复制代码


我真的很感激你能提供的任何帮助,以及阅读有关这方面的书籍或好材料。我找到了一些关于jdbc的书。。但坦率地说,他们没有那么好。。。其中一些甚至将DAO传播到表示层..:/

您愿意使用EJB吗?它们可以很好地处理业务层逻辑(如DB START..ejb function..DB COMMIT)。我知道它们已经过时了,但就我个人而言,我觉得它们有一席之地


事务是一个业务层问题,而不是DAO/数据层问题。

没有DAO不能处理多个实体的实践。如果DAO应该处理一个和一个实体,那么它应该只接受一个实体,而不是像您的示例中那样的嵌套实体树

所以你有两个选择

  • 在DAO层解耦A、B、C。他们每人一把刀。您已经看到了持久化一个bean的示例。服务层通过根据需要调用每个DAO来协调所有bean的持久性。它还负责维护关系。服务层还将所有调用包装在事务中

  • 如果实体A、B和C是密切相关的,那么就要像现在一样拥有这些实体。有一把刀,把A、B、C三者放在一起。选项1中的服务层所做的一切都可以推送到DAO层


  • 除非您的项目包含很少的实体,或者您只是在玩jdbc,否则我建议您使用JPA/Hibernate之类的工具。我知道JPA是一种痛苦,但简单的jdbc将是一场噩梦。

    谷歌Hi的第一个结果,我不想使用框架/库来解决设计问题。我宁愿学习如何正确地解决它。关于你的最后一句话,你能提供一本书、一个链接或一个例子来教育我如何解决这个问题吗?EJB是Java的标准部分(Javee,而不是JavaSE)。您已经能够在JDK中使用它们,而无需添加库。他们为你处理交易。一个好的开始是或者。但是,这并不能回答我的问题。无论如何,谢谢你。你能详细解释一下为什么这不是一个答案吗?我是新来这里的,已经获得了惊人数量的反对票,所以我想做得更好。