본문 바로가기

mybatis8

[Mybatis] entity mapping to camel case User 테이블에 있는 정보를 User 객체에 매핑하는 쿼리를 아래와 같이 짰다. SELECT user_id AS user_id , user_name AS user_name , tel AS tel , email AS email FROM users WHERE user_id = 'hajs' 근데 어째서 연락처랑 이메일만 가져오게 된걸까? 이유는 mybatis alias 을 snake-case 로 작성했기 때문이다. 그렇기 때문에 application.yml 또는 application.properties 에 아래와 같이 camel-case 로 매핑될 수 있도록 설정을 추가하자 :) mybatis.configuration.map-underscore-to-camel-case=true yml 로 작성하시는 경우엔 .. 2021. 7. 13.
[Mybatis] NumberFormatException: For input string "Y" error may exist in file [/Users/ha/.../MyMapper.xml] ### The error may involve kr.co....MyMapper.insertUserInfo ### The error occurred while executing an update ### Cause: java.lang.NumberFormatException: For input string: "Y" Mybatis 를 처음 써보는 것도 아닌데 NFE 라니..? 하면서 확인해보니까 아래처럼(=홀따옴표 비교) 사용하면 Mybatis 는 char 문자열로 판단하여 string 문자열과의 타입체크를 하기 때문에 NFE 가 발생한다고 한다. -- error syntax (') INSERT.. #{userInfo.. 2021. 6. 21.
[Mybatis] update 문 parametertype 을 map 으로 받아 foreach 처리하는 방법 서비스를 하다가, 모든 유저의 이름을 '홍길동' 으로 바꿔야 할때. 그 객체를 Map 으로 가지고 있는 경우에 대해 포스팅하겠습니다. (위에서 언급한 '그' Map 객체) // Map 구조 (id:userName} 'hajs' = {'홍길동'}, 'user01' = {'홍길동'}, 'user02' = {'홍길동'}; 우선 Mapper 에서 param 을 Map 으로 전달해주고, void updateUserName(@param("userNameMap") Map userNameMap); xml 에서는 (아래처럼) update 문에 foreach 돌리면서 처리하면 된다. UPDATE user SET user_name = CASE WHEN user_id = #{userId} THEN #{user_name} EN.. 2020. 5. 18.
[ERROR] org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) Mybatis 로 개발하다가 발생한 에러. 처음엔 에러만 읽고 무언가 Binding 을 못했다길래 1. 부분과 2. 쿼리에서 parameterType 부분과 3. @MapperScan('') 부분도 봤는데 잘 되어있어서 좀 헤맸다.. ㅎ 구글링하니까 Interface 경로를 못찾는 경우가 태반이라 그래서, 경로가 올바른지에만 집중했었는데 나의 에러는 경우가 조금 달랐다. 단순 오타가 아닌 경로의 문제 였으니까... 원인 : main/java/.../..Mapper.class 경로와 resources/.../..Mapper.xml 경로가 일치해야 한다. 해결 : m.. 2020. 4. 6.
[MyBatis] PK가 없으면 INSERT, 있으면 UPDATE -> LIST 로 처리하기 개발자라면 한 번 쯤은 들어봤을.. 있으면 INSERT, 없으면 UPDATE .. Model 을 하나씩 받아서 처리하면 더할나위 없이 좋겠지만, Model 을 List 로 받아서 처리해야 될 때도 있다. 여기까진 단순하게 조금만 구글링하면 나온다. // in mapper void insertUserInfo(@Param("userInfoList") List userInfoList); // in xml INSERT INTO user_info ( user_no, user_id, user_name ) VALUES ( #{userNo}, #{userId}, #{userName} ) 근데 이제 여기서 userNo(PK라고 가정하자) 가 없으면 INSERT, 있으면 UPDATE 해야 된다면 ?? // in xml I.. 2020. 4. 2.
[MyBatis] #{} 와 ${} 의 차이 MyBatis Framework 를 사용하여 개발을 하다가 문득, 이런 생각을 했다. " 다른 사람들 코드를 보면 ${} 로도 하던데, 내가 쓰는 #{} 와 무슨 차이가 있을까? " 결론만 말하자면, #{} 는 String 을 표현해준다. 즉, 앞 뒤로 홀따옴표(') 를 붙여준다 :) INSERT INTO user ( id, name ) VALUES ( #{id}, #{name} ) --> VALUES ('homeju1', '홈주') 반면, ${} 는 있는 그대로를 표현해준다. 그렇기 때문에 숫자형을 사용할 때 좋다 :) INSERT INTO user ( id, age ) VALUES ( #{id}, ${age} ) --> VALUES ('homeju1', 26) 2020. 4. 2.