본문 바로가기

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를 사용하는 경우 더보기
[Java] Proxy를 사용하여 MyBatis의 Mapper 구현해보기 -3- 이전 글에서 Mapper를 MapperFactory라는 클래스를 통해 생성하여 구현하였었습니다. 앞에서도 말씀드렸지만 이전 예제는 Mapper의 return type이 고정되어 버린다는 단점이 있었습니다. 이 부분을 Generic을 사용하여 수정해보려고 합니다. 기본적으로 앞서 구현했던 Select 어노테이션과 User클래스, 그리고 User를 Select 할 수 있는 UserMapper외에 Depart 도메인에 대한 Mapper를 추가하겠습니다. Depart.java DepartDataMapper.java Depart와 Depart를 Select하는 Mapper입니다. 그 다음 이 Mapper를 대신하여 수행 될 ProxyHandler입니다. MapperProxyHandler.java 보시면 아시겠지만.. 더보기
[Java] Proxy를 사용하여 MyBatis의 Mapper 구현해보기 -2- 우선 앞선 포스트에서 말씀드렸듯이 http://pungjoo.tistory.com/17 이곳에서 Proxy API의 사용방법과 내용에 대해서 먼저 읽어주세요. 위 내용을 기반으로 예제가 작성됩니다. myBatis에서 사용하는 Mapper를 한번 비슷하게 구현해보겠습니다. 우선 Mapper에서 쿼리문을 지정하기 위해 사용될 Annotation을 만들어야 합니다. 실제 MyBatis와 동일하게 Select라는 이름을 사용하겠습니다. Select.java RetentionPolicy가 RUNTIME으로 되어 있으므로, 이 Annotation은 JVM이 실행되는 동안 사용가능하게 됩니다. 그리고 query라는 변수를 통해 위 Annotation은 쿼리식을 가지고 있을 수 있게 됩니다. 그 다음 필요한 클래스는 .. 더보기
[Java] Proxy를 사용하여 MyBatis의 Mapper 구현해보기 -1- 얼마전에 Ibatis 3.0에 해당되는 mybatis가 나왔었습니다. xml에 쿼리를 작성하지 않고도 어노테이션과 인터페이스만으로 쿼리를 실행하고 결과를 받을 수 있게 기능이 추가 되었는데요 대략적인 API의 사용 예를 보면 아래와 같습니다. MyBatis에서 Mapper의 사용예제 UserDataMapper.java 위와 같이 Mapper 인터페이스에 어노테이션을 활용하여 쿼리문을 넣어 놓으면 별도의 구현클래스를 만들지 않아도, SqlSession으로부터 Mapper를 얻어와서 바로 쿼리를 실행하고 그에 따른 결과를 받을 수 있게 되어있습니다. 물론 SqlSession에는 MyBatis에서 사용하기 위해서 기본적은 DB 관련 정보들을 properties로부터 읽어와서 사용하도록 되어있을 것 입니다. 어.. 더보기
[MyBatis] 첫 설정 및 실행 Ibatis의 버전이 3.X로 올라가면서 구글 코드에 새 둥지를 틀고 MyBatis라는 이름으로 개명하였다. 이번에 내부적으로 혼자 프로토타입을 만들 것이 있어서, Persistence 레이어의 프레임웍 땜시 항상 고민하다가... 간단하게 쓰면 되는데 아이바티스니 하이버네이트 이런거 쓰자니 너무 번거롭고... 간단하게나마 만들어 쓰자니 것도 좀 번거로웠던차에.. 몇몇 간단한 설정으로 사용 할 수 있다고 하여 한번 시도해보았다.. 어노테이션과 인터페이스만으로 사용이 가능한데.. 아마 프록시를 사용하는 것 같다.. 일단 xml 설정은 필요 없고 SqlSession을 리턴해주는 녀석을 만든다. MyBatis에서는 기본적으로 SqlSession이라는 놈을 사용해서 dml을 수행하는 것 같다.. 하이버네이트같네... 더보기