SAXParseException은 예전에 비해 보기가 많이 힘들어졌다. 왜냐면 XML을 많이 안쓰니까.. 그래서 기억에서 가물가물 할때쯤 또 SAXParseException이 발생을 하였다. SAXParseException은 찾기 쉽다. 왜냐면 xml 파일이 잘 구성되었는지 확인만 하면 되니까! 이번에 발생한 오류의 내용은 다음과 같다. Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 33; columnNumber: 10; The end-tag for element type "plugin" must end ..
iBatis의 설정파일인 SqlMapConfig.xml 에서 datasource 설정하는 방법에 대해 기술하고자 한다. application에 DB 정보를 입력하여 DB Access를 하는 JDBC 방식이 있고 application이 올라가는 WAS에 DB 정보를 입력하여 DB Access를 하는 JNDI 방식이 있다. JDBC 방식의 연결 ... 생략 ... 위의 설정에서 눈여겨 봐야 할 부분은 dataSource type을 SIMPLE 로 지정을 했다는 것이다. db.properties 파일에 작성한 datasource 정보를 가지고 와서 각 property 설정을 해주는 방식이다. JNDI 방식의 연결 ... 생략 ... 여기서는 dataSource type을 JNDI로 설정을 하였다. 필자는 WA..
MyBatis를 사용해서 select를 날렸을때 결과에 null이 나오면, 이에 대해 null을 허용할지 안할지를 설정을 통해 할 수 있다. null이 나온다고 하는건 column이 될 수도 있고 row가 될 수도 있다. 잘 이해가 안갈수도 있어서 예시를 들어 설명하자면 사용자 table이 있다고 하고 이중 특정 컬럼만 조회를 했을때 다음과 같은 결과가 나왔다. 빨간 네모를 친 부분은 row 의 모든 항목이 null인 것이고 파란 네모를 친 부분은 column 만 null 인 경우이다. 결과가 null인 경우 MyBatis에서는 별도의 설정을 하지 않으면 생략을 해버리기 때문에 원하는 결과가 나오지 않을 수 있다. 그럴때는 MyBatis 설정을 통해 내가 원하는 상황에 맞게 조치를 해주자. select ..
개발을 하고 was를 기동할때 아래와 같은 메세지를 만날 수 있다. Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [C:\oingdaddy\target\classes\~\oingService.sql]'; nested exception is org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 55; columnNumber: 22; The content of elements must consist of well-..
MyBatis를 활용해서 여러가지 프로젝트를 하다보면 같은 MyBatis인데도 다른 경우가 있다. 바로 제목에 나온것처럼 Mapping 방식의 차이가 있을수 있기 때문이다. Query ID Mapping 방식 vs Mapper Interface 방식 으로 프로젝트마다 사용되는 방식이 다르다. "이게 더 좋으니 이걸로 쓰세요" 하려는 글은 아니고 이런 방식이 있고 이런 특징들이 있다 라는걸 알리고자 한다. Query ID Mapping 방식 Query ID Mapping 방식은 필자에겐 가장 익숙하다. 왜냐면 가장 많이 써온 방식이기 때문이다. 이전의 포스팅에서 MyBatis를 설명할때도 이 Query ID Mapping 방식으로 설명을 했었다. SELECT CODE_NAME , TO_CHAR(UPD_DT..
개요 JAVA에서 DB 프로그래밍을 하기 위해서 JDBC가 제공되었다. JDBC는 RDB 사용을 위한 다양한 API를 제공하지만, DB가 방대해지고 각 data간 관계가 복잡해짐에 따라 다수의 메소드를 호출하고 관련 객체를 해제해야 하는 문제점이 심화되었다. 이러한 문제점을 해결하고 더욱 효과적으로 DB를 관리하기 위해 MyBatis가 고안되었다. MyBatis는 개발자가 지정한 SQL, 저장 프로시저 그리고 고급 매핑을 지원하여 개발 생산성을 높이는 persistence framework이다. 기존 JDBC만을 이용한 방식은 프로그램 소스안에서 직접 connection을 맺고 SQL문을 처리하고 rs.next() 등을 이용하여 하나씩 받아와야 해서 코드가 길어지고 SQL의 변경이 필요한 경우에도 jav..
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='_skiprows', mode=IN, javaType=class java.lang.Object, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #1 wi..
Server returned HTTP response code: 503 for URL: http://mybatis.org/dtd/mybatis-3-config.dtd 잘 되던 어플리케이션이 갑자기 위와 같은 오류를 내며 deploy가 되지 않는 문제가 있었다. 이 오류구문에 앞에는 mybatis-config.xml 파일이 IO Exception이 발생했다고 한다. 이 문제는 겪어본 바로는 크게 두가지 경우로 원인을 좁힐 수 있었다. 1. 코드에 문제가 있는 경우 코드상에 문제가 있는 경우 WAS에서 디플로이 되는 과정에서 위와 같은 ERROR를 뱉어낼 수 있다. 문제가 있다고 함은 - 중복되는 파일이 있는경우 (배포되는 과정에서 A라는 폴더에 C라는 파일이 존재하고 있는데 변경 된 파일 경로(B라는 폴더..