3. 처음 떠오르는 코드는 ? insert into ORDER (..,ordererid,sa_zipcode, sa_address1,..) values (?,?,?..); insert into ORDERED_ITEM (..,itemid,quantity,price..) values (?,?,?...); Order order = new Order(); AddressInfo shippingAddress = orderRequest. getShippingAddress(); order.setShippingAddress( shippingAddress); Item item = getItem(itemId); order.addOrderedItem( createOrderedItem(price, item)); saveOrder(order);
4. 처음 떠오르는 코드는 ? select orderid, ordererid, sa_zipcode, sa_address1, .., u.name from ORDER o, USER u, where o.ordererid = u.userid .. select * from ORDERED_ITEM where orderid = ? .. Order order = orderRepository. findOrder(orderId); User orderer = order.getOrderer(); ShippingAddress address = order.getShppingAddress(); List<OrderedItem> itemList = order.getOrderedItemList(); PaymentInfo paymentInfo = order.getPaymentInfo();
9. 관계형 DB != 객체 지향 관계형 데이터 객체 연관 FK 를 통한 단순 연관 양방향 연관 . List, Map 등 풍부한 연관 표현 상속 지원하지 않음 상속 / 구현을 통한 다형성 제공 세밀함 Value 타입 존재하지 않음 [DBMS 에 특화 ] Value 타입 통한 세밀한 설계
11. ORM 과 매퍼 솔루션들 객체 지향 지원 Hibernate JPA JDO iBATIS Torque 단순 매퍼
12.
13. ORM 도구가 필요한 이유 객체지향모델링 단순 코드 반복 제거 생산성 증가 자체개발 어려움 코드품질향상 pstmt.setString(1,bean.getX()); pstmt.setString(2,bean.getY()); pstmt.setSTring(3,bean.getZ());
17. 클래스 작성법 public class Order implements Serializable { private Integer id; private Date registerDate; public Order() { } public Date getRegisterDate() { … } public void setRegisterDate() { … } public boolean equals(Object o) { … } public int hashcode() { … } } final class 가 아님 PK 와 매핑되는 프로퍼티 제공 기본 생성자 제공 getter/setter 제공
18. 하입네이트 설정 파일 작성 <hibernate-configuration> <session-factory> <property name=“connection.driver_class”>..</property> <property name=“connection.url”>jdbc:mysql:…</property> <property name=“hibernate.c3p0.min_size”>5</property> … <mapping resource=“Order.hbm.xml” /> <mapping resource=“Item.hbm.xml” /> </session-factory> </hibernate-configuration> DB 연결 설정 매핑 설정 파일 지정
19. SessionFactory 초기화 SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.getCurrentSession(); // session 을 이용한 CRUD 처리
20. 기본 CRUD API: save() Order order = new Order(); order.addOrderedItem(..); order.setShppingAddress(shppingAddress); order.setOrderer(orderedUser); session.save(order) ;
21. 기본 CRUD API: get() Integer id = …; Order order = (Order) session.get(Order.class, id) ; order.getOrderedItemList(); User orderer = order.getOrderer();
22. 기본 CRUD API: update() Order order = (Order)session.get(…) order.setShppingAddress(newAddress); session.update (order);
23. 기본 CRUD API: delete() Order order = (Order)session.get(…) session.delete (order);
24.
25. 영속성 처리의 투명함 (Transparent Persistence) tx = session.beginTransaction(); Order order = (Order)session.get(Order.class, id); order.setState(OrderState.CANCEL); tx.commit();