ibizsoftware 정호열차장 ( 표준프레임워크오픈커뮤니티커미터 )
Agenda 1. ibatis 와 Hibernate 의개념및특징 2. Hibernate 와 JPA 쿼리종류 3. ibatis 와 Hibernate 동시사용을위한 Transaction 처리방안 4. @EntityListeners 활용방법
Agenda 5. Hibernate 사용시 Dynamic 쿼리지원방법 6. Ehcache 기반의 Hibernate Cache VS Google Annotations Cache 7. MappingJackJsonView 활용 8. Restful URL Mapping & Spring 3.0.4+ 9. Demo
Hibernate VS ibatis Hibernate Object Relationnal Mapping. 계열프레임워크 Application 의도메인 class 와 RDBMS 의 table 간의매핑 객체지향설계경험이좋을때유리. 개발자의 SQL 작성이줄어둠. 잘구성된 table 구조에유리 데이터모델과객체모델간의의존성이상대적으로강함
Hibernate VS ibatis ibatis SQL 기반의 Data Mapping 계열프레임워크 Application 의 class(dto, Map) 과 query parameter, result 객체간의매핑담당. RDBMS 쿼리개발경험이좋을때유리 복잡한 table 구조에유리. 데이터모델과객체모델간의의존성이상대적으로약함
What s Your Choice? Case 1 쾌속개발프로젝트 ( 6 개월간의프로젝트를 3 개월로단축 ). 최대한빨리개발하면서부하테스트잘버틸수있도록퍼포먼스를고려. DBA, DB Modeler 들이데이터베이스에관련된모든권한을다가지고있음. 쿼리를 DBA 에게쉽게넘기고분석할수있는구조를가지고있어야함. 프로시저를많이사용함. Case 2 개발범위대비충분한시간이주어짐. 퍼포먼스에크게신경쓰지않아도되고잘설계된객체지향적클래스모델링이더중요함. Database 관련작업에객체도메인모델러가적극참여할수있음. 도메인클래스하나만봐도 RDBMS 구조가어떻게되어있는지한눈에알수있어야함.
Hibernate 와 JPA 쿼리종류 Hibernate NamedQuery createquery ( SELECT o FROM Emp o ); getnamedquery( findempbyempid ); createsqlquery( SELECT * FROM EMP ); criteria JPA createquery( SELECT o FROM Emp o ); Criteria createnamedquery( findempbyempid ); createnativequery( SELECT * FROM EMP ); criteria
Hibernate, ibatis 동시에사용할때트랜잭션처리 Reference - http://trac.samcik.pro:8000/knowledgebase/wiki/springmanagedtransactions
@EntityListeners 의활용 AuditListener - @ PrePersist - @ PreUpdate - @ PreRemove - @ PostPersist - @ PostUpdate - @ PostRemove
Dynamic 쿼리활용방법 Anyframe Dynamic 쿼리 ibatis Dynamic 쿼리연동 Reference - http://dev.anyframejava.org/anyframe/doc/core/3.1.0/corefw/guide/hibernate-dynamic.html
ibatis 를활용하여 Dynamic 쿼리추출
Hibernate second level cache 사용방법 Reference - http://www.javalobby.org/java/forums/t48846.html
Hibernate Query Cache JPA Hibernate Reference - http://www.javalobby.org/java/forums/t48846.html
Ehcache Annotations for Spring ehcache..xml context-cache.xml codegroupserviceimpl
Cache 데이터조회매커니즘 Memory address1 Data address2 Data Hibernate Engine new address Data
Cache 의잘못된사용 Sample1.java Sample2.java
Cache 비교 Google Annotation Cache for spring Hibernate Second level Cache Method A @Cachable ( cachename= code ) public List getlist(string arg) { List result = dao.getlist(arg); ( 중략 ) return result; } Method B } public List getlist(string arg) { List result = session.createquery().setcacheable (true).list(); ( 중략 ) return result; 캐시전 캐시후
Cache 사용팁 java.util. Collections 의메서드사용 - public static <T> Collection<T> unmodifiablecollection (Collection<? extends T> c){} - public static <T> List<T> unmodifiablelist (List<? extends T> list) - public static <K,V> Map<K,V> unmodifiablemap (Map<? extends K,? extends V> m) - public static <T> Set<T> unmodifiableset (Set<? extends T> s) - public static <K,V> SortedMap<K,V> unmodifiablesortedmap ( SortedMap<K,? extends V> m){} - public static <T> SortedSet<T> unmodifiablesortedset ( SortedSet<T> s){} 사용예
Spring3.1.0.M2 의캐시지원방법
MappingJacksonJsonView -applicationcontext.xml -JtAtchmnFl.java
Restful URL Mapping & Spring 3.0.4+ 1. 일반 URL Mapping url 호출방법 : http://localhost/test.jsp?a=1&b=2 처리방법 : request.getparameter( a ); 2. RESTFul URL Mapping url 호출방법 : http://localhost/test/1/2 처리방법 (Spring) : @RequestMapping (value= /test/{a}/{b}, method=requestmethod. GET) public ModelAndView test ( @PathVariable( a ) a, @PathVariable( b ) b) {} [user]-servlet.xml?
Restful URL Mapping & Spring 3.0.4+ 스프링서블릿 ( DispatcherServlet ) Spring Framework Servlet Container(tomcat, jboss, weblgoic ) 디폴트 Servlet JSP Servlet 정적리소스처리담당 (html, js, css, 이미지등 ) / 에매핑됨 JSP 담당처리, *.jsp 에매핑 매핑순서 1. DispatcherServlet 이 / 에매핑해본다. 2. Controller 가담당하는 url 이라면그쪽으로넘기고그렇지않은 url 이라면원래 servlet Container 가담당하는 Default Servlet 으로넘긴다. spring 은 getservlets(), getservletnames() 를사용하는대신 RequestDispatcher 를가져오는 getnameddispatcher() 메서드를사용 Tomcat 의경우 conf/web.xml 에아래와같이매핑
Restful URL Mapping & Spring 3.0.4+
Restful URL Mapping & Spring 3.0.4+
Demo (Logical ERD)
Demo (Physical ERD)
Demo Demo1 ( Cache ) Demo2 ( Advanced Paging ) Demo3 ( File Upload ) Demo4 ( 게시판 )
THANK YOU!