'Framework/ORM'에 해당되는 글 6건
- 2008/08/22 [Hibernate- ORM] 클래스 상속 매핑 (1) - (전체 상속구조 : 테이블) 1: 1
- 2008/08/06 [iBatis] sql문 작성할때 유용한 조건문들
- 2008/03/11 [Hibernate] Spring framework에서 hbm.xml 파일 한꺼번에 관리하기.
- 2008/02/27 [iBatis] 다양한 쿼리문 작성하기.
- 2008/02/05 [Hibernate] NonUniqueObjectException
- 2008/01/21 [iBatis] oscache 적용하기
[Hibernate- ORM] 클래스 상속 매핑 (1) - (전체 상속구조 : 테이블) 1: 1

1. 전체 상속구조 하나당 테이블 하나
- 상속 구조를 하나의 테이블에 모두 담는 구조이다.
이러한 구조는 각 구현되는 클래스를 구분하는 코드값이 존재하여야 한다.
Bill관련 클래스 다이어그램
| <<table>> MoneyTransaction |
| seq transactedAccount transactedAccount classification transactedCost transactedContents transactedDate transLog billedTerm transactedType(구분) |
<class name="MoneyTransaction" table="MoneyTransaction">
<id name="seq" column="seq">
<generator class="identity"/>
</id>
<discriminator column="transactedType" type="string"/>
...
<!-- subclass안에 subclass가 가능하다. -->
<subclass name="Bill" discriminator-value="bill">
<property name="transLog" ..../>
<subclass name="FixedBill" discriminator-value="fixedBill">
<property name="billedTerm" column="billedTerm"/>
</subclass>
<subclass name="NormalBill" discriminator-value="normalBill">
</subclass>
</subclass>
</class>
흠... 대충 이해가 되나...discriminator라는 컬럼이 각각의 클래스들을 구분해주는 값이 되는것이다.
저 구분값때문에 저 상속구조가 하나의 테이블로 구현이 가능하다고도 할 수 있겠다.
[ hibernate가 생성하는 sql ]
insert into MoneyTransaction(seq, ... ,transactedType ) values(?, ?, ..., 'normalBill');
장점.
1. 매핑이 간단하다.
2. 성능이 좋다 (Join이 없으므로.)
단점.
1. 클래스마다 사용하지 않는 테이블의 컬럼들이 존재하게 된다. 각 컬럼의 값은 null로 채워지게 되겠다.
2. 새로운 하위 클래스가 추가되었을때 테이블이 변경된다. (코드는 당연히 변경)
'Framework > ORM' 카테고리의 다른 글
| [Hibernate- ORM] 클래스 상속 매핑 (1) - (전체 상속구조 : 테이블) 1: 1 (0) | 2008/08/22 |
|---|---|
| [iBatis] sql문 작성할때 유용한 조건문들 (0) | 2008/08/06 |
| [Hibernate] Spring framework에서 hbm.xml 파일 한꺼번에 관리하기. (0) | 2008/03/11 |
| [iBatis] 다양한 쿼리문 작성하기. (0) | 2008/02/27 |
| [Hibernate] NonUniqueObjectException (0) | 2008/02/05 |
| [iBatis] oscache 적용하기 (0) | 2008/01/21 |
property – 체크되기 위한 프라퍼티(필수)
<isPropertyAvailable>
프라퍼티가 유효한지 체크(이를 테면 파라미터빈의 프라퍼티이다.)
<isNotPropertyAvailable>
프라퍼티가 유효하지 않은지 체크(이를 테면 파라미터의 프라퍼티가 아니다.)
<isNull>
프라퍼티가 null인지 체크
<isNotNull>
프라퍼티가 null이 아닌지 체크
<isEmpty>
Collection, 문자열 또는 String.valueOf() 프라퍼티가 null이거나 empty(“” or size() < 1)인지 체크
<isNotEmpty>
Collection, 문자열 또는 String.valueOf() 프라퍼티가 null이 아니거나 empty(“” or size() < 1)가 아닌지 체크.
FIRST_NAME=#firstName#
</isNotEmpty>
'Framework > ORM' 카테고리의 다른 글
| [Hibernate- ORM] 클래스 상속 매핑 (1) - (전체 상속구조 : 테이블) 1: 1 (0) | 2008/08/22 |
|---|---|
| [iBatis] sql문 작성할때 유용한 조건문들 (0) | 2008/08/06 |
| [Hibernate] Spring framework에서 hbm.xml 파일 한꺼번에 관리하기. (0) | 2008/03/11 |
| [iBatis] 다양한 쿼리문 작성하기. (0) | 2008/02/27 |
| [Hibernate] NonUniqueObjectException (0) | 2008/02/05 |
| [iBatis] oscache 적용하기 (0) | 2008/01/21 |
[Hibernate] Spring framework에서 hbm.xml 파일 한꺼번에 관리하기.

