Java 관련/MyBatis, iBatis: 16개의 글
스프링 JDBC 프로그래밍 - MyBatis 연동 이 글에서는 Oracle DB 11g를 사용한다고 가정한다. 다른 DB를 사용해도 무방하다. MyBatis - Spring JDBC 프로그래밍을 쉽게 작업할 수 있도록 만든 라이브러리 - Mapper의 역할을 확장하여 쿼리문 작성을 모두 Mapper에서 할 수 있도록 지원한다. 의존성 추가 Spring JDBC, Oracle JDBC 드라이버, Apache Commons DBCP와 MyBatis 라이브러리 의존성을 추가한다. org.springframework spring-jdbc 5.1.9.RELEASE com.oracle ojdbc6 11.2.0.3 org.apache.commons commons-dbcp2 2.7.0 org.mybatis mybati..
1. 엘리먼트 : 루트 엘리먼트 namespace : 유일한 id 만드는데 도움을 준다. ex. 네임스페이스.id : select 구문에 사용 id : 필수속성, 유일한 id를 써야함 parameterType : 인자 타입, 보통 패키지까지 안쓰고 로 간결하게 씀. resultType : 필수속성, select의 결과로 반환된 resultSet이 매핑될 객체의 타입 : insert 구문에 사용 id parameterType keyProperty resultType : update 구문에 사용 id parameterType : delete 구문에 사용 id parameter : select문에서 resultType 대신 resultMap 을 사용 가능하다. 검색 쿼리가 단순 테이블 조회가 아닌 join 구..
1. 마이바티스란? 객체지향 언어인 자바의 관계형 데이터 베이스 프로그래밍을 좀더 쉽게 할수 있게 도와주는 개발 프레임워크이다. 자바는 jdbc api 를 제공해주지만, 이런 JDBC를 이용하면 1개 클래스에 반복된 코드가 존재, 한 파일에 java언어와 sql언어가 있어서 재사용성 등이 안좋아지는 단점이 있다. Mybatis는 jdbc의 이러한 단점들을 개선했으며, 개발자가 작성한 SQL 명령어와 자바 객체를 매핑해주는 기능을 제공하며, 기존에 사용하던 SQL 명령어를 재사용한다. 특징 한 두줄의 자바 코드로 DB 연동을 처리 SQL 명령어를 자바 코드에서 분리하여 XML 파일에 따로 관리 2. Ibatis 와 Mybatis Ibatis는 아파치 프로젝트였을때 이야기고, 구글로 넘어가면서 Mybatis..
INTRO iBATIS를 사용하는 중에 MyBatis와 쿼리문 실행 리턴결과가 다른것을 알았다. 따라서 잊지않기위해 정리해놓으려고 한다. iBATIS와 MyBatis의 리턴결과 차이 iBATIS MyBatis SELECT SELECT문에 해당하는 결과 SELECT문에 해당하는 결과 INSERT NULL 1(다중 INSERT도 마찬가지) UPDATE 1 UPDATE된 행의 갯수 반환(없으면 0) DELETE DELETE된 행의 갯수 DELETE된 행의 갯수(없으면 0) 출처: https://sdevstudy.tistory.com/19 [.]
Invalid bound statement (not found): 에러가 발생하는 이유가 몇 가지 있는데 아무리 찾아봐도 내 문제는 해결되지 않았다.에러 원인은 아래와 같다.Mapper Interface와 mapping되는 xml파일에 오타가 있는 경우 : 예를 들면 id와 Interface에 메소드명이 일치하지 않는 경우classpath에 경로가 잘못된 경우xml이 저장될 경로는 잘못 생성한 경우대부분 1번과 같은 에러가 발생하는데 이는 오타만 찾으면 금방 해결이 가능하다. 근데 3번과 같은 경우(내가 겪은 에러)는 쉽게 인지 하지 못하는 경우가 많다. 주의해서 생성할 필요가 있다.어떤 경우였냐면 나는 Intellij를 사용하는데 예를 들어Inteface package 경로 : net.woniper.s..
mybatis를 사용해 개발 하다가 insert한 데이터에 대한 key를 얻어야하는 경우가 생겼다. 고민 해봤지만 insert 후 다시 select를 해서 key를 얻어 와야겠다고 생각했다.하지만 이 방법은 몇가지 문제가 있다고 생각이 들었다.- key값 하나를 얻기 위해 쿼리를 2번 수행해야 하는 문제.- unique한 값을 알지 못했을 경우 정확한 key를 얻기 힘들다.(조건절 사용) 1. 흐름1) insert를 하기 위해 mapper에 parameter로 dto객체를 넘긴다.2) dto객체를 받은 mapper는 insert 쿼리를 수행한다.3) insert쿼리 완료 후 parameter로 받은 dto객체에 key값을 set(입력)한다.4) dto객체에서 key값을 사용한다.2. dto?1234567..
[ibatis] parameterMap, resultMap 지원되는 jdbcType, javaType 정리 ibatis 프레임워크를 통해 java와 jdbc 간 파라미터와 결과값을 객체에 매핑하여 전달한다. 여기서 JAVA와 JDBC에서 사용하는 클래스에 미묘한 차이가 있어, 매핑시에 문제가 발생하기도 한다. 예를 들어, 아래의 경우에 에러가 발생한다. SELECT ID, NAME, GRADE FROM EMPLOYEE WHERE ID = #id# EMPLOYEE 테이블에서 조회된 데이터 컬럼 ID, NAME, GRADE 는 resultClass인 Employee 객체의 id, name, grade 변수에 각각 매핑되어 반환될 것이다.여기서, GRADE 컬럼이 LONG 타입이고 Employee 객체의 gr..
resultMap의 property 속성 옵션 정리 ibatis에서 쿼리를 통해 실행된 결과를 리턴하는 타입을 정의하기 위한 을 명시한다. [Java Web/MyBatis, iBatis] - [ibatis] resultClass, resultMap 사용 기본 1. 의 옵션 값 빨간색으로 표시한 부분이 속성 값이며, [괄호]로 둘러싼 부분은 옵션이다. 은 자신의 id 를 가지며, class 에서 반환할 클래스의 형을 명시한다. 이 클래스는 아래 의 속성들으 포함하여, result 반환 객체를 매핑하고 생성한다.extends 옵션은 다른 resultMap의 이름을 명시하며, 이 명시된 resultMap의 프로퍼티들을 모두 포함한다. 이것은 자바의 상속을 이용해 확장하는 것과 같다. resultMap의 프로퍼..
parameterMap의 property 속성 옵션 정리 ibatis에서 쿼리를 실행하기 위해 넘어오는 parameter를 정의하기 위한을 명시한다. [Java Web/MyBatis, iBatis] - [ibatis] parameterClass, parameterMap 사용 기본 1. 의 옵션 값 빨간색으로 표시한 부분이 의 요소이며, [괄호] 로 둘러싼 부분은 옵션이다. (1) property - 파라미터 map의 property 속성은 mapping된 statement에 전달되는 파라미터 객체의 변수(get메소드) 이다.- 따라서 전달 파라미터 객체에는 get메소드가 구현되어 있어야 매핑이 가능하다. (2) jdbcType - jdbcType 속성은 이 property에 의해 셋팅되는 파라미터의 jd..
resultClass, resultMap 사용 기본 resultClass 와 resultMap 은 SQL의 조회 결과를 반환하는 방식을 지정하는 옵션이다. parameterClass와 parameterMap 이 쿼리 실행을 위해 input 되는 데이터를 정의하였다면, resultClass와 resultMap 은 결과 Output을 정의한다. [Java Web/MyBatis, iBatis] - [ibatis] parameterClass, parameterMap 사용 기본 1. resultClass resultClass는 parameterClass와 마찬가지로 패키지명을 포함한 반환 객체를 명시한다.결과는 JDBC resultSet이 해당 객체에 자동 매핑되어 결과를 반환하도록 한다. SELECT PER_I..