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

时间:2018-06-11 19:31:16

标签: 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(A a){
        aDao.persist(a);
    }
}

class ADao{
    void persist(A a){
        //open connection and autocommit false
        //persist C
        //persist B's
        //persist A
        //commit
    }
}

B和C有各自的DAO和服务 现在,据我所知,你不应该把DAO混在一起......这意味着我不应该在ADao中使用BDao和/或CDao,只是他们的服务。

如果这是真的,我怎么想达到预期的行为呢?我可以在交易方面坚持多个实体吗?服务不应该知道关于连接的任何信息......这些是我无法传播到业务层的详细实现。

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

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

2 个答案:

答案 0 :(得分:0)

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

所以你有两个选择。

  1. 在DAO层解耦A,B,C。每个人都有一个DAO。您已经看到了持久化bean的示例。服务层通过根据需要调用每个DAO来负责编排所有bean的持久性。它还负责维护关系。服务层还包装事务中的所有调用。

  2. 如果实体A,B和C密切相关,请拥有您现在拥有的实体。有一个DAO一起照顾A,B和C.在选项1中的服务层中所做的事情可以推送到DAO层。

  3. 除非你的项目包含很少的实体,或者你只是在玩jdbc,否则我建议使用像JPA / Hibernate这样的东西。我知道JPA是一种痛苦,但普通的jdbc将是一场噩梦。

答案 1 :(得分:-1)

您是否愿意使用EJB?他们有点处理业务层逻辑(如DB START .. ejb函数.. DB COMMIT)。我知道他们已经过时了,但我个人认为他们有一席之地。

交易是业务层问题,而不是DAO /数据层问题。