-
[SpringBoot] MYBATIS MySql LIKE 동적쿼리 에러Server/SpringBoot 2019. 12. 10. 17:55
** 주의 **
MySql myBatis를 사용할 때 동적 쿼리이다.
iBatis나 oracle, MSSQL은 쿼리를 다르게 짜주어야한다.
많은 사람들이 이 부분에서 삽질을 했다고 하는데..나 또한 여기서 오랜시간을 들여버렸다...(날렸다고 생각은 안한다...이렇게 배우는 거지......)
모르면 이렇게 무식하게 고생하는 watermelon(수박)에......
아무튼 거두절미하고 ..
처음에는 동적쿼리에서 LIKE 는 다르게 사용해야 하는지 모르고 일반 쿼리문 처럼 SQL을 짰다가 동작하지 않아서 많은 검색들을 해보았다. 사스가 stackOverflow...에서 발견한 것이
AND 컬럼명 LIKE CONCAT('%',#{동적쿼리값},'%')
바로 이런식으로 넣어 주어야 한다는 것!!!! 그런데 나는 여기서 또 난관에 부딪힌다..]
고쳐주었는데도 null pointer에러가 계속해서 났다. 이유가 무엇일까......한참을 고민해보았다...
WHERE 1 = 1 <if test="optionId=='id2'"> AND divcd LIKE CONCAT('%',#{valueById},'%') </if> <if test="optionId=='id3'"> AND subject LIKE CONCAT('%',#{valueById},'%') </if> <if test="optionId=='id4'"> AND content LIKE CONCAT('%',#{valueById},'%') </if>
처음 내 쿼리는 이런식으로 짜여져 있었다. 문제가 무엇인지도 모른채.....
맨 처음 (<if태그> 따옴표들 위치를 의심하긴했었지만 고칠 생각을 하지 않았었다. 왜냐하면 .. MyBatis 공식홈페이지? 같이 생긴 곳에서 ,, 나와있는 따옴표의 위치들과 내 코드가 일치했었기 때문.
내말인 즉슨 <if test="optionId=='id2'"> 이런 식으로 (" ' ' ") 이렇게 큰 따옴표 안에 작은 따옴표가 있었다.
ex)
그리고 내가 참조했었던..사이트...
https://mybatis.org/mybatis-3/ko/dynamic-sql.html
하지만 이 코드를 반대로 (' " " ') 이런식, 즉 작은따옴표 안에 큰따옴표로 설정해 주었더니 쿼리가 잘 동작해서 DB값을 잘 가지고 왔다!!,,, 허무함을 느낌과 동시에 성취감을 느꼈다.
구글은 엄청난 방대한 정보를 갖고있는 유익한 플랫폼이다. 하지만 무조건적인 정답은 될 수 없고 본인이 적당히 거를줄 아는 능력을 갖고, 정보를 사용해야 함을 또 다시 느끼는 계기가 되었다.
AND divcd LIKE CONCAT('%',#{valueById},'%') // 수정한 쿼리
'Server > SpringBoot' 카테고리의 다른 글
[SpringBoot] SpringBoot 되새기기 프로젝트 2일차 (2020/05/12) (0) 2020.05.12 [SpringBoot] SpringBoot 되새기기 프로젝트 1일차 (2020/05/11) (0) 2020.05.12 [Spring Boot] jar 파일 배포하는 법 (0) 2019.11.19 [Spring Boot] SVN 설치 및 사용법 (0) 2019.11.19 [SpringBoot] Lombok 사용 및 적용 방법 (0) 2019.11.18