본문 바로가기

Mybatis

[MyBatis] 첫 설정 및 실행

Ibatis의 버전이 3.X로 올라가면서
구글 코드에 새 둥지를 틀고 MyBatis라는 이름으로 개명하였다.
이번에 내부적으로 혼자 프로토타입을 만들 것이 있어서, Persistence 레이어의 프레임웍 땜시
항상 고민하다가...
간단하게 쓰면 되는데 아이바티스니 하이버네이트 이런거 쓰자니
너무 번거롭고...
간단하게나마 만들어 쓰자니 것도 좀 번거로웠던차에..
몇몇 간단한 설정으로 사용 할 수 있다고 하여 한번 시도해보았다..

어노테이션과 인터페이스만으로
사용이 가능한데.. 아마 프록시를 사용하는 것 같다..

일단 xml 설정은 필요 없고
SqlSession을 리턴해주는 녀석을 만든다.

MyBatis에서는 기본적으로 SqlSession이라는 놈을 사용해서 dml을 수행하는 것 같다..
하이버네이트같네.. 이름이 꼭...

그리고, Domain 클래스를 만든다.

그냥 DTO 역할을 하는 클래스이다.

이제 Mapper인터페이스를 만들어야 하는데, 어노테이션을 사용하여 간단한 SQL문을
바로 쓰고 실행 할 수 있게 되어 있다.

Mapper에 대한 Full Description은 
http://java.dzone.com/articles/getting-started-ibatis-mybatis-0
여기에 잘 나와있는 듯 하다.

난 그냥 간단하게 쓸거라 아래와 같이 작성하였다.

다른건 뭐 다 알겠는데
insert를 할 때 다량의 데이터 insert를 하는 방법을 잘 못 찾아서...
파라메터로 List<Object>를 넘기니 List 자체를 파라메터 Object로 인식하고
SQL문의 바인딩 변수에 전부 null이 들어가는 현상이 발생하였다.

그리고, 또 하나는 nullable 변수에는 위 처럼 jdbcType을 지정해 줘야 한다는 것...

일단 위와 같이 작성하고..DAO에서 다량의 데이터 insert를 처리해주기로 하였다.

insert 부분을 보면 openSession시에 ExecutorType.Batch 타입으로 Session을 get하도록 해주었다.

1천만건의 데이터를 넣어줘야 하는데, List에 1천만건을 넣어서 파라메터로 넘겨주면
out of memory 에러가 발생하므로, 바깥에서 List가 5만건이 될 때마다 dao.insert 문을 호출하여
insert하도록 해주었다.

로컬에서 돌려보니 10150000건 insert에 13분 정도 소요된다..

설정이 간단하여, 프로토타입 재빨리 개발 할 필요가 있을 때
유용하게 사용하게 될 것 같다..

근데 대략.. 요즘 나오는 자바 프레임워크들은
진짜 설정이나 이런게 너무 많고 복잡해서.. 좀 접근하기가 힘들다 -_-;

유연성 <-> 간편함

이 두가지를 모두 만족하는 그런 패턴은 없을까...