티스토리 뷰
홈페이지 로직을 짜다보면 취미같은 데이터를 받게 되면 여러가지를 하나의 변수에 담게 된다. 그럴 때 서블릿으로 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 객체로 리턴 받을 수 있다.
'Back-end > Spring' 카테고리의 다른 글
Spring Session으로 로그인관리, ModelAndView사용하기 (0) | 2019.02.18 |
---|---|
Spring Bcrypt로 패스워드 암호화 하기 (2) | 2019.02.18 |
Spring STS의 root Context주소 바꾸기 (0) | 2019.02.16 |
Spring STS 설정하기#2 (데이터베이스 등록), 여러가지 파라미터 (0) | 2019.02.15 |
Spring STS 설정 하기#1 (0) | 2019.02.14 |