본문 바로가기

하루정리

2020.06.21 자바 프로젝트 새로운 발견

하나의 테이블에서 코드를 가져와서 그 코드로 새로운 테이블에서 정보를 가져오기 위해 

코드를 짰다.

저 배열에 count(검색결과 존재하는 수 만큼의 배열공간)을 확보하는게 너무 힘들었고 처음 해보는 거라 엄청나게 해맸다. 

다음은 List로 불러온 코드를 저 안에 담는 작업이다...

 

이렇게 해보니 역시나 배열의 공간 때문에 오류가 났다 

 

 

이건 List타입이 DTO이고 안에 nul 값이 들어가기 때문인 듯 하다.  

생각해낸 방법 

1 new DOT생성 

2 Mapper의 resultType 수정

 

1번은 너무 번거롭고 괜히 DTO를 하나 더 만드는 방식이니 우선 mapper의 resultType를 수정해보자 

 

 

수정하니 된다. 예쁘게 들어간 code를 확인 할 수 있다. 

 

int count = shoppingdao.wishCount(memberId);

System.out.println(count);
String[] wishArr= new String[count];
String wishArr1[] = wishList.toArray(new String[count]);
System.out.println("배열"+wishArr1);

하루동안 개고생한 arr 보존용

 

 

드디어 List로 불러온 값을 서버에서 정상 출력까지 확인했다. 

아...너무 험난한 과정이었으나.... 평생 기억에 남을 것 같다. 

야발....

하지만 이제는 하나만 출력이 된다.

안 써본 방법이 없는 듯 하다. List.add    .set .addAll등등 다 해봤는데 

 

됐다

 

위에 선언해둔 myWishList의 반환 값을 ProductDTO로 변환해서 내보냈더니 성공했다. 

다만 새로고침 시 함수가 재작동이 되어 값이 겺치는 문제가 발생한다. 그 부분을 해결하면 완벽

 

해결했다

 

전역변수로 boolen 타입의 start를 선언해주고 if문이 true 일때 돌아가며 

for문이 끝나면 false로 바꿔 새로고침을 하더라도 더 이상 for문이 돌아가지 않게 만들었다. 

if문을 하나로 합쳐서 해도 될 것 같은대 한번 시도해봐야겠다.

 

역시 하나로 합치면 오류가 난다

 

이부분은 그냥 분리를 해두는 게 좋을 듯 싶다. 

처음에는 되더라도 새로고침을 하면 바로 오류가 나버림. 

 

생각해보니 전역변수로 두지 않았으면 service가 돌 때마다 다시 선언되니까 if문을 쓸 필요가 없었는데 .......

이제와서 수정하기에는 다른 할 일이 너무 많아서 다음에 수정하도록 하자.....

 

 

마지막으로 오늘 정말 애타게 찾고 고민했던 배열의 함수를 정리하겠다. 

 

add, get, size, contains, remove 의 5가지 종류가 있다. 

 

add List에 자료를 넣을 때 사용하는 함수이고

List.add("넣을 값") 이 된다. 

 

.get는 List의 값을 가져올 때 사용한다.sysout(List.add(1)) 를 하면  List[1]의 값이 반환된다.  

 

.size는 List의 사이즈를 반환하는 함수이다. 예를들어 List[4]의 사이즈 List.size = 5이다

 

.contains는 List에 해당 값이 있으면 true를 없으면 false를 반환한다. 

List.contains("마우스")

값이 있을때 : true

값이 없을때 : false

 

Remove 함수에는 파라메타 타입이 두가지가 들어간다.삭제 값과 인덱스 값이다.

 

삭제 값.remove("삭제값") : 삭제가 성공하면 true 실패하면 false값이 반환된다.

 

인덱스 값

 List[1] = "사과" 이고 String result = List.remove(1);라면 sysout로 result를 출력 했을 때 "사과"가 출력된다.

 

List<ProductDTO> productDTOList = new ArrayList<ProductDTO>();

List<WishDTO> wishList = new ArrayList<WishDTO>();
boolean start = true;

//shoppingWishForm으로 이동하는 메소드
@Override
public ModelAndView shoppingWishForm(String memberId) {

    //wish에서 product를 조회할 코드를 가지고 오기 위한 wishList
    wishList = shoppingdao.wishList(memberId);
    // System.out.println(wishList);

    //For문을 조회된 컬럼만큼만 돌리기 위한 count
    int count = shoppingdao.wishCount(memberId);

    //조회된 product코드를 담기 위한 배열이다.
    String[] wishArr = wishList.toArray(new String[count]);
    //System.out.println(count);


    //배열에 담은 값을 담기 위한 객체 productCode
    String productCode;
    //System.out.println(wishArr[0]);
    //카운트가 존재할 때
    if (count > 0) {
        if (start) {
            //for문이 돌아간다 count만큼만
            for (int i = 0; i < count; i++) {
                //productCod에 wishArr의 i번째 값을 넣어주고
                //shoppingdao.myWishList(productCode)를 돌려준다.
                productCode = wishArr[i];
                // System.out.println("productCode:"+productCode);
                productDTOList.add(shoppingdao.myWishList(productCode));
                // productDTOList1.addAll(i,productDTOList);
                System.out.println(productDTOList);
            }
            start = false;
            mav.addObject("productDTOList", productDTOList);
            // System.out.println(productDTOList1);
            mav.setViewName("Shopping/ShoppingWishForm");
        } else {
            mav.setViewName("Shopping/ShoppingWishForm");
        }
        mav.setViewName("Shopping/ShoppingWishForm");
    } else {
        mav.setViewName("redirect:/Shopping/shoppingMainForm");
    }
    return mav;
}

 

저장을 하려니까 뭔가 아쉽다이 아이디어를 생각해내고부터 거진 1주일을 헤매였던 것 같다. 공부하자