PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2017/02/09 23:54:09
Name eosdtghjl
Subject [질문] java/jsp 다중테이블 결과 출력방법 질문
안녕하세요 초급개발자인데 도저히 궁금해서 질문드리게 되었습니다 ㅜㅜ

db에서 두개이상의 테이블을 join해서 얻은 select 결과 값을 테이블로 출력할때 일일이 VO클래스 만들지 않고 콜랙션 클래스로 간단히 출력하고 싶은데 어떻게 해야할지 모르곘습니다..

==============================
예를들어
A1VO 클래스에는 사번,이름,나이 라는 변수의 get,set매서드가 있고, (=게터,세터)
DB에는 A1 테이블에 사번(num),이름(name), 나이(age)라는 컬럼이 있으며 총 3개의 row 데이터가 있습니다.

그리고 B1VO 클래스에는 사번, 취미, 특기 라는 변수의 get,set 매서드가 있고,
DB에는 B1 테이블에 사번(num), 취미(hobby), 특기(skill)라는 컬럼이 있으며 총 3개의 row 데이터가 있습니다.

이때 jsp 화면에서 조회라는 버튼을 클릭했을때 아래에 html table로 (모든 데이터의) 이름,취미 2개 컬럼에 대한 값을 출력하고 싶습니다.
그래서 DAO 클래스의 쿼리문을 sql = "select a.name, b.hobby from A1 as a, B1 as b where a.num = b.num" 에 대한 결과 값을
while(rs.next()){  //rs는 rs = pstmt.executeQuery();

}
이런 반복문을 통해 변수에 담아서 return 시킨 뒤 컨트롤러(=액션단) 클래스에서 받아서 req.setAttribute("list", list);
이런식으로 리퀘스트 변수에 담아서 해당 url경로로 dispatcher.forward(req, resp); 이렇게 마무리하면

해당 url 경로의 jsp 에서 c:forEach var="list" items="${list}" varStatus="status" (=Expression Language)  이런식으로 반복시켜서
테이블 태그 td 사이에 ${list.name}, ${list.hobby} 이런식으로 하면 출력이 되는데요... (그러면 3줄(row) 데이터가 출력됨)

===================

문제는 이렇게 join결과를 출력할때마다 제 실력이 미천하여 일일이 VO클래스를 만들어주고 있습니다 ㅜㅜ
즉, 저위에 while문 마지막에 list에 담기전에
select 에서 나온 각 컬럼에 대한 값을 새로 생성했다고한 VO클래스 변수에 일일이 담은후 Arraylist 변수인 list에 add 시키고 있는데요..

이 방법으로 하니까 저런 다양한 테이블 조합에 대한 select문에 대한 출력을 할때마다 VO클래스를 만들어줘야 되더라고요..그게 너무 번거롭습니다..클래스 파일도 쓸데없이 많아지는것 같고요..
그래서 그거말고 hashmap이나 arraylist 같은 콜랙션클래스를 이용해서 바로 저장시키는 방법은 없을까요?
참고로 hashmap 변수를 만들어서 해보니까 한 key당 하나의 value만 저장가능해서 전부 덮어쓰기가 되더라고요..
hashmap이나 VO클래스 변수에 안담고 바로 Arraylist 변수에 담을수 없는 이유는 화면단에서 여러줄을 출력을 해야하므로 key, value 조합이 되어야 하기 때문이죠. (한줄만 출력할거면 Arraylist 변수에 담아도 상관없겠지만요;)

만약 제 실력이 미천하여 설명이 부족한 부분이 있다면 다시 설명드리겠습니다. 댓글 및 조언좀 부탁드립니다 OTL
감사합니다.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
17/02/10 00:25
수정 아이콘
ArrayList<HashMap<String, Object>> 이렇게 사용해보세요. ArrayList 안에 hashMap 넣으시면 됩니다.
아니면 같은 내용이라면 VO 한 개에 다 넣으셔도 됩니다.
eosdtghjl
17/02/10 08:16
수정 아이콘
오호 콜랙션 클래스 안에 콜랙션 제너릭을 쓰면 되는군요? 감사합니다~!
그런데 VO 한개에 다 넣으라는 말이 뭔말이지 이해가 안갔는데 아래 Unikys님 댓글의 2번에 대한 내용인가 보군요 저게 객체지향방법이라고 하니까 한번 시도해보겠습니다. 감사합니다!!
17/02/10 04:25
수정 아이콘
1. Spring 프레임워크를 사용하시면 관계 정의만 하시면 아주 쉽게 해결 가능합니다.
2. 객체지향을 고려한다면 A1용 HashMap 또는 ArrayList 따로, B1 HashMap 또는 ArrayList 따로하는 것은 좋지 않습니다. (물론 가능은 합니다.) 일반적으로는 A1VO의 HashMap 또는 ArrayList만 생성하고 A1VO 클래스 안에 ArrayList 멤버변수를 정의하여 해당 B1의 값들을 A1VO의 멤버로 넣는 것이 맞습니다. (Spring은 이것을 쉽게 해줍니다.)
3. 이렇게 할 수 없고 굳이 A1/B1 따로따로 두개의 HashMap/ArrayList를 두어야 한다면 HashMap<Key, List<B1VO>>로 하시는게 좋습니다. Key로 검색하면 여러 개의 B1V0가 있는 List를 받아서 순서대로 출력해주면 됩니다. 하지만 참고로 이렇게 개발하는 것은 15년전에나 하던 개발방식입니다.

