티스토리 뷰





반응형

홈페이지 로직을 짜다보면 취미같은 데이터를 받게 되면 여러가지를 하나의 변수에 담게 된다. 그럴 때 서블릿으로 String[]에다 넣게 되고 이 데이터를 DB에 넣을 땐 하나의 String변수로 넣어줘야한다. 이전에는 로직마다 배열을 , 이나 공백으로 하나씩 넣어서 저장하고 가져올 때도 넣을 때 기준이 되었던 구분자로 짤라서 다시 가져와야만 했다. 하지만 STS에서 TypeHandler를 통해 그 방식을 상당수 줄일 수 있다.


예시)

다수의 값이 올 수 있는 취미 데이터를 String[]로 먼저 받고 DB에 넣기 위해 String변수를 하나 생성하여 공백으로 붙인 것. 이렇게 매 서블릿마다 했던 것을 하나의 템플릿처럼 만들어서 사용하는 것.



하나씩 시작해보자!!


일단 왼쪽에 저렇게 만들어줬고 클래스로 생성할 때 add로 TypeHandler를 검색해 추가하고 <String[]>이 처음에는 <T>이니까 화면처럼 바꿔주면 될 것 같다.


생성을 하면 위와 비스무리하게 나올 것이다. 간략하게 설명하자면 처음 setParameter는 String[]을 받아서 하나의 String으로 변환하는 작업의 메소드이고 그 아래 3개의 메소드는 반대로 DB에 String으로 저장된 데이터를 String[]로 바꾸는 과정


다시 처음으로 돌아가면 parameter라는 String[]을 String으로 join을 하는데 , 로 붙이는 것. 배열에 등산 코딩 여행이 있다면 그걸 하나의 변수에 등산,코딩,여행으로 바꾸는 과정이다. 그 뒤에 그 값을 DB에 넣음

아래 3개의 메소드는 이와 반대로 DB에서 가져온 String을 , 기준으로 배열에 담아 리턴하는 것 이다.


근데 이걸 사용하려면 패키지명부터 다 써줘야해서 불편하기 때문에 config.xml에 Aliases를 등록해서 사용하면 더 좋다.

하지만 조금 다른점이 있는데 밑에 패키지만 한번더 등록을 해줘야한다. 그 외 나머지는 동일하다.


이제 적용을 해보면 간단하게 위처럼 쓸 수 있다. 처음 빨간 네모는 결과값을 dev라는 클래스 형식에 맞춰서 받는데 devLang(취미)만 따로 처리해주기 위해 typeHandler로 재정의해서 받은거다. DB의 column="devLang"은 property="devLang"라는 키에 typeHandler="strArray" 라는 값을 넣는다. 

아래는 데이터 삽입인데 String[]을 typeHandler로 정의한 대로 바꾼 다음에 그 값을 넣는다는 의미.


*<resultMap에서 type="dev">한 이유는 DB의 컬럼이름과 vo객체의 멤버변수가 같기 때문에 저렇게 사용이 가능하며, property(key:value)가 아닌 vo 객체로 리턴 받을 수 있다.







  

반응형
댓글
반응형
최근에 달린 댓글
글 보관함
Total
Today
Yesterday
최근에 올라온 글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31