본문 바로가기

Struts2 + iBatis

[iBatis/MyBatis에러] Caused by: org.xml.sax.SAXParseException: Element type "if" must be declared. Caused by: org.xml.sax.SAXParseException: Element type "if" must be declared. 다음과 같은 에러가 난다면, 아래를 고민해보자. 에러가 발생한 xml 파일을 열어보아서 태그가 있는지 확인해보자. 혹은 태그는 MyBatis2까지는 존재하지 않는다. (iBatis도 물론 존재하지 않는다) 는 혹은 로 대체 특정 값이 아닌, null인지 아닌지만 비교하고 싶을 때는 혹은 태그 이용. 는 로 대체해서 사용 에러가 난 코드 USER_NM = #USER_NM# 수정 후 AND USER_NM = #USER_NM# 더보기
MyBatis 에서 #{} 과 ${}의 차이 USER_NM = 홍길동이 담겨있다면, $의 경우 ''(쿼테이션마크) 없이 글자 그대로 들어간다. SELECT * FROM USER WHERE USER_NM IN ($USER_NM$) SELECT * FROM USER WHERE USER_NM IN (홍길동) #의 경우 파라미터가 String 형태로 들어와 자동으로 ''(쿼테이션마크)가 붙는다. 쿼리주입을 예방할 수 있어 보안 측면에서 유리하다. SELECT * FROM USER WHERE USER_NM IN (#USER_NM#) SELECT * FROM USER WHERE USER_NM IN ('홍길동') 더보기
Interceptor (미) 스트럿츠 2에 도입된 중요한 요소 중에 하나로 Action 객체가 실행하기 전/후에 호출된다. ⋅ 모든 액션 요청(Action Request)에 대해 공통적으로 적용되어야 하는 공통 기능들을 제공하는 모듈 ⋅ 인터셉터의 시작은 ActionInvocation 이 담당한다 ⋅ 액션 프록시가 ActionInvocation 의 invoke() 메소드를 호출 할 때 인터셉터의 실행이 시작된다. ⋅ 인터셉터의 작업이 끝나면, 또 다시 ActionInvocation 의 invoke() 메소드를 다시 호출 -> invoke() 에서드는 실행할 추가 인터셉터가 존재하는지 조사 -> 실행할 인터셉터가 존재한다면, 그 인터셉터의 interceptor() 메소드를 호출하는 식으로 인터셉터 체인을 형성 -> 만약 더 실행 할 .. 더보기