본문 바로가기

Mybatis

[MyBatis] mybatis 쿼리 sample (EL) select log_date as logDate, '전체' as siteCode, site_code as siteCode, '전체' as keyName, category as keyName, sum(count) as value from category_count where log_date >= #{startLogDate} and log_date <= #{endLogDate} and site_code = #{siteCode} and category = #{firstKeyName} group by log_date 더보기
[mybatis] mapper.xml 과 mapper interface 처음에 이 관계를 몰랐는데.. 좀 가지고 놀다보니까.. 아~ 하는 부분이 있어서 정리.. 테스트를 위한 기본 셋팅 1. Dual.java 2.DualMapper.xml 3. DualMapper.java mapper xml을 보면 namespace가 있는데 이 namespace를 mapper interface의 이름과 맞춰주면 xml의 설정과 인터페이스에 선언한 설정을 같이 사용 할 수 있게 된다. 그리고 제약도 같이 적용이 된다. 즉 위의 상황에서 DualMapper의 selectAll2 메서드를 selectAll로 변경하게 되면 이미 mapper.xml에서는 selectAll이라는 id가 존재하기 때문에 에러가 발생한다. 결국, Mapper Interface의 메서드는 id로 @select 어노테이션은.. 더보기
[mybatis] ResultHandler의 사용 mybatis 셋팅 후 수십만건의 row를 가져와야 할 경우.. 혹은 단순히 Collection 타입으로 result를 받아야하는 상황이 아니라 Map 이런 형태일 경우 ResultHandler를 사용 할 수 있다. 내 경우는 수십만건을 한번 읽어서 가져와야 하는 케이스였는데.. 단순히 SqlSession으로부터 selectLIst를 하면 전체 row를 메모리에 올리기 때문에 어느정도 수준을 넘어가면 OOM이 발생한다. DB에 있는 수십만 row를 읽어서, 파일로 떨궈내거나 할 때.. 쓰면 되겠다. 1. mapper xml을 사용하는 경우 2. mapper interface를 사용하는 경우 더보기
[MyBatis] 첫 설정 및 실행 Ibatis의 버전이 3.X로 올라가면서 구글 코드에 새 둥지를 틀고 MyBatis라는 이름으로 개명하였다. 이번에 내부적으로 혼자 프로토타입을 만들 것이 있어서, Persistence 레이어의 프레임웍 땜시 항상 고민하다가... 간단하게 쓰면 되는데 아이바티스니 하이버네이트 이런거 쓰자니 너무 번거롭고... 간단하게나마 만들어 쓰자니 것도 좀 번거로웠던차에.. 몇몇 간단한 설정으로 사용 할 수 있다고 하여 한번 시도해보았다.. 어노테이션과 인터페이스만으로 사용이 가능한데.. 아마 프록시를 사용하는 것 같다.. 일단 xml 설정은 필요 없고 SqlSession을 리턴해주는 녀석을 만든다. MyBatis에서는 기본적으로 SqlSession이라는 놈을 사용해서 dml을 수행하는 것 같다.. 하이버네이트같네... 더보기