18
1. MyBatisMapper 사용 SqlSessionFactory sqlSessionFactory = SqlSessionManager.getSqlSession(); SqlSession session = sqlSessionFactory.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); List<User> resultList = mapper.selectAll(); UserMapper.java public interface UserMapper { @Select("select userid from user_table") List<User> selectAll(); } Test.java public static void main(String[] args) { UserMapper mapper = session.getMapper(UserMapper.class); List<User> resultList = mapper.selectAll(); for(User user : resultList) { //do something } } 누가 실행하는거지??

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

  • Upload
    -

  • View
    1.355

  • Download
    6

Embed Size (px)

DESCRIPTION

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

Citation preview

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

1. MyBatis의 Mapper 사용 예SqlSessionFactory sqlSessionFactory = SqlSessionManager.getSqlSession();SqlSession session = sqlSessionFactory.openSession();

UserMapper mapper = session.getMapper(UserMapper.class);List<User> resultList = mapper.selectAll();

UserMapper.java

public 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 }}

누가 실행하는거지??

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

2. Proxy (Java dynamicProxy API) Proxy라고 하면 실제로 작동하는 A라는 놈과 같은 기능을 하면서 A인체 하는 것. 예> dbcp의 Connection.

자세한 설명 : http://b.pungjoo.com/17

Foo foo = (Foo) Proxy.getProxy(Foo.class);

하지만, foo는 Foo의 구현체가 아닌 $Proxy0 혹은 그 역할을 하는 Wrapper class

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

3. Proxy (Java dynamicProxy API)

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

4. Proxy (Java dynamicProxy API)

- 메서드 호출 전후에 뭔가 다른 작업을..- 메서드의 기능을 동적으로 변경

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

5. Step1 : UserImpl의 name, Address print

User interface를 사용하고ProxyHandler에서는 Map으로 set/get을구현한것처럼 하고있다.

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

6. Step2 : logging (AOP)

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

7. Step3 : ProxyFactory using Generic

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

8. 예제에서의 Proxy

Proxy.newProxyInstance(ClassLoader, Interface[], InvocationHandler );

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

}proxy, method, Object[] - parameters

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

9. MyBatis Mapper 구현해보기1. Domain class User, Depart

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

9. MyBatis Mapper 구현해보기2. Select Annotation 및 User Mapper 생성

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

9. MyBatis Mapper 구현해보기3. MapperProxyHandler

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

9. MyBatis Mapper 구현해보기4. MapperFactory 및 Test Class

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

9. MyBatis Mapper 구현해보기5. Depart에 대한 Select는? Factory와 Handler의 수정

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

9. MyBatis Mapper 구현해보기6. Test는?

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

10. SearchAPI

List<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. 필드수가 줄어들면? -> 역시 어떻게 찾을것인가?

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

11. SearchAPI

배열X -> Domain 클래스를 만들자.

Product VolumeString[0]String[1]String[2]...

enum mappingprd_noprd_nmprice...

Product.java

@field_name("prd_no")getPrdNo

@field_name("prd_nm")getPrdNo

ProductSearchService.java

1. 리뷰검색, 모델검색, 타운검색은? -> 도메인 - searchService - enum의 1:1 구조면.. 검색 서비스 종류만큼?

ProductSearchResult productList = ProductSearchService.search();

ModelSearchResult modelList = ModelSearchService.search();

ReviewSearchResult reviewList = ReviewSearchService.search();

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

12. SearchAPI

Proxy를 사용한..

String[0]String[1]String[2]...

xml mappingprd_noprd_nmprice...

Product.java

@field_name("prd_no")getPrdNo

@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();

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

12. SearchAPI

Product Volume

Model Volume

Review Volume

[0] name[1] price...

[0] type[1] model...

[0] title[1] contents...

name = nameprice = price

type = typemodel = model

title = titlecontents= contents

String[]xml mapping

ProxySearchService

ProductSearch

ModelSearch

ReviewSearch

Product

Model

Review