개발을 하고 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..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cd3J8c/btqNDpElmep/gXJlqpi56YABdU2PAZmHGK/img.png)
개요 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라는 폴더..
dataaccess를 혁신적으로 편하게 만들어준 MyBatis. SI를 수행하는 사람은 모르는 사람이 없는 스킬셋이다. 이 MyBatis를 사용할때 성능을 꽤 올릴수 있는 방법들이 있다. 대량데이터를 조회하는 query 설정에 fetchSize 를 넣어주자. 결론부터 얘기하자면 테스트하는 환경마다 다르겠지만 약 만건의 데이터를 넣고 조회하는 로직을 수행했을때 fetchSize를 넣은것과 안넣은것은 성능차이는 내가 테스트해본 환경에서는 15배정도 났다. 대용량 조회를 할 경우 fetchSize를 꼭 넣어주자. visualVM 으로 구간별 속도를 측정을 해봤을때 MyBatis의 DefaultResultSetHandler.shouldProcessMoreRows() 가 거의 대부분의 시간을 차지하고 있었다. 메..