Java에서 페이징 쿼리 호출해서 사용할 시
보통 for문 안에서 page 값 계산해서 쿼리 호출 후 결과로 로직 처리하고
다시 page 값 계산해서 쿼리 호출 후 결과로 로직 처리하고
이런 반복되는 부분을 Consumer로 처리해보았다.
- 페이징 유틸 소스
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import org.mybatis.spring.SqlSessionTemplate;
import lombok.Builder;
@Builder
public class PagingUtil<T> {
private int pageSize;
private SqlSessionTemplate sqlSessionTemplate;
private String statement;
private Map<String, Object> paramMap;
private void notNull(Object object, String message) {
if (object == null) {
throw new IllegalArgumentException(message);
}
}
public void forEach(Consumer<T> action) {
notNull(sqlSessionTemplate, "sqlSessionTemplate is required.");
notNull(statement, "statement is required.");
int page = 0;
if (pageSize == 0) {
pageSize = 100;
}
if (paramMap == null) {
paramMap = new HashMap<>();
}
while (true) {
paramMap.put("limit", page * pageSize);
paramMap.put("offset", pageSize);
List<T> list = sqlSessionTemplate.selectList(statement, paramMap);
if (list.isEmpty()) {
break;
}
for (T t : list) {
action.accept(t);
}
page++;
}
}
}
- 페이징 유틸 소스 호출 부분
public static void main(String[] args) throws Exception {
Driver driver = <Driver>;
String url = "<url>";
String username = "<username>";
String password = "<password>";
SimpleDriverDataSource dataSource = new SimpleDriverDataSource(driver, url, username, password);
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:mybatis/mappers/*-sql.xml"));
sqlSessionFactoryBean.setConfigLocation(resolver.getResource("classpath:mybatis/mybatis-config.xml"));
SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactoryBean.getObject());
PagingUtil.<T>builder()
.sqlSessionTemplate(sqlSessionTemplate)
.statement(..)
.pageSize(3)
.paramMap(..)
.build()
.forEach(t -> {
// 로직처리
System.out.println(t);
});
}
끝.
'ORM' 카테고리의 다른 글
myBatis list/array parameter type 처리 (0) | 2018.10.23 |
---|---|
myBatis plugin interceptor sql 바인딩 로깅 구현 (0) | 2015.09.01 |
Java + MyBatis (0) | 2011.09.21 |
댓글