2011-02-24 1 views
-1

내가 DAO 계층을 설계해야 개체 내 연락처 정보, 거래 세부 정보, 주소 정보.DAO 레이어는 data.Below이 시나리오 모두 나에게 돌려, 내가보기를 호출하고 DAO 객체에서

마지막으로 나는 모든 데이터를 얻고 있으며 개별 엔티티 (addressvo, transactionvo 및 contectvo)를 참조합니다.

결과 집합을 반복 할 경우 데이터를 분리하여 값 개체에 할당 할 수 있습니까?

안부, Chaitu

+2

무엇이 질문입니까? 코드를 보여 주려고 아무것도 시도한 적이 있습니까? –

+0

@Amir Raminf : 나는 어떤 코드도 가지고 있지 않다. 나는 디자인 레벨에있다. 사람들이 비슷한 문제에 직면하는지 물어 본다. – user569125

+0

다시, 나는 질문을 보지 않는다. :) 당신이 말한 모든 것은 성명이었습니다. –

답변

0

는 덤프-에 안 전체 코드를 하나의 DAO에. 4 개의 DAO를 보유하십시오. 좋은 디자인 중 하나는 테이블 당 하나의 DAO를 갖는 것입니다. 따라서 AddressDAO, TrandactionDAO, ContactDAOUserDAO입니다. 네 개의 테이블, 이제

addresses 
    a_id 
    user_id (FK) 
transactions 
    t_id 
    user_id (FK) 
contacts 
    c_id 
    user_id (FK) 
users 
    user_id (PK) 

을해야하는 경우, 당신은 속성의로 UserDAO.searchUsers(...)이 방법은 다른 VO로와 UserVO를 반환 쓰기 :

List<UserVO> UserDAO.searchUsers(...){ 

    //search query returns user_ids 
    //populate the UserVOs 

    //for each user_id 
     userList.add(UserDAO.getUserById(user_id)); 

    //return userList 
} 

UserVO getUserById(...){ 
    //get UserVO from users tables 
    UserVO uvo = ...; 

    //populate rest of the attributes 
    uvo.setAddress(AddressDAO.getAddress(user_id)); 
    uvo.setTransactions(TransactionDAO.getTransactions(user_id)); 
    uvo.setContacts(ContactDAO.getContacts(user_id)); 

    return uvo; 
} 

업데이트 코멘트 후

하지만 여기서 나는 모든 정보를 입수 중입니다. 전자 결과 집합 개체. 여기에 하나의 뷰가 있습니다. 전체 개체를 반환합니다.

네, 관계형 데이터베이스를 개체에 매핑하는 동안 표준 딜레마입니다. 한편으로는 하나의 쿼리에 모든 데이터가 있지만 지저분한 개체 생성 (원하는 개체)이 있습니다. 다른 한편으로는, 당신은 더 깨끗한 Java 코드를 가지고 있지만, 다중 DB 히트 (위에서 제안한 것)가 필요합니다.

개체를 채우려는 경우 간단하지만 지저분합니다. 사용자와 컨테스트간에 일대 다 매핑을 사용하는 것 같습니다. 사용자 및 거래. 이 경우 사용자 ID 당 여러 행을 갖게됩니다. 아래의 단계를 따르

while(resultSet.next()){ 
    long userId = resultSet.getLong("user_id"); 
    UserVO uvo = //populate the userVO with users table data 
    do{ 
    //create List of *unique* contactVO, transactionVO and addressVO set them to userVO 
    }while(resultSet.next() && resultSet.getLong("user_id") == userId); 

    //check if resultSet is over? else user_id changes move back one row 
    if(!resultSet.isAfterLast()) 
    resultSet.previous(); 
    else 
    break; //resultset exhausted 
} 

보시다시피, 당신은 결과 집합을 구성 요소를 제초 본질적으로이다. 그리고 지저분합니다. 나는 오히려 반대하고 싶다.

+0

@Nishant : 답변 해 주셔서 감사합니다.하지만 여기에 하나의 결과 집합 개체에 모든 정보가 표시됩니다. 여기에는 하나의보기가 있으며, 전체 개체로 반환됩니다. – user569125

+0

안녕하세요, 순수 jdbc로 여러 엔티티를 처리하는 것이 어려울 경우 최대 절전 모드로 처리 할 수 ​​있습니까 – user569125

+0

@ user569125 – Nishant