쿼리 수정 중 문제 발생!

제목의 저 오류가 생김

 

어디서 생겼냐면

데이터 총 개수 구하기

<select id="cnt" resultType="int">
   select count(*) from user_table
</select>

회원가입 시 이미 존재하는 id인지 확인하기

<select id="idchk" parameterType="String" resultType="int">
   select count(*) from user_table where id=#{id}
</select>

비슷하게 생긴 이 둘을 하나로 합쳐도 괜찮지 않을까 싶어서 수정함

<select id="cnt" parameterType="String" resultType="int">
   select count(*) from user_table
   <where>
      <if test="id!=null">
         id=#{id}
      </if>
   </where>
</select>

파이널 때도 잘 써먹은 쿼리.... 그리고 여기서 오류가 뜸

 

원인

동적 쿼리에서 if문은 파라미터 타입 클래스의 getter를 호출하는 방식인데 String에는 getter 개념이 정의되어있지 않기 때문에 String으로 넘긴 값을 조건으로 달면 저렇게 오류가 난다고 한다
출처는 https://bcdragonfly.tistory.com/10 이 블로그!
해결도 이 블로그를 보고 했음! 

 

해결방법

1. string 값을 dto나 map에 넣어 parameter로 보내기

2. 변수명 대신 value로 바꿔 사용하기

 

정리하면 if문으로 null 체크를 할 거면 parameterType을 String으로 보내지 말고 dto를 이용하거나 map에 넣거나 하는게 일반적인 방법이라고 함
하지만.. 그렇게 되면 체크할 때마다 새로 dto 객체를 생성해야 하는데 이건 좀 비효율적이지 않나? 하는 생각이 들어서
그냥 쿼리를 합치지 않고 하던대로 따로 사용하기로 결정!

 

뻘짓 완

'개인 > 정리' 카테고리의 다른 글

데이터 페이징 처리  (0) 2022.07.19
ajax 썸네일 출력하기  (0) 2022.07.14
220713 file -> db -> json  (0) 2022.07.13
220117 BroadCasting 정리  (0) 2022.01.22
220114 File 내보내기 정리  (0) 2022.01.16

+ Recent posts