본문 바로가기

mybatis4

[MyBatis] Mapped Statements collection does not contain value for 열심히 쿼리문 작성하고 테스트 해보려고 하는데 띠용🫨🫨 에러다..🥲Mapped Statements collection does not contain value for ~ 이런 오류는 왜 발생하는걸까..?! 보통 아래 다섯가지의 경우가 발생한다고 한다! 1. Mapper ID가 동일하지 않은 경우XML파일에서 정의한 ID와 호출하는 ID가 다른 경우2. Parameter와 Bean의 필드명이 동일하지 않은 경우 3. XML파일에 정의된 namespace와      mapper파일에 접근하는 JAVA 파일에서 호출하는 namespace가 동일하지 않은 경우 4. MyBatis config파일에 mapper가 정의되지 않았거나 스펠링이 동일하지 않은 경우 5. mapper에 정의된 namespace가 같.. 2025. 3. 24.
[MyBatis] <![CDATA[ ]]> 사용해서 부등호 처리하기 MyBatis를 사용하다보면 비교연산자(부등호 등)를 사용해서 쿼리문을 작성할 때 만날 수 있는 ⚠️ 에러이다. The content of elements must consist of well-formed character data or markup. 비교연산자를 태그로 인식해서 발생하는 에러이다!이 에러를 피하는 방법은 두가지가 있다.✌️   1. CDATA 사용하기 CDATA가 파싱되지 않고 문자열을 문자 그대로 인식할 수 있도록 설정해준다.  CDATA는 로 부등호나 쿼리문을 감싸주면 된다. /* 부등호에 사용하기 */SELECT * FROM TB_ORDER WHERE ORDER_DT #{calFrom} /* 쿼리문에 사용하기1 */ SELECT * FROM TB_ORDER /* 쿼리.. 2025. 3. 6.
[MyBatis] 샵#{} 과 달러${} 차이 #{  }: PreparedStatement를 만들어서 파라미터를 바인딩 파라미터들은 SQL문에서 ?으로 표시되며 구문 분석을 할 때 하나의 필드 값으로 인식한다.따옴표로 묶은 하나의 값으로 인식한다. SELECT * FROM USER WHERE ID = #{파라미터명} ❗${} 보다는 보안상 더 안전해 많이 사용된다! 또한 캐시에 담아 재사용하기 때문에 반복적인 쿼리인 경우라면 더 효율적이다👍   ${  }문자열 그대로 SQL문에 들어간다.#{}이 PreparedStatement와 비슷하다면 ${}는 Statement와 비슷하다. 🚨 ${}에는 싱글 쿼테이션이 붙으면 실행이 안된다! 싱글 쿼테이션을 붙여야하는 경우에는 바깥에 붙여줘야한다.  ➡️➡️  '${id}'하지만 이렇게 하면 보안상 문.. 2024. 12. 9.
[MyBatis] if 조건절 문자열 비교하기 마이바티스에서 조건문에서 문자열을 비교하여 조회 조건을 추가하려는 SQL문을 짰다. AND (USE_YN = 'Y' OR USE_YN IS NULL) AND USE_YN = 'N' 위 코드처럼 짜고 실행하면 NumberFormatException 에러를 만날 수 있다... java.lang.NumberFormatException: For input string: "Y”    💡'Y' 를 문자열로 인식하는 것이 아니라 Char 타입으로 인식해서 발생하는 오류라고 한다. 조건절에서 문자열을 비교하고 싶은 경우에는 작은 따옴표(' ')가 아닌 큰 따옴표 (" ") 를 사용해야한다. 작은 따옴표와 큰따옴표의 위치를 바꾸는 간단한 방법도 있다. 하지만 프로젝트의 통일성을 위해 큰 따옴표의 HTM.. 2024. 11. 11.