Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

1. proxy 패턴을 이용하여 my batis의 mapper 인터페이스 구현 (1)

2,352 views

Published on

- 사내 세미나 2회차 (수정본)

  • Be the first to comment

1. proxy 패턴을 이용하여 my batis의 mapper 인터페이스 구현 (1)

  1. 1. 1. MyBatis의 Mapper 사용 예SqlSessionFactory sqlSessionFactory = SqlSessionManager.getSqlSession();SqlSession session = sqlSessionFactory.openSession();UserMapper mapper = session.getMapper(UserMapper.class);List<User> resultList = mapper.selectAll();UserMapper.javapublic interface UserMapper { 누가 실행하는거지?? @Select("select userid from user_table") List<User> selectAll();}Test.javapublic static void main(String[] args) { UserMapper mapper = session.getMapper(UserMapper.class); List<User> resultList = mapper.selectAll(); for(User user : resultList) { //do something }}
  2. 2. 2. Proxy (Java dynamicProxy API)Proxy라고 하면 실제로 작동하는 A라는 놈과 같은 기능을 하면서 A인체 하는 것.예> dbcp의 Connection.자세한 설명 : http://b.pungjoo.com/17Foo foo = (Foo) Proxy.getProxy(Foo.class);하지만, foo는 Foo의 구현체가 아닌 $Proxy0 혹은 그 역할을 하는 Wrapper class
  3. 3. 3. Proxy (Java dynamicProxy API)
  4. 4. 4. Proxy (Java dynamicProxy API)- 메서드 호출 전후에 뭔가 다른 작업을..- 메서드의 기능을 동적으로 변경
  5. 5. 5. Step1: UserImpl의 name, Address printUser interface를 사용하고ProxyHandler에서는 Map으로 set/get을구현한것처럼 하고있다.
  6. 6. 6. Step2: logging (AOP)
  7. 7. 7. Step3: ProxyFactory using Generic
  8. 8. 8. 예제에서의 ProxyProxy.newProxyInstance(ClassLoader, Interface[], InvocationHandler );public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {}proxy, method, Object[] - parameters
  9. 9. 9. MyBatis Mapper 구현해보기1. Domain class User, Depart
  10. 10. 9. MyBatis Mapper 구현해보기2. Select Annotation 및 User Mapper 생성
  11. 11. 9. MyBatis Mapper 구현해보기3. MapperProxyHandler
  12. 12. 9. MyBatis Mapper 구현해보기4. MapperFactory 및 Test Class
  13. 13. 9. MyBatis Mapper 구현해보기5. Depart에 대한 Select는? Factory와 Handler의 수정
  14. 14. 9. MyBatis Mapper 구현해보기6. Test는?
  15. 15. 10. SearchAPIList<String[]> searchResultList = searchService.search("keyword"); 상품1 searchResultList.get(0) 상품명 searchResultList.get(0)[0] 가격 searchResultList.get(0)[1] 상품2 searchResultList.get(1) 상품명 searchResultList.get(1)[0] 가격 searchResultList.get(1)[1] 1. 필드수가 많아지면? -> 사용자가 가격이 몇번째 index인지 모름! 2. 필드의 값이 바뀌면? -> 찾아서 고쳐야하지만 .. 어떻게? 3. 필드수가 줄어들면? -> 역시 어떻게 찾을것인가?
  16. 16. 11. SearchAPI배열X -> Domain 클래스를 만들자. Product.java enum mapping Product Volume prd_no String[0] @field_name("prd_no") prd_nm String[1] getPrdNo price String[2] ... ... @field_name("prd_nm") getPrdNo ProductSearchService.java 1. 리뷰검색, 모델검색, 타운검색은? -> 도메인 - searchService - enum의 1:1 구조면.. 검색 서비스 종류만큼? ProductSearchResult productList = ProductSearchService.search(); ModelSearchResult modelList = ModelSearchService.search(); ReviewSearchResult reviewList = ReviewSearchService.search();
  17. 17. 12. SearchAPIProxy를 사용한.. Product.java xml mapping String[0] prd_no String[1] @field_name("prd_no") prd_nm String[2] getPrdNo price ... ... @field_name("prd_nm") getPrdNo ProductSearchService.java SearchService<Product> service = SearchServiceProxyFactory.getService(Product.class); SearchResult<Product> result = serivce.search(); SearchService<Model> service = SearchServiceProxyFactory.getService(Model.class); SearchResult<Model> result = serivce.search(); SearchService<Review> service = SearchServiceProxyFactory.getService(Review.class); SearchResult<Review> result = serivce.search();
  18. 18. 12. SearchAPI xml mapping String[] name = name [0] name price = price [1] price ... Product VolumeProduct ProductSearch type = type [0] type Model model = model [1] modelModel ProxySearchService ... Model VolumeSearch Review title = title [0] titleReview contents= contents [1] contents ... Review VolumeSearch

×