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 }}
누가 실행하는거지??
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
3. Proxy (Java dynamicProxy API)
4. Proxy (Java dynamicProxy API)
- 메서드 호출 전후에 뭔가 다른 작업을..- 메서드의 기능을 동적으로 변경
5. Step1 : UserImpl의 name, Address print
User interface를 사용하고ProxyHandler에서는 Map으로 set/get을구현한것처럼 하고있다.
6. Step2 : logging (AOP)
7. Step3 : ProxyFactory using Generic
8. 예제에서의 Proxy
Proxy.newProxyInstance(ClassLoader, Interface[], InvocationHandler );
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
}proxy, method, Object[] - parameters
9. MyBatis Mapper 구현해보기1. Domain class User, Depart
9. MyBatis Mapper 구현해보기2. Select Annotation 및 User Mapper 생성
9. MyBatis Mapper 구현해보기3. MapperProxyHandler
9. MyBatis Mapper 구현해보기4. MapperFactory 및 Test Class
9. MyBatis Mapper 구현해보기5. Depart에 대한 Select는? Factory와 Handler의 수정
9. MyBatis Mapper 구현해보기6. Test는?
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. 필드수가 줄어들면? -> 역시 어떻게 찾을것인가?
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();
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();
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