서포터즈님!!!! 원인을 찾았습니다. 갑자기 오늘 집에서 나오다가 문뜩 타임리프 문법 배웠던게 생각나서 코드를보닌까 *loginForm.html 전체 오류 메시지 로그인 ID 계정 아이디 오류 메시지 비밀번호 계정 비밀번호 오류 메시지 로그인 onclick="location.href='items.html'" th:onclick="|location.href='@{/}'|" type="button">취소 -> 이렇게 작성했었는데요 저번에 폼쪽 배울때 폼에 있는 th:action 쪽 url을 비워두면 현재 url로 간다는 말이 문뜩 생각이 났어요!! 전체 오류 메시지 로그인 ID 계정 아이디 오류 메시지 비밀번호 계정 비밀번호 오류 메시지 로그인 onclick="location.href='items.html'" th:onclick="|location.href='@{/}'|" type="button">취소 -> 이런식으로 비워두면 현재 url 경로로 간다는 말이 문뜩 생각나서 고치고 돌려보닌까 잘 동작합니다. 저 타임리프 용법이 이럴때 써먹는거였군요.... 아무 생각 없이 보기 좋으라고 다시 고쳐서 적어줬던 기억이 납니다.... 이렇게 설계한 이유가 다 있었군요......................
강사님 감사합니다. DB에 저장할땐 List 이 들어 있는 item 객체를 쓰고 itemDto 객체를 따로 만들어서 select 해올땐 Dto객체를 써서 regions의 타입을 String으로 바꿔주었고 1. 저장할때는 insert into item(item_name, item_price, item_quantity, item_open, regions) values( #{itemName}, #{price}, #{quantity}, #{open}, concat_ws(',', #{region} ) ) -> 이런식으로 ,로 List 을 DB에 저장하구요 2.select 할땐 select item_id as id, item_name as itemName, item_price as price, item_quantity as quantity, item_open as open, regions from item where item_id = #{id} -> 단순히 String으로 ,이 포함된 문자열로 받은다음 3. 컨트롤러에서 ItemDto findItem = im.findByItem(itemId); Item item = new Item(); item.setId(findItem.getId()); item.setItemName(findItem.getItemName()); item.setPrice(findItem.getPrice()); item.setQuantity(findItem.getQuantity()); item.setOpen(findItem.getOpen()); List list = new ArrayList (Arrays.asList(findItem.getRegions().split(","))); item.setRegions(list); model.addAttribute("item", item); DB에 있는 값을 itemDto로 새로 받아서 DB에 있는 regions 값이 ','로 구분되어져서 String으로 들어갔으니 다시 List 형태로 변환한다음 새로운 item에 setting한 뒤 view로 보냈더니 mapper에서도 강의처럼 동작 잘합니다. 으아 ㅠㅠ 감사합니다. 그래도 답변을 달아주신걸 참고해서 해결했습니다. 일단 mybatis사용한거랑 강의에서 진행한거 이렇게 두개로 강의 다시 시작하겠습니다 감사합니다.