아무리 급해도 객체지향 방식을 공부하시고 활용하시길 권하고 JSP를 쓴다면 아직 개발 초기단계면 Spring 프레임워크의 도입을 고민하셔도 좋을 것 같습니다. 요즘 JSP 개발자라면 Spring은 기본으로 하는게 좋은 것 같더라고요.
eosdtghjl
17/02/10 08:27
수정 아이콘
댓글과 조언 정말 진심으로 감사드립니다!
3번은 위에 길치님 댓글과 같은 방법이군요. 방금 간단히 흉내내봤는데 역시나 잘 될것같습니다. (사실 제가 초급개발자라 원했던 답은 이거였고요)

2번에 대한 내용은 충격적이네요 심지어 그게 객체지향적 개발이라고 하니까 더 충격이네여.. 왜냐하면 이전직장이 대기업 계약직이었는데 대규모 사이트를 Struts2로 개발했는데 단 한번도 겟셋전용 클래스에서 언젠가 쓰일지 모르는 임의의 Arraylist나 Hashmap 같은 콜렉션클래스 변수를 만들어 두는것을 진짜 듣도보도 못했거든요. 실제로 사용하는것을 본적도 없고요.

하긴 거기서는 자체개발한 API라는 것을 통해 지정된 API코드에 인자값을 (where절에 들어갈 값) 넣으면 알아서 select결과를 여러 row를 가진 XML 태그를 뱉어줘서 그걸 documnet.getElement 이런 클래스, 메서드를 통해 담아서 웹전송하고,
화면단에서는 그것을 받아 XPath로 원하는 엘리먼트의 값을 찾아 반복시켜 출력하고 뭐 그랬었거든요.
(사실 정확히 이해는 못하고 SM 유지보수업무라서 기존소스 그대로 가져다 썼었어요..)

그리고 지금 중소기업으로 이직해서 jsp로 개발하고 있는데요. Spring은 기왕이면 기본 spring말고 바로그냥 HRD재직자교육과정으로 전자정부표준프레임워크 Spring 3.x 교육을 여름이후에 들을 생각이에요.(spring 4.x는 전자정부표준 교육과정이 없어서 패스) 이후 제가 만든 이 프로그램에 도입할 예정이고요. (그러면 DAO가 빠지고 mybatis를 쓰게되겠죠)

----------- 여기까지는 중요한 내용이 아니고 주절주절해본거라 스킵하셔도 되구요 ---------------------------

뭐여튼 Unikys님 말씀대로 [일일이 콜렉션클래스(Arraylist나 Hashmap) 변수를 만들지 말고,
A1VO 클래스 또는 B1VO 클래스 등에 무조건 콜렉션클래스를 임의로 하나 만들어서 필요할때(여러table join) 거기에 값들을 집어넣어서 출력시켜보겠습니다.]


지금 출근해서 개발시작하니까 오늘 오후나 저녁에 결과가 어떠했는지 다시 댓글로 달겠습니다.
감사합니다~! ^^
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
100500 [질문] 스타1 유닛생산할때 사운드 이해가 안가네요 [5] purun2747 17/04/04 2747
100499 [질문] 아프리카 아동 후원 단체 추천 부탁드립니다 [4] Koscielny3646 17/04/04 3646
100498 [질문] 삿포로오사카도쿄 10박vs 오사카도쿄 9박 [14] Red Velvet4331 17/04/04 4331
100496 [질문] PS4 Pro와 UHD TV 문의 [5] 숨결3898 17/04/04 3898
100495 [질문] 인천 근교 맛집 문의 [5] 전력질주3637 17/04/04 3637
100494 [질문] 19)성인용 소설 연재하려면 어디가 좋을까요? [16] 하고싶은대로11592 17/04/04 11592
100493 [질문] 부동산 영업직(??)에 관련해서 질문입니다!! [7] DeStinY....5931 17/04/04 5931
100492 [질문] 이번 하스스톤 운고로 어때보이시나요? [16] 불같은 강속구4236 17/04/04 4236
100491 [질문] 경우의수 질문입니다. 아마도 중복조합과 관련이있는것 같습니다. [3] ski~2634 17/04/04 2634
100490 [질문] 여자친구를 미친듯이 좋아하다 보니 서운한 마음이 들때 [16] K515994 17/04/04 15994
100489 [질문] 아이오페 맨 에어쿠션 바른 후 클렌징에 대해 질문드려요 [6] 사구삼진3360 17/04/04 3360
100488 [질문] 정장(기성복)브랜드 추천 좀 해주세요 [9] 어른이유4807 17/04/04 4807
100487 [질문] 더 추가해야할 영양제가 있을까요? [15] cs3956 17/04/04 3956
100486 [질문] 지금 현재 통장 잔고를 가지고...??? [30] 표절작곡가4397 17/04/04 4397
100485 [질문] 롤 마법공학상자 질문입니다. [4] 바람이분다3216 17/04/04 3216
100484 [질문] 주식 재미로 해볼만할까요? [18] 나른한오후5494 17/04/04 5494
100483 [질문] 카페 오픈 초기에 보유해야할 기자재들 수량파악하는 방법을 알고싶습니다. [8] seotaiji3323 17/04/03 3323
100482 [질문] 서울 내 엠티장소 추천해주세요. [6] 기다3367 17/04/03 3367
100481 [질문] 저도 직장 이직 고민입니다.. [4] 해피팡팡3831 17/04/03 3831
100480 [질문] 뉴트리라이트 더블엑스 종합영양제 대체할만한거 있을까요? [2] 설아3509 17/04/03 3509
100479 [질문] 환갑잔치 질문입니다~! [2] 럭키루이2593 17/04/03 2593
100478 [질문] 맨소래담, 파스 (멘톨)의 효과에 대해서 [2] 삭제됨5447 17/04/03 5447
100477 [질문] (직장)이직고민 혹은 소방공무원 공부 [4] 깐따삐야4333 17/04/03 4333
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로