Eclipse Plugins for JBoss technology

Posted at 2011.01.11 11:29 | Posted in Tools/Eclipse
http://www.jboss.org/tools/download/update

http://www.jboss.org/tools/download



하이버네이트를 포함한 JBoss Tools 를 설치하는 방법입니다.

이클립스 버젼에 맞쳐서 깔아야 합니다.

Eclipse 3.3.x Europa - JBoss Tools 2.1 - http://download.jboss.org/jbosstools/updates/JBossTools-2.1.2.GA/

Eclipse 3.4.x Ganymede - JBoss Tools 3.0 - http://download.jboss.org/jbosstools/updates/stable/ganymede/

Eclipse 3.5.x Galileo - JBoss Tools 3.1 - http://download.jboss.org/jbosstools/updates/stable/galileo/

Eclipse 3.6.x Helios - JBoss Tools 3.2http://download.jboss.org/jbosstools/updates/development/

'Tools > Eclipse' 카테고리의 다른 글

Eclipse JVM 경로 지정하기  (0) 2016.09.13
Eclipse + SVN Plugin  (1) 2012.03.29
Maven Integration for Eclipse  (0) 2012.02.20
Eclipse + TPTP Remote  (1) 2012.01.20
Eclipse + TPTP (Eclipse Test & Performance Tools Platform)  (4) 2012.01.01
Eclipse + MyBatis Generator  (1) 2011.07.04
installation Oracle Enterprise Pack for Eclipse  (2) 2011.05.22
Eclipse + STS (SpringSource Tool Suite)  (1) 2011.01.16
Eclipse Plugins for JBoss technology  (1) 2011.01.11
Properties Editor  (1) 2009.11.17
UTF-8 설정  (0) 2009.11.16
  1. 비밀댓글입니다

댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Forecast Repository

Posted at 2010.11.30 15:05 | Posted in Mini Project

