1-5. 모델 사용하기
앞에서 만든 모델을 사용하는 간단한 어플리케이션을 만들기 위해 src밑에 app라는 패키지를 만들고 그안에 PizzaApp 클래스를 만듭니다.
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class PizzaApp {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext(
new String[] { "applicationContext-dao.xml",
"applicationContext-jdbc-datasource.xml" });
SessionFactory sf = (SessionFactory) ac.getBean("sessionFactory");
Session s = sf.openSession();
Transaction tx = s.beginTransaction();
//TODO 할일
tx.commit();
s.close();
}
}
녹색 부분은 Spring을 사용하여 session 팩토리를 받아옵니다. 역시 전 Session Factory도 처음 보는 것이기 때문에 이 부분도 공부가 필요합니다.
파란색 부분은 세션 팩토리를 사용하여 세션을 열고 닫는 부분입니다.
보라색 부분은 세션으로 부터 트랜잭션을 시작하고 완료 시키는 부분입니다.
세션을 열고 트랜잭션 시작한 뒤에~ 하고 싶은 일을 하면 됩니다. 먼저 Pizza 객체를 생성하여 DB에 저장을 해봅니다.
pizza.setName("keesun's pizza");
pizza.setPrice(200);
pizza.setSize("BIG");
위와 같이 코딩을 하고 저장을 하겠다는 의미로
이렇게 하면 DB에 들어가게 될 것입니다.
기대를 품고 실행을 하면 다음과 같은 에러를 볼 수 있습니다.
[#M_ more.. | less.. | Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext-dao.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [applicationContext-jdbc-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
이하 생략...
_M#]
postgres JDBC를 빌드 경로에 추가하지 않아서 발생한 에러입니다. 적절한 조취를 취한 뒤[footnote]postges설치 경로 / 8.1 / jdbc / postgresql-8.1-405.jdbc3.jar 를 lib에 복사한 뒤 빌드 경로에 추가 해줌[/footnote] 다시 실행시키면~
[#M_ more.. | less.. | Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext-dao.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [java.util.ArrayList] to required type [java.lang.Class[]] for property 'annotatedClasses'; nested exception is java.lang.IllegalArgumentException: Cannot find class [model.Member]. Root cause: java.lang.ClassNotFoundException:
_M#]
1-3. 기본 설정 하기에서 유심히 보신 분은 눈치 채셨겠지만 applicationContext-dao.xml 의 sessionBean 설정에서 '뭔가 들어가야 할 부분'에 다음의 코드를 넣습니다.
<list>
<value>model.Pizza</value>
</list>
</property>
어노테이션이 사용된 클래스를 등록해 주는 것 같습니다. 그리고 이제 프로그램을 실행시키면 커맨드 창에서 다음의 메시지를 확인 할 수 있습니다.
Hibernate: insert into O_Pizza (price, name, size, pizzaId) values (?, ?, ?, ?)
그리고 DB에서 확인하면 다음과 같이 Table이 생기고 data가 들어간 것을 확인 할 수 있습니다.
bk82.bmp
정말 마술 같은 쑈입니다. :) DB와 SQL에 손도 안대고 table을 만들고 데이타를 넣다니..허허허;;;