xml에 정의를 해준다.
이 영향인지... hibernate의 hibernate.properties파일은 필요가 없어져 버렸다...
물론 hibernate.properties파일에 설정되야하는 내용은 Spring의 applicationXXX.xml파일에서 정의해야한다.
hbm.xml파일들도 물론 마찬가지인데...
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
<list>
<value>Code.hbm.xml</value>
<value>MajorCode.hbm.xml</value>
<value>MinorCode.hbm.xml</value>
<value>Account.hbm.xml</value>
.....
</list>
</property>
......
위의 코드처럼 *.hbm.xml파일들을 관리하게 되는데... 이거 여간 짜증나는 일이 아니다...
*.hbm.xml파일들을 한곳에 모아서 한꺼번에 관리할 수 없을까? 라는 생각이 들 것이다...
물론 방법이 있다... 친절한 스프링씨...
<property name="dataSource" ref="dataSource"/>
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/kr/trust/moneyplanner/domain/hbm</value>
</list>
</property>
....
'Framework > ORM' 카테고리의 다른 글
| [Hibernate- ORM] 클래스 상속 매핑 (1) - (전체 상속구조 : 테이블) 1: 1 (0) | 2008/08/22 |
|---|---|
| [iBatis] sql문 작성할때 유용한 조건문들 (0) | 2008/08/06 |
| [Hibernate] Spring framework에서 hbm.xml 파일 한꺼번에 관리하기. (0) | 2008/03/11 |
| [iBatis] 다양한 쿼리문 작성하기. (0) | 2008/02/27 |
| [Hibernate] NonUniqueObjectException (0) | 2008/02/05 |
| [iBatis] oscache 적용하기 (0) | 2008/01/21 |
<펌글:http://blog.paran.com/devtopia/13828096>
실무에서 SQL문을 작성하다 보면 동적인 쿼리문 작성을 작성해야 할 때가 많이 있다.
이때 지겹게 if~else if 문을 통해 아주 지저분한 소스 코드를 생성할 때가 왕왕 있게 마련이다.
이때 ibatis에서는 아주 깔금하게 구현할 수 있는 방법을 제공해 준다.
<statement id="dynamicGetAccountList" resultMap="account-result">
select * from account
<dynamic prepend="WHERE">
<isNotNull prepend="AND" property="firstName">
(acc_first_name = #firstName#
<isNotNull prepend="OR" property="lastName">
acc_last_name = #lastName#
</isNotNull>
)
</isNotNull>
<isNotNull prepend="AND" property="emailAddress">
acc_email like #emailAddress#
</isNotNull>
<isGreaterThan prepend="AND" property="id" campareValue="0">
acc_id = #id#
</isGreaterThan>
</dynamic>
order by acc_last_name
</statement>
상황에 의존적인 위 동적 statement로 부터 각각 다른 16가지의 SQL문이 생성될 수 있다. if-else구조와 문자열 연결을 코딩하는 경우 수백라인이 필요할 수도 있다.
동적 statement를 사용하는 것은 몇몇 조건적인 태그를 추가하는 것처럼 간단하게 작성할 수 있다.
이러한 조건들에 대해 간단히 정리하면 아래와 같다.
바이너리 조건 요소-바이너리 조건 요소는 정적값 또는 다른 프로퍼티값을 위한 프로퍼티값과 비교한다. 만약 결과가 true라면 몸체부분의 SQL쿼리가 포함된다.
바이너리 조건 속성
|
prepend |
Statement에 붙을 오버라이딩 가능한 SQL부분(옵션) |
|
property |
비교되는 property(필수) |
|
compareProperty |
비교되는 다른 property (필수 또는 compareValue) |
|
compareValue |
비교되는 값(필수 또는 compareProperty) |
|
<isEqual> |
프로퍼티가 값 또는 다른 프로퍼티가 같은지 체크 |
|
<isNotEqual> |
프로퍼티가 값 또는 다른 프로퍼티가 같지 않은지 체크 |
|
<isGreaterThan> |
프로퍼티가 값 또는 다른 프로퍼티 보다 큰지 체크 |
|
<isGreaterEqual> |
프로퍼티가 값 또는 다른 프로퍼티 보다 크거나 같은지 체크 |
|
<isLessThan> |
프로퍼티가 값 또는 다른 프로퍼티 보다 작은지 체크 |
|
<isLessEqual> |
프로퍼티가 값 또는 다른 프로퍼티 보다 작거나 같은지 체크 사용법 예제) <isLessEqual prepend="AND" property="age" compareValue="18"> ADOLESCENT = 'TRUE' </isLessEqual> |
단일 조건 요소-단일 조건 요소는 특수한 조건을 위해 프로퍼티의 상태를 체크한다.
prepend statement에 붙을 오버라이딩 가능한 SQL부분(옵션) property 체크하기 위한 프로퍼티(필수)
|
<isPropertyAvailable> |
프로퍼티가 유효한지 체크 (이를 테면 파라미터의 프로퍼티이다.) |
|
<isNotPropertyAvailable> |
프로퍼티가 유효하지 않은지 체크 (이를 테면 파라미터의 프로퍼티가 아니다.) |
|
<isNull> |
프로퍼티가 null인지 체크 |
|
<isNotNull> |
프로퍼티가 null이 아닌지 체크 |
|
<isEmpty> |
Collection, 문자열 또는 String.valueOf() 프로퍼티가 null이거나 empty(“” or size() < 1)인지 체크 |
|
<isNotEmpty> |
Collection, 문자열 또는 String.valueOf() 프로퍼티가 null 이아니거나 empty(“” or size() < 1)가 아닌지 체크 사용법 예제) |
다른 요소들
Parameter Present : 파라미터 객체가 존재하는지 체크
Parameter Present Attributes : prepend - the statement에 붙을 오버라이딩 가능한 SQL부분
|
|
|
|
|
|
Iterate : 이 태그는 Collection을 반복하거나 리스트내 각각을 위해 몸체 부분을 반복한다.
Iterate Attributes :
prepend - the statement에 붙을 오버라이딩 가능한 SQL부분 (옵션)
property - 반복되기 위한 java.util.List타입의 프로퍼티 (필수)
open - 반복의 전체를 열기 위한 문자열, 괄호를 위해 유용하다. (옵션)
close - 반복의 전체를 닫기 위한 문자열, 괄호를 위해 유용하다. (옵션)
conjunction - 각각의 반복 사이에 적용되기 위한 문자열, AND 그리고 OR을 위해 유용하다. (옵션)
|
|
java.util.List 타입의 프로퍼티 반복 사용법 예제) <iterate prepend="AND" property="userNameList" open="(" close=")" conjunction="OR"> username = #userNameList[]# </iterate> 주의:iterator요소를 사용할 때 리스트 프로퍼티의 끝에 중괄호[]를 포함하는 것은 중요하다. 중괄호는 문자열처럼 리스트를 간단하게 출력함으로부터 파서를 유지하기 위해 리스트처럼 객체를 구별한다. |
'Framework > ORM' 카테고리의 다른 글
| [Hibernate- ORM] 클래스 상속 매핑 (1) - (전체 상속구조 : 테이블) 1: 1 (0) | 2008/08/22 |
|---|---|
| [iBatis] sql문 작성할때 유용한 조건문들 (0) | 2008/08/06 |
| [Hibernate] Spring framework에서 hbm.xml 파일 한꺼번에 관리하기. (0) | 2008/03/11 |
| [iBatis] 다양한 쿼리문 작성하기. (0) | 2008/02/27 |
| [Hibernate] NonUniqueObjectException (0) | 2008/02/05 |
| [iBatis] oscache 적용하기 (0) | 2008/01/21 |
이미 Detached되어 있는 객체를 다시 load해서 사용하려고 할 때 나는 에러이다.
다시 Persistent State로 만들어주면 되겠지만....
난 그냥 객체들을 Singleton으로 만들어 버렸다... static Map을 만들어서... 쩝
'Framework > ORM' 카테고리의 다른 글
| [Hibernate- ORM] 클래스 상속 매핑 (1) - (전체 상속구조 : 테이블) 1: 1 (0) | 2008/08/22 |
|---|---|
| [iBatis] sql문 작성할때 유용한 조건문들 (0) | 2008/08/06 |
| [Hibernate] Spring framework에서 hbm.xml 파일 한꺼번에 관리하기. (0) | 2008/03/11 |
| [iBatis] 다양한 쿼리문 작성하기. (0) | 2008/02/27 |
| [Hibernate] NonUniqueObjectException (0) | 2008/02/05 |
| [iBatis] oscache 적용하기 (0) | 2008/01/21 |
<flushInterval minutes="5" />
</cacheModel>
<select id="getTopRanking" resultClass="com.nhn.dejava.util.DataMap"
parameterClass="java.util.Map" cacheModel="getTopRankingCache">
<![CDATA[
select asldkfjaslkjf;laskjdf lj;l <<- 쿼리 쓰는 부분....
]]>
</select>
5분마다 캐쉬 리프레쉬.....
머 iBatis에선 이렇게 캐쉬를 적용한다...
'Framework > ORM' 카테고리의 다른 글
| [Hibernate- ORM] 클래스 상속 매핑 (1) - (전체 상속구조 : 테이블) 1: 1 (0) | 2008/08/22 |
|---|---|
| [iBatis] sql문 작성할때 유용한 조건문들 (0) | 2008/08/06 |
| [Hibernate] Spring framework에서 hbm.xml 파일 한꺼번에 관리하기. (0) | 2008/03/11 |
| [iBatis] 다양한 쿼리문 작성하기. (0) | 2008/02/27 |
| [Hibernate] NonUniqueObjectException (0) | 2008/02/05 |
| [iBatis] oscache 적용하기 (0) | 2008/01/21 |


Prev