2011년 2월 10일 - 수정 사항
 - json-taglib 수정(http://antop.tistory.com/99). 이에 따른 js에서 강제 파싱부분 제거
 - ExtJS 3.3.1 업그레이(아무 변화 없음 -_-) 및 필요한 라이브러리만 담음
 - IE에서 열라 느린거 해결 못함 ㅠ_ㅠ

forecast.part1.rar
forecast.part2.rar

해보시려면 sql(/WEB-INF/sql/*.sql)로 스키마 세팅하고, WEB-INF/applicationContext.xml 에서 DB 설정을 해줘야 합니다.

 


http://antop.nerv.kr/forecast


새로 개편하여 화면을 만들었습니다. 데이터베이스 구조만 빼고 완전 다 바뀌었군요....

  1. Cron을 이용하여 돌리던 배치(스케쥴링)를 Quartz를 이용(Spring과 연동)하여 처리 하였습니다.
  2. 화면은 ExtJS 3.2.1 + (Hightcharts 2.0.5 + jQuery 1.4.3)을 사용하였습니다
  3. 서버단은 쓰던대로 Spring 2.5.6.SEC02를 사용하였습니다.

아래 그림은 전체 흐름 구상입니다.



그림의 서버단은 다 따로 돌아가게 그려졌는데 -_-.. 다 스프링과 연동되어 돌아갑니다.

클라이언트에서는 풀 AJAX를 사용하고 서버에서는 url로 요청을 받고 json으로 응답합니다.

클라이언트의 레이아웃 구성은 아래 그림과 같습니다.



center의 tab panel의 레이아웃 구성은 아래와 같습니다.




Parameter

URL 요청 파라미터와 응답 아래와 같습니다.

- 현재날씨 목록 : http://antop.nerv.kr/forecast/whole.do?action=list&stn_id=100&from_date=2010-07-01&to_date=2010-07-14

 파라미터  필수  포맷  설명 
 stn_id  ○   숫자  지역 코드 
 from_date  ○   yyyy-MM-dd  시작 날짜
 to_date  ○  yyyy-MM-dd  마지막 날짜

- 현재날씨 상세 : http://antop.nerv.kr/forecast/whole.do?action=detail&stn_id=100&date=2010-07-08
 파라미터  필수  포맷  설명
 stn_id  ○  숫자  지역 코드
 to_date  ○  yyyy-MM-dd  날짜

- 현재날씨 제한 날짜 : http://antop.nerv.kr/forecast/whole.do?action=limit

- 현재날씨 지역 목록 : http://antop.nerv.kr/forecast/whole.do?action=stn


- 동네예보 목록 : http://antop.nerv.kr/forecast/town.do?action=list&area=1100000000&from_date=2010-08-02&to_date=2010-08-10
 파라미터  필수  포맷  설명
 area  ○  숫자(10자리)  지역 코드
 from_date  ○  yyyy-MM-dd  시작 날짜
 to_date  ○  yyyy-MM-dd  마지막 날짜

- 동네예보 상세 : http://antop.nerv.kr/forecast/town.do?action=detail&area=1100000000&date=2010-10-01
 파라미터  필수  포맷  설명
 area  ○  숫자(10자리)  지역 코드
 date  ○  yyyy-MM-dd  날짜

- 동네예보 제한 날짜 : http://antop.nerv.kr/forecast/town.do?action=limit

- 동네예보 지역 목록 : http://antop.nerv.kr/forecast/api.do?action=area
 파라미터  필수  포맷  설명
 parent  ×  숫자(10자리)  상위 지역 코드


- 주간예보 목록 : http://antop.nerv.kr/forecast/week.do?action=list
 파라미터  필수  포맷  설명
 location  ○  문자(8자리)  도시 코드
 from_date  ○  yyyy-MM-dd  시작 날짜
 to-date  ○  yyyy-MM-dd  마지막 날짜

- 주간예보 제한 날짜 : http://antop.nerv.kr/forecast/week.do?action=limit

- 주간예보 지방 목록 : http://antop.nerv.kr/forecast/api.do?action=province

- 주간예보 도시 코드 : http://antop.nerv.kr/forecast/api.do?action=location
 파라미터  필수  포맷  설명
 province  ×  문자(8자리)  지방 코드


Database Structure

테이블은 하이버네이트로 생성하였습니다.

동네예보



주간예보



전국예보



※ Toad Data Modeler 3.5 로 뽑아낸 데이터베이스 구조 입니다.












hey30 님의 질문 답변

아래는 조금 더 자세하게 그린 그림입니다.



이 프로젝트를 이해 하려면 최소한 'ExtJS'와 'Spring MVC', 'JSON' 정도는 아셔야 합니다. ㅠ_ㅠ

클라이언트단과 서버단은 완전히 분리 되어 있습니다. 100% AJAX[각주:2]로만 주고 받습니다.

클라이언트단은 꼭 ExtJS가 아니어도 되고, 서버단도 역시 뭘로 만들던지 JSON으로 응답만 하면 됩니다.



클라이언트에서 서버와 통신하는 객체는 JsonStore 밖에 없습니다. Store에서 알아서 서버에 요청 후 받아서 처리합니다.

store의 config properties를 autoLoad: true로 설정 하면 자동으로 요청 url을 만들어 서버단에 요청합니다.

그러면 서버단에서 contorller - (service - service impl) - (dao - dao impl) 을 거쳐서 controller에서 mav를 리턴하면 마지막에 해당 JSP 까지 가게 됩니다.

JSP에서는 jstl + json-taglib를 이용해서 JSON을 출력합니다.

그걸 다시 클라이언트단의 ExtJS Store에서 받아서 처리하게 됩니다.



vo(Value Object)는 뭐 자기가 정해서 쓰는거니.. 적당히.... ㅠ_ㅠ

  1. 계속해서 발생되는 자료를 축적하여 두었다가 일정 시점 단위로 일괄해서 처리하는 자료처리 방식으로서 배치 데이터 처리라고도 한다. [본문으로]
  2. 비동기 방식의 자바스크립트와 XML(Asynchronous JavaScript and XML). 웹상에서 JavaScript + CSS + DHTML + DOM + XMLHttpRequest + XML 등과 같은 현존하는 스크립트 언어를 통해서 서버와 통신을 하는 개발 방식 [본문으로]

'Mini Project' 카테고리의 다른 글

Image Pyramid  (0) 2014.01.30
Proftpd Manager  (0) 2012.12.10
게시판 2.0  (5) 2011.07.27
Sudoku  (0) 2011.06.09
간단한 JAVA 실행기(?)  (1) 2011.03.21
Forecast Repository  (8) 2010.11.30
Sales History API  (2) 2010.05.27
Order Entry API  (0) 2010.05.13
Human Resources API  (0) 2010.05.10
게시판 1.0  (1) 2010.03.11
비밀번호 생성기(Generate Password)  (1) 2010.02.10
  1. 우훗- 님 쫌 짱인듯 -
    돌아가는 모습도 캡쳐해놨으면 더욱더 대단했을텐데..! ^^
  2. hey30
    위에 미니프로젝트를 실제 적용하여 공부하고 있습니다
    다만 무지하여 이해가 되지 않는 부분이 좀 있어서 그러는데요
    질문이 있습니다.
    1. web단에서 처리하는 방식
    2. jsp jstl에서 spring 컨트롤러로 값을 넘겨준후 동작방식
    3. spring controller에서 mav로 리턴시 json의 내용을 web에서 어떻게 받아 처리하는지
    4. 한개의 화면을 만든다고 할때 파일을 만들어주어야 되는 순서
    ex) jsp->js->applicationContext.xml->forecast-servlet.xml->controller->service->service_impl->model
    ->dao->dao_impl <-이런식의 순서가 맞는지 의문입니다. 그리고 이걸 일일이 다 날코딩으로 만들어야되는지?
    그리고 vo는 디자인패턴으로 볼때 어느시점에서 쓰는것이 좋은지?
    이런것들이 궁금합니다.
    좀 번거로우시겠지만 무지한 개발자 업그레이드하는 기회가 될수 있도록 좀 도와주세요
  3. hey30
    친절하게 받아주셔서 감사합니다~
    학수고대하며 본문 바로 아래 답변을 기다리겠습니다.
  4. 비밀댓글입니다
    • 2012.06.28 22:55 신고 [Edit/Del]
      지금 받아오는거는 WSDL 이 아니라 그냥 일반 XML 입니다.

      그냥 Java(소켓이었나.. HttpClient 였나.. URL 이었나..)로 XML 파싱 했습니다. ^^

댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Sales History API

Posted at 2010.05.27 18:12 | Posted in Mini Project

http://api.nerv-team.co.kr/sh/



마지막으로! ㄷㄷ! Sales History API 입니다.

Spring 2.5.6.SEC01 + Hibernate를 사용했습니다.

Spring 라이브러리에 포함되어있는 hibernate3.jar 파일을 사용하지 않고, 독립적인 hibernate3.jar(www.hibernate.org 에서 받은..)를 사용하니까 hibernateTemplate().findByCriteria(..) 메소드를 사용하는데 에러가 나는군요. 이것땜시 하루 날림.. ㅠㅠ


Sales History 스키마 입니다.



'Mini Project' 카테고리의 다른 글

Proftpd Manager  (0) 2012.12.10
게시판 2.0  (5) 2011.07.27
Sudoku  (0) 2011.06.09
간단한 JAVA 실행기(?)  (1) 2011.03.21
Forecast Repository  (8) 2010.11.30
Sales History API  (2) 2010.05.27
Order Entry API  (0) 2010.05.13
Human Resources API  (0) 2010.05.10
게시판 1.0  (1) 2010.03.11
비밀번호 생성기(Generate Password)  (1) 2010.02.10
Weather History API  (2) 2010.01.18
  1. 참 잘했어요!
    근데, java hibernate mapping 파일 및 hbm.xml 파일은.... reverse 사용했어요? 아님 날코딩 하셨나요? ^^
    • 2010.05.28 08:47 신고 [Edit/Del]
      날코딩 했습니다~
      어차피 select 만 할것이기 때문에 타입(string, integer, double 같은것들..),길이 널 등등은 지정 안해도 되고 date 라든가 좀 특별한거만 명시해주면 됩니다~

댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Order Entry API

Posted at 2010.05.13 09:33 | Posted in Mini Project
http://api.nerv-team.co.kr/oe



Human Resources 에 이어서 Order Entry 입니다.

Struts 1.3.10, Hibernate 3.3.2.GA, JSON taglib 등을 사용했습니다.



Order Entry 스키마 입니다.



'Mini Project' 카테고리의 다른 글

Proftpd Manager  (0) 2012.12.10
게시판 2.0  (5) 2011.07.27
Sudoku  (0) 2011.06.09
간단한 JAVA 실행기(?)  (1) 2011.03.21
Forecast Repository  (8) 2010.11.30
Sales History API  (2) 2010.05.27
Order Entry API  (0) 2010.05.13
Human Resources API  (0) 2010.05.10
게시판 1.0  (1) 2010.03.11
비밀번호 생성기(Generate Password)  (1) 2010.02.10
Weather History API  (2) 2010.01.18

댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Human Resources API

Posted at 2010.05.10 11:51 | Posted in Mini Project
http://api.nerv-team.co.kr/hr/



전에 오라클 샘플 스키마를 MySQL로 옮긴 것을 가지고 인제 jQueryExtJS에서 사용하려고 API를 만들어봤습니다.

출력(필수 입력)은 json 방식과 xml 방식 두가지로 만들어 봤습니다. json 출력은 소스보기를 하시면 보기 좋게 볼 수 있습니다.

Servlet, JSTL, Hibernate 3.3.2.GA, JSON-taglib 등을 사용했습니다.

사용 예)
출력은 json으로 하고 이름에 'king'이 포함되는 사원 검색
http://api.nerv-team.co.kr/hr/employees.do?t=json&name=king
도시코드가 'CA" 인 위치 목록 검색
http://api.nerv-team.co.kr/hr/locations.do?t=xml&country=CA
전체 사원 목록중 2페이지 검색
http://api.nerv-team.co.kr/hr/employees.do?t=xml&page=2

에러 발견시 바로 지적질 해주세요~ m(ㅡㅡ)m



Human Resources 스키마의 구조입니다.


'Mini Project' 카테고리의 다른 글

Proftpd Manager  (0) 2012.12.10
게시판 2.0  (5) 2011.07.27
Sudoku  (0) 2011.06.09
간단한 JAVA 실행기(?)  (1) 2011.03.21
Forecast Repository  (8) 2010.11.30
Sales History API  (2) 2010.05.27
Order Entry API  (0) 2010.05.13
Human Resources API  (0) 2010.05.10
게시판 1.0  (1) 2010.03.11
비밀번호 생성기(Generate Password)  (1) 2010.02.10
Weather History API  (2) 2010.01.18

댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

게시판 1.0

Posted at 2010.03.11 13:04 | Posted in Mini Project
2011.01.24 - 제목, 작성자에 html 태그 넣으면 이상하던거 수정 -_-

Introduction


http://antop.nerv.kr/board_v1/list.do

전에 php로 일할때는 게시판을 직접 만들어서 홈페이지를 만들었었는데

JAVA 로 갈아타면서 제대로된 게시판을 만들어보질 못했네요...

그래서 열심히 게시판을 하나 만들어 봤습니다.

아래의 기능들을 사용했습니다.

JSP Standard Tag Library (JSTL)
Strtus 1.3.10 (GA)
Hibernate 3.3.2 (GA)
json-taglib
json_parse.js
SWFUpload 2.2.0.1
SmartEditor Basic 0.3.17
Google Kaptcha 2.3
Lightbox JS 2.0

알고리즘은 반업데이트 방식을 사용했습니다.



알고있는 버그(에러) 몇개 있지만 차차 고치도록 하고.... 일단 개시!!!!!! ㄷㄷ;;

에러 많아 잡아주세용~






Version

1.0.0
 - 게시판 완성


1.5.0 (예정)
 - 다중 게시판으로 변경
 - 댓글(comment) 구현

2.0.0 (예정)
 - javascript 부분 jQuery로 교체
 - 게시판을 관리하는 관리자 구현
 - swfupload 개선

3.0.0 (예정)
 - jQuery를 이용한 풀 AJAX 구현



Table Structure





Flowchart

아주 아주 간략한 흐름을 그려봤습니다. 초큼 상세하게 할려고 했는데... 포기 ㅠ_ㅠ




'Mini Project' 카테고리의 다른 글

Proftpd Manager  (0) 2012.12.10
게시판 2.0  (5) 2011.07.27
Sudoku  (0) 2011.06.09
간단한 JAVA 실행기(?)  (1) 2011.03.21
Forecast Repository  (8) 2010.11.30
Sales History API  (2) 2010.05.27
Order Entry API  (0) 2010.05.13
Human Resources API  (0) 2010.05.10
게시판 1.0  (1) 2010.03.11
비밀번호 생성기(Generate Password)  (1) 2010.02.10
Weather History API  (2) 2010.01.18
  1. 형진
    ㅋㅋㅋ 잘만들었다!!!!!

댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

PK 두개 이상시 매핑

Posted at 2009.12.24 14:04 | Posted in Framework/Hibernate


위와 같은 PK(Primary Key)가 두개인 테이블이 있습니다.

이 테이블을 매핑시켜봅시다.

PK가 하나일때는 <id> 태그를 써서 쓰면 되지만, 두개일때는 <composite-id> 태그를 사용합니다.

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="model">
	<class name="Code" table="common_code">

		<composite-id>
			<!-- PK1 -->
			<key-property name="code" type="string">
				<column name="code" length="10">
					<comment>코드</comment>
				</column>
			</key-property>
			<!-- PK2 -->
			<key-property name="lang" type="string">
				<column name="language" length="3">
					<comment>언어</comment>
				</column>
			</key-property>
		</composite-id>
			
		<property name="codeDesc" type="text">
			<column name="code_desc" not-null="false">
				<comment>코드 설명</comment>
			</column>
		</property>

	</class>
</hibernate-mapping>

그리고 클래스 파일은 Serializable 인터페이스를 구현해야 한답니다....

package model;

import java.io.Serializable;

public class Code implements Serializable {

    private static final long serialVersionUID = -14882784587978705L;
 
    private String code; // PK1
    private String lang; // PK2
    private String codeDesc;

    // getter, setter
}

'Framework > Hibernate' 카테고리의 다른 글

PK 두개 이상시 매핑  (2) 2009.12.24
Reverse Engineering  (0) 2009.12.24
Hibernate 시작하기  (0) 2009.12.23
Criteria 사용하여 질의 하기 #2  (1) 2009.10.03
Criteria 사용하여 질의 하기 #1  (3) 2009.09.10
다대다(n:m) 관계 설정하기  (0) 2009.09.02
일대다(1:n) 관계 설정하기  (1) 2009.08.31
일대일(1:1) 관계 설정하기  (0) 2009.08.27
하이버네이트(Hibernate) 사용하기  (6) 2009.08.24
  1. 비밀댓글입니다
  2. agapeuni@naver.com
    좋은글 출처를 표시하고 블로그에 담아갑니다. ^^

댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Reverse Engineering

Posted at 2009.12.24 09:57 | Posted in Framework/Hibernate


이미 만들어져 있는 데이터베이스의 테이블을 이용해 java 파일과 매핑 xml 파일을 생성시켜봅시다~



일단 http://antop.tistory.com/53 에서 아래 3단계까지는 하셔야 합니다 ㅎㅎ

- 하이버네이트 플러그인 설치
- 하이버네이트 라이브러리 세팅
- 하이버네이트 기본 설정파일 작성

설정파일(hibernate.cfg.xml)까지 만들었으면

File - New - Other... - Hibernate - Hibernate Console Configuration - Next




하이버네이트 콘솔 정보는 hibernate.cfg.xml 설정 파일을 사용합니다.




하이버네이트 콘솔이 뭐냐... 하면 하이버네이트 플러그인을 설치하면 볼 수 있는 Hibernate Perspective 에서 사용하는 데이터베이스 접속 정보 정도로 보면 되겠습니다.

난중에 여기서 HQL 쿼리도 날려보고 여러가지를 할 수 있습니다.


이제 이 콘솔 정보를 기반으로 Reverse Engineering(이하 리버스) 파일을 생성 합니다.

File - New - Other... - Hibernate - Hibernate Reverse Engineering File (reveng.xml) - Next




리버스 파일을 저장 할 폴더 지정 - Next




인제 여기서 console configuration 에서 셀렉트박스를 눌러보면 방금전에 만든 콘솔 정보가 있을 겁니다.

콘솔정보 선택 후 Refresh 클릭하면 DB에 있는 테이블 목록을 받아옵니다.

리버스하고싶은 테이블을 선택 후 Finish




그럼 hibernate.reveng.xml 파일이 열리는데 걍 닫기.


이제 Hibernate Perspective 로 이동합니다.

아래 그림 처럼 [그.. 아이콘] 클릭 후 -_-... "Hibernate Code Generation Configurations..." 클릭




아무것도 없습니다.... "새로 만들기" 버튼 클릭




적당히 이름 정하고, 콘솔정보 선택하시고, 만들어지는 파일들을 저장할 폴더 위치를 지정합니다.

※ 아래 그림의 Name 처럼 하면 이미 있는 이름이라고 안됩니다. 딴거 쓰세요 ㅠ_ㅠ




src 폴더(최상위)를 선택합니다.




package 경로를 지정합니다.

※ 패키지를 지정하면 패키지 폴더도 생성 됩니다.

이제 리버스 엔진 파일 아까 만들었던걸 지정해줍시다.




새로 만들기를 원하냐고 물어보는데 전 이미 만들었으니 "Use existing..." 클릭




파일을 선택합니다.




이제 Exporters 탭으로 이동해서 어떤 파일을 생성할지 선택해줍니다.




Run 클릭...



신나게 파일을 생성하고 있습니다.




파일이 생성되었습니다.

뭐 에러나는 것들도 있네요.. 컴퓨터가 만능은 아니자나여!


'Framework > Hibernate' 카테고리의 다른 글

PK 두개 이상시 매핑  (2) 2009.12.24
Reverse Engineering  (0) 2009.12.24
Hibernate 시작하기  (0) 2009.12.23
Criteria 사용하여 질의 하기 #2  (1) 2009.10.03
Criteria 사용하여 질의 하기 #1  (3) 2009.09.10
다대다(n:m) 관계 설정하기  (0) 2009.09.02
일대다(1:n) 관계 설정하기  (1) 2009.08.31
일대일(1:1) 관계 설정하기  (0) 2009.08.27
하이버네이트(Hibernate) 사용하기  (6) 2009.08.24

댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Hibernate 시작하기

Posted at 2009.12.23 15:17 | Posted in Framework/Hibernate
하이버네이트를 시작하기 위한 기본설정을 해봅시다.

Eclipse Galileo
Java 1.6.0_16
Tomcat 6.0.14



http://www.hibernate.org 에서 라이브러리와 플러그인을 다운로드 받습니다.

왼쪽 메뉴에서 'Download' 를 클릭 후 zip 파일을 다운로드 합니다.






하이버네이트 플러그인(Hibernate Tools)은 이클립스 플러그인 설치를 이용해서 합니다.

업데이트 주소는 하이버네이트 홈페이지에서 HIBERNATE Tools 부분에 링크 되어있습니다.



업데이트 주소 : http://download.jboss.org/jbosstools/updates/stable



플러그인이 잘 설치 되었습니다... ㄷㄷ;





이제 하이버네이트를 하기위한 최소한의 라이브러리를 세팅합시다.

다운로드 받은 hibernate-distribution-3.3.2.GA-dist.zip 파일을 압축 해제합니다.

hibernate3.jar 와 lib\required 폴더 안의 *.jar 만 있으면 하이버네이트를 사용할 수 있습니다.

log4j 를 사용하기 위해선 slf4j-log4j12-1.5.10.jarlog4j-1.2.15.jar 가 필요합니다. (설정파일 log4j.properties !!!)

마지막으로 데이터베이스에 맞는 jdbc 드라이버가 필요합니다.





하이버네이트 기본 설정 파일인 hibernate.cfg.xml 을 작성해봅시다. 이클립스 플러그인으로 생성하겠습니다.

File - New - Other... - Hibernate - Hibernate Configuration File (cfg.xml) 선택 - Next




설정파일을 저장할 경로 지정




접속 정보를 입력합니다. - Finish

접속 정보는 http://antop.tistory.com/54 에 있는 샘플 DB 입니다.

※ Database dialect 를 DB 에 알맞게 잘 골라주세요.




src 경로 아래 hibernate.cfg.xml 파일이 생성 되었습니다.

※ 플러그인을 설치하면 하이버네이트 관련 xml 파일의 아이콘이 아래 그림과 같이 표시됩니다.



파일을 열어보면 기본적으로 데이터베이스 접속 정보가 설정되어있습니다.

코드 어시스트(Ctrl + Space)를 이용해(플러그인 있어야함) 다른 설정들도 할 수 있습니다.



하이버네이트 세션(JDBC의 Connection이라고 보면 됨)을 관리해주는 클래스를 사용하도록 합시다.

HibernateUtil 클래스입니다. 하이버네이트 공식 메뉴얼에서 구한 국민 세션 관리 유틸이죠 ㅎㅎ

package util;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
   public static final SessionFactory sessionFactory;

   static {
      try {
         // Create the SessionFactory from hibernate.cfg.xml
         sessionFactory = new Configuration().configure().buildSessionFactory();
      } catch (Throwable ex) {
         // Make sure you log the exception, as it might be swallowed
         System.err.println("Initial SessionFactory creation failed." + ex);
         throw new ExceptionInInitializerError(ex);
      }
   }

   public static final ThreadLocal<Session> session = new ThreadLocal<Session>();

   public static Session getCurrentSession() throws HibernateException {
      Session s = session.get();
      // Open a new Session, if this thread has none yet
      if (s == null) {
         s = sessionFactory.openSession();
         // Store it in the ThreadLocal variable
         session.set(s);
      }
      return s;
   }

   public static void closeSession() throws HibernateException {
      Session s = (Session) session.get();
      if (s != null)
         s.close();
      session.set(null);
   }
}


※ 여기까지 하셨으면 하이버네이트를 사용할 최소한의 준비는 끝났습니다.



간단한 테스트 파일을 하나 만들어서 접속 테스트 해봅시다.

다른 이무 작동 없고 접속만 했다가 끊는 소스 입니다.

HibernateUtil 을 이용해서 접속합니다.

package app;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

import util.HibernateUtil;

public class Test {
   
   public static void main(String[] args) {

      Session sess = null;
      Transaction tx = null;
  
      try {
         // 세션 열기
         sess = HibernateUtil.getCurrentSession();
         // 트랜잭션 시작
         tx = sess.beginTransaction();
         
         // processing..
   
         tx.commit(); // 커밋
      } catch (HibernateException e) {
         tx.rollback(); // 롤백
         e.printStackTrace();
      } finally {
         // 세션 닫기
         HibernateUtil.closeSession();
      }
    
   }
}

에러 안뿜어내고 로그 나오면 잘 된겁니다. ㄷㄷ;;


'Framework > Hibernate' 카테고리의 다른 글

PK 두개 이상시 매핑  (2) 2009.12.24
Reverse Engineering  (0) 2009.12.24
Hibernate 시작하기  (0) 2009.12.23
Criteria 사용하여 질의 하기 #2  (1) 2009.10.03
Criteria 사용하여 질의 하기 #1  (3) 2009.09.10
다대다(n:m) 관계 설정하기  (0) 2009.09.02
일대다(1:n) 관계 설정하기  (1) 2009.08.31
일대일(1:1) 관계 설정하기  (0) 2009.08.27
하이버네이트(Hibernate) 사용하기  (6) 2009.08.24

댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Criteria 사용하여 질의 하기 #2

Posted at 2009.10.03 10:03 | Posted in Framework/Hibernate
JOIN

http://docs.jboss.org/hibernate/stable/core/api/org/hibernate/Criteria.html





부서와 사원의 1:n 관계에 JOIN 쿼리를 날려봅시다.

원래 하이버네이트에서는 매핑을 잘 맺어주면, 단순 getter 로도 관계를 가지는 테이블의 내용을 가져올 수 있습니다.

Criteria crit = sess.createCriteria(Emp.class);

List<Emp> emps = crit.list();
   
int size = emps.size();
for(int i=0 ; i < size ; i++) {
   Emp emp = emps.get(i);
   Dept dept = emp.getDept();

   String empName = emp.getName();
   String deptName = dept != null ? dept.getDeptName() : "";
    
   System.out.println("row: " + (i+1));
   System.out.println(emp);
   System.out.println(dept);
}

이렇게하면 사원에 해당하는 부서의 정보를 가져올 수 있습니다.

로그를 보면 select문이 여러번 출력되는 것을 볼 수 있습니다.

List<Emp> emps = crit.list(); 에서 ' select empno, ename, job, hire_date from tbl_emp; ' 쿼리가 실행되고,

dept.getDeptName(); 에서 사원의 부서번호에 따라 ' select deptno, dname, loc from tbl_dept; ' 쿼리가 실행 됩니다.

부서의 종류가 엄청나게 많다면 두번째 select 쿼리가 많이 실행 되게 될 것입니다.

쿼리를 할때 최소한의 I/O로 실행되게 하고, 뭐.. 서브쿼리보다는 조인이 빠르고 흘러가면서 들은 것들이 있기 땜시... JOIN ㄱㄱ



INNER JOIN

키를 기준으로 일치하는 데이터만 가져옵니다. (다 아시졍? +_+)

// select * from tbl_emp e
Criteria crit = sess.createCriteria(Emp.class, "e");
// join tbl_dept d on this.deptno = d.deptno
crit.createCriteria("dept", "d");
   
// Result 를 Map 형태로 변환
crit.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);

List<Map<String, Object>> joinList = crit.list();

int size = joinList.size();
for(int i=0 ; i < size ; i++) {
   Map<String, Object> map = joinList.get(i);
   Emp emp = (Emp) map.get("e");
   Dept dept = (Dept) map.get("d");

   System.out.println("row: " + (i+1));
   System.out.println(emp);
   System.out.println(dept);
}


Criteria crit = sess.createCriteria(Emp.class);

Session.createCriteria(클리스명) 를 통해서 생성한 Critereria 객체에 다시 createCriteria(String associationPath, String alias) 를 사용해서 JOIN 을 하면 됩니다.

이렇게 JOIN 한 결과는 Emp 객체도 Dept 객체도 아니기 때문에, Criteria의 setResultTransformer 메소드를 사용하여 Criteria를 이용한 조회 결과를 별도 정의한 객체 형태나 Map 형태로로 전달받아야 하겠습니다.

근데 전 객체로 변형하는 법은 잘 안되서... 걍 Map 으로 ㄱㄱㄱ!

여기서 두번째 인자로 넣는 엘리어스명은 쿼리에서 쓰는 엘리어스명도 되지만 나중에 Map 에서 꺼 낼때의 키도 되기 때문에 꼭 지정해줘야 할 것입니다....

실행 되는 쿼리는 아래와 같습니다.

    select
        this_.empno as empno0_1_,
        this_.ename as ename0_1_,
        this_.job as job0_1_,
        this_.hire_date as hire4_0_1_,
        this_.deptno as deptno0_1_,
        d1_.deptno as deptno1_0_,
        d1_.dname as dname1_0_,
        d1_.loc as loc1_0_
    from
        tbl_emp this_
    inner join
        tbl_dept d1_
            on this_.deptno=d1_.deptno


이러면 당연히 부서가 없는 'TOM' 은 목록에 나오지가 않겠죠? 만약 사원 목록을 본다면 부서가 없는 사원이 나오면 안되겠죠?



LEFT JOIN

두개의 테이블을 조인할 때 왼쪽 테이블을 기분으로 오른쪽 테이블을 조인 시키는 LEFT JOIN 을 해봅시다...

createCriteria(String associationPath, String alias, int joinType) 를 사용하면 됩니다.

// select * from tbl_emp e
Criteria crit = sess.createCriteria(Emp.class, "e");
// join tbl_dept d on this.deptno = d.deptno
crit.createCriteria("dept", "d", Criteria.LEFT_JOIN);
   
// Result 를 Map 형태로 변환
crit.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);

List<Map<String, Object>> joinList = crit.list();

int size = joinList.size();
for(int i=0 ; i < size ; i++) {
   Map<String, Object> map = joinList.get(i);
   Emp emp = (Emp) map.get("e");
   Dept dept = (Dept) map.get("d");

   System.out.println("row: " + (i+1));
   System.out.println(emp);
   System.out.println(dept);
}

실행되는 쿼리는 아래와 같습니다. 엘리어스 사용에 주의 하세요~

    select
        this_.empno as empno0_1_,
        this_.ename as ename0_1_,
        this_.job as job0_1_,
        this_.hire_date as hire4_0_1_,
        this_.deptno as deptno0_1_,
        d1_.deptno as deptno1_0_,
        d1_.dname as dname1_0_,
        d1_.loc as loc1_0_
    from
        tbl_emp this_
    left outer join
        tbl_dept d1_
            on this_.deptno=d1_.deptno


※ RIGHT JOIN 은 없네요 테이블의 좌 우 를 바꾸셔요~ 히힛

간단하게 사원명과 부서명으로 조회하는 페이지 만들어 봤어요~








Pagination

많은 자료를 조회할 때 일정한 양의 자료를 한 페이지만 보여주도록 하는 기능입니다.

꼭 필요한 기능이고, 그다지 복잡할 것도 없지만, 막상 쿼리 날리려면 DBMS 마다 쿼리도 틀리고... 쉽지 안쵸 ㅠ_ㅠ

하지만 하이버네이트에서는

setFirstResult(int firstResult) 과 setMaxResults(int maxResults) 메소드 두개면 해결 됩니다! ㅋㅋㅋ

전부터 해오던 우편번호 테이블 가지고 해봅시다...


Criteria crit = sess.createCriteria(Zipcode.class);
crit.setFirstResult(40);   // 시작 로우 라인 번호(?)
crit.setMaxResults(10);    // 시작 로우 라인 번호로 부터 몇개?!

List<Zipcode> list = crit.list();
   
int size = list.size();
for(int i=0 ; i < size ; i++) {
   Zipcode z = list.get(i);
   System.out.println(z.toString());
}

한 페이지에 10개씩 보여준다고 하고 4페이지의 내용을 보여주게 됩니다. 


페이징 처리가 되있는 우편번호 검색 페이지를 만들어봤습니다.




몇개의 DMBS 에서 돌려보니까 아래와 같은 쿼리가 나오네요


MySQL 5.1.38
    select
        this_.seq as seq0_0_,
        this_.zipcode as zipcode0_0_,
        this_.sido as sido0_0_,
        this_.gugun as gugun0_0_,
        this_.dong as dong0_0_,
        this_.ri as ri0_0_,
        this_.bldg as bldg0_0_,
        this_.st_bunji as st8_0_0_,
        this_.ed_bunji as ed9_0_0_
    from
        tbl_zipcode this_ limit ?,
        ?


Oracle 10g Express Edition
    select
        *
    from
        ( select
            row_.*,
            rownum rownum_
        from
            ( select
                this_.seq as seq0_0_,
                this_.zipcode as zipcode0_0_,
                this_.sido as sido0_0_,
                this_.gugun as gugun0_0_,
                this_.dong as dong0_0_,
                this_.ri as ri0_0_,
                this_.bldg as bldg0_0_,
                this_.st_bunji as st8_0_0_,
                this_.ed_bunji as ed9_0_0_
            from
                tbl_zipcode this_ ) row_
        where
            rownum <= ?
        )
    where
        rownum_ > ?


Microsoft SQL Server 2005
    select
        top 20 this_.seq as seq0_0_,
        this_.zipcode as zipcode0_0_,
        this_.sido as sido0_0_,
        this_.gugun as gugun0_0_,
        this_.dong as dong0_0_,
        this_.ri as ri0_0_,
        this_.bldg as bldg0_0_,
        this_.st_bunji as st8_0_0_,
        this_.ed_bunji as ed9_0_0_
    from
        tbl_zipcode this_


MSSQL 은 일단 페이지번호 * 갯수 만큼 가져와서 내부적으로 처리를 하나봐요.....




http://blog.naver.com/oyukihana?Redirect=Log&logNo=60002506896

'Framework > Hibernate' 카테고리의 다른 글

PK 두개 이상시 매핑  (2) 2009.12.24
Reverse Engineering  (0) 2009.12.24
Hibernate 시작하기  (0) 2009.12.23
Criteria 사용하여 질의 하기 #2  (1) 2009.10.03
Criteria 사용하여 질의 하기 #1  (3) 2009.09.10
다대다(n:m) 관계 설정하기  (0) 2009.09.02
일대다(1:n) 관계 설정하기  (1) 2009.08.31
일대일(1:1) 관계 설정하기  (0) 2009.08.27
하이버네이트(Hibernate) 사용하기  (6) 2009.08.24
  1. 좋은 정보 감사합니다.
    퍼갈께요. 원하지 않으시면 삭제 하겠습니다.(출처표시함)

댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기