728x90
반응형
statementName, Object parameterObject)
throws SQLException
public int update(String statementName, Object parameterObject)
throws SQLException
public int delete(String statementName, Object parameterObject)
throws SQLException
public Object queryForObject(String statementName,
Object parameterObject)
throws SQLException
public Object queryForObject(String statementName,
Object parameterObject, Object resultObject)
throws SQLException
public List queryForList(String statementName, Object parameterObject)
throws SQLException
public List queryForList(String statementName, Object parameterObject,
int skipResults, int maxResults)
throws SQLException
public List queryForList (String statementName,
Object parameterObject, RowHandler rowHandler)
throws SQLException
public PaginatedList queryForPaginatedList(String statementName,
Object parameterObject, int pageSize)
throws SQLException
public Map queryForMap (String statementName, Object parameterObject,
String keyProperty)
throws SQLException
public Map queryForMap (String statementName, Object parameterObject,
String keyProperty, String valueProperty)
throws SQLException
public void flushDataCache()
public void flushDataCache(String cacheId)
38
각각의 경우에 맵핑된 statement의 이름은 첫번째 파라미터로 넘겨진다. 이 이름은 위에서 서술된 <statement>요소의
name속성에 대응된다. 추가적으로 파라미터객체는 옵션적으로 전달할수 있다. null파라미터객체는 만약 기대되는 파라
미터가 없다면 전달될수 있다. 행위의 남겨진 차이점은 아래에서 간단하게 설명된다.
insert(), update(), delete() : 이 메소드들은 update statement를 위해 특별히 의미된다. 밑의 쿼리 메소드중에 하나를 사
용해서 update statement를 수행하는 것은 불가능하다. 어쨌든 이것은 애매한 의미이고 드라이버에 의존적이다.
executeUpdate()의 경우에 statement는 간단하게 수행되고 영향을 받는 많은 수의 row가 반환된다.
queryForObject() : executeQueryForObject()의 두가지 버전이 있다. 하나는 새롭게 할당된 객체를 반환하는 것이고 다른
하나는 파라미터처럼 전달된 미리할당된 객체를 사용하는것이다. 후자의 경우 하나의 statement보다 많은 수에 의해 생성되
는 객체에 유용하다.
queryForList() : queryForList()에는 세가지 버전이 있다. 첫번째는 쿼리를 실행하고 쿼리로부터 모든 결과를 반환하는것이
고 두번째는 스킵되는 결과물의 수(이를 테면 시작지점)를 지정할수 있고 반환되는 레코드의 최대갯수도 지정할수 있다. 이
것은 전체데이터를 반환하고 싶지 않은 굉장히 큰 데이터셋과 작업을 할 때 가치가 있다. 마지막으로 세번째는 row핸들러를
가진다. 이 메소드는 대개의 칼럼과 rows보다 result객체를 사용해서 row에 의해 결과를 처리하도록 한다. 이 메소드는 전형
적인 이름과 파라미터 객체를 넘기지만 RowHandler를 가진다. row핸들러는 RowHandler인터페이스를 구현하는 클래스의 인
스턴스이다. RowHandler인터페이스는 다음처럼 오직 하나의 메소드만 가진다.
public void handleRow (Object object, List list);
이 메소드는 데이터베이스로부터 반환되는 각각의 row를 위한 RowHandler에서 호출될것이다. 이것은 쿼리결과를 처리하기
위해 깔끔하고 간단하며 확장가능한 방법이다. RowHandler의 사용법 에제를 위해 아래 섹션의 예제를 보라. 리스트 파라미
터는 queryForList()메소드로부터 반환될 List인터페이스의 인스턴스이다. 당신은 리스트의 result객체의 아무것도, 몇몇 또는
모든 것을 추가할수도 있다. 만약 당신이 100만개의 row로 작업을 한다면 리스트에 그것들을 모두 넣는 것은 좋은 생각이 아
니다.
queryForPaginatedList(): 이것은 이전, 다음 버튼으로 데이터를 탐색할 때 데이터의 일부를 관리할수 있는 리스트를 반환
하는 매우 유용한 메소드이다. 이것은 쿼리로부터 반환된 레코드의 일부만을 표시하는 사용자 인터페이스를 구현하는데 유용
하다. 10,000개의 필드를 반환하는 검색엔진이 있지만 한번에 100개만 표시해야 하는 예제가 있다. PaginatedList인터페이스
는 페이지를 통한 탐색(nextPage(), previousPage(), gotoPage())과 페이지의 상태를 체크(isFirstPage(), isMiddlePage(),
isLastPage(), isNextPageAvailable(), isPreviousPageAvailable(), getPageIndex(), getPageSize())하는 메소드를 포함한다. 유효
한 레코드의 총 개수가 PaginatedList인터페이스로부터 접근가능하지 않더라도 이것은 기대되는 결과갯수를 세는 두번째
statement를 간단히 수행함으로써 쉽게 달성할 수 있을 것이다. 반면에 PaginatedList를 사용하면 지나친 부하가 발생할수도
있다.
queryForMap(): 이 메소드는 리스트로 결과의 collection을 로드하는 대안을 제공한다. 대신에 이것은 keyProperty처럼 전달
된 파라미터에 의해 결과를 키(key)화된 map으로 로드한다. 예를 들면 만약 Employee객체의 collection을 로드한다면 당신은
그것들을 employeeNumber프라퍼티에 의해 키(key)화된 map으로 로드할것이다. Map의 값은 전체 employee객체가 될수도
있고 valueProperty라고 불리는 두번째 파라미터내 정의된 employee개체로 부터의 다른 프라퍼티가 될수도 있다. 예를들면
당신은 employee숫자에 의해 키(key)화된 employee이름의 map을 원할지도 모른다. result객체처럼 Map타입을 사용하는 개
념을 사용하는 메소드를 혼란스러워하지 마라. 이 메소드는 result객체가 자바빈즈나 Map인지에따라 사용될수 있다.
flushDataCache(): 이 메소드는 데이터 캐시를 버리는 프로그램을 사용한 방식을 제공한다. 인자 없는 메소드는 모든 데이
터 캐시를 제거할것이다. 인자로 cacheId를 가지는 메소드는 명명된 데이터 캐시를 제거할것이다. 후자의 경우를 위해, 당신
은 명명공간을 사용하여 cachaId를 명시할 필요가 있다. (비록 당신이 useStatementNamespaces 를 false 로 셋팅하더라
도).
Example 1: Update (insert, update, delete) 수행하기.
sqlMap.startTransaction();
Product product = new Product();
product.setId (1);
product.setDescription (“Shih Tzu”);
int rows = sqlMap.insert (“insertProduct”, product);
39
sqlMap.commitTransaction();
Example 2: 객체를 위한 쿼리 수행하기. (select)
sqlMap.startTransaction();
Integer key = new Integer (1);
Product product = (Product)sqlMap.queryForObject (“getProduct”, key);
sqlMap.commitTransaction();
Example 3: 미리 할당된 result객체를 가지고 객체를 위한 쿼리 수행하기.
sqlMap.startTransaction();
Customer customer = new Customer();
sqlMap.queryForObject(“getCust”, parameterObject, customer);
sqlMap.queryForObject(“getAddr”, parameterObject, customer);
sqlMap.commitTransaction();
Example 4: 리스트를 위한 뭐리 수행하기. (select)
sqlMap.startTransaction();
List list = sqlMap.queryForList (“getProductList”, null);
sqlMap.commitTransaction();
Example 5: 자동 커밋
// When startTransaction is not called, the statements will
// auto-commit. Calling commit/rollback is not needed.
int rows = sqlMap.insert (“insertProduct”, product);
Example 6: 결과 경계를 가지고 리스트를 위한 쿼리 수행하기.
sqlMap.startTransaction();
List list = sqlMap.queryForList (“getProductList”, null, 0, 40);
40
sqlMap.commitTransaction();
Example 7: RowHandler를 가지고 쿼리 수행하기. (select)
public class MyRowHandler implements RowHandler {
public void handleRow (Object object, List list) throws
SQLException {
Product product = (Product) object;
product.setQuantity (10000);
sqlMap.update (“updateProduct”, product);
// Optionally you could add the result object to the list.
// The list is returned from the queryForList() method.
}
}
sqlMap.startTransaction();
RowHandler rowHandler = new MyRowHandler();
List list = sqlMap.queryForList (“getProductList”, null, rowHandler);
sqlMap.commitTransaction();
Example 8: 페이지 처리된 리스트를 위한 쿼리 수행하기. (select)
PaginatedList list =
sqlMap.queryForPaginatedList (“getProductList”, null, 10);
list.nextPage();
list.previousPage();
Example 9: map을 위한 쿼리 수행하기.
sqlMap.startTransaction();
Map map = sqlMap.queryForMap (“getProductList”, null, “productCode”);
sqlMap.commitTransaction();
Product p = (Product) map.get(“EST-93”);
Jakarta Commons Logging 으로 SqlMap로깅하기.
SqlMap프레임워크는 Jakarta Commons Logging(JCL)의 사용을 통해 로깅정보를 제공한다. JCL프레임워크는 독립적인 방법
41
으로 구현되어서 로깅 서비스를 제공한다. 당신은 Log4J와 JDK1.4로깅 API를 포함하는 다양한 로깅제공자를 플러그인할수
있다. Jakarta Commons Logging의 스펙은 Log4J와 JDK1.4로깅 API는 이 문서의 범위를 넘어선다. 어쨌든 아래 설정된 예제
로 당신은 시작할수 있을것이다. 만약 이 프레임워크에 대해서 좀더 상세한 정보를 알기를 원한다면 당신은 다음 위치에서 좀
더 다양한 정보를 얻을수 있을것이다.
Jakarta Commons Logging
http://jakarta.apache.org/commons/logging/index.html
Log4J
http://jakarta.apache.org/log4j/docs/index.html
JDK 1.4 Logging API
http://java.sun.com/j2se/1.4.1/docs/guide/util/logging/

 

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,