您的位置:首页 > 其它

Mybatis 分页跑批处理数据简易框架

2017-02-07 16:51 190 查看
需求:解决跑批查询出来数据量太大,做了一个简单的分页处理数据框架

主要两个类:PageHelperService 和 AbstractPageHelperService

/**
* ClassName:PageHelperService Function: 分页跑批数据
*
* @author WEIJIA625
* @version
* @since Ver 1.1
* @Date 2017年1月17日 下午4:31:49
*
* @see
*/
public interface PageHelperService<T> {

/**
*
* queryAllData:(要实现的查询数据的方法)
*
* @param @param query
* @param @return 设定文件
* @return PageInfo<T> DOM对象
* @throws
* @since CodingExample Ver 1.1
*/
PageInfo<T> queryAllData(T query);

/**
* doPageData:(要实现的处理数据的方法)
*
* @param @param aPageData 设定文件
* @return void DOM对象
* @throws
* @since CodingExample Ver 1.1
*/
void doPageData(PageInfo<T> aPageData);

/**
*
* queryPageData:(包装queryAllData实现分页-SQL尾加Limit)
*
* @param @param query
* @param @param pageSize
* @param @param page
* @param @return 设定文件
* @return PageInfo<T> DOM对象
* @throws
* @since CodingExample Ver 1.1
*/
PageInfo<T> queryPageData(T query, int pageSize, int page);

/**
*
* doLoopPageData:(包装了分页查询和处理数据的逻辑,查询和处理在queryAllData和doPageData方法)
*
* @param @param query
* @param @param pageSize 设定文件
* @return void DOM对象
* @throws
* @since CodingExample Ver 1.1
*/
void doLoopPageData(T query, int pageSize);

/**
*
* doLoopPageData:(包装了分页查询和处理数据的逻辑,查询和处理在queryAllData和doPageData方法)
* 默认pageSize=AbstractPageHelperService.BATCH_SIZE
*
* @param @param query 设定文件
* @return void DOM对象
* @throws
* @since CodingExample Ver 1.1
*/
void doLoopPageData(T query);
}


public abstract class AbstractPageHelperService<T> implements PageHelperService<T> {

private Logger logger = LoggerFactory.getLogger(getClass());
private static final int BATCH_SIZE = 600;

public PageInfo<T> queryPageData(T query, int pageSize, int page) {
//只对紧跟的第一条SQL有效
PageHelper.startPage(page, pageSize);
return queryAllData(query);
}

public void doLoopPageData(T query) {
doLoopPageData(query, BATCH_SIZE);
}

public void doLoopPageData(T query, int pageSize) {
PageHelper.startPage(1, pageSize);
PageInfo<T> pageData = queryAllData(query);
doPageData(pageData);
printPageDataInfo(pageData);
for (int i = pageData.getPages(); i >= 2; i--) {
//分页参数合理化
PageHelper.startPage(i, pageSize, false, true);
pageData = queryAllData(query);
doPageData(pageData);
printPageDataInfo(pageData);
}
}

private void printPageDataInfo(PageInfo<T> pageData) {
logger.info("id[{}] Total[{}] PageNum[{}] StartRow[{}] EndRow[{}]", //
UUID.randomUUID(), pageData.getTotal(), pageData.getPageNum(), //
pageData.getStartRow(), pageData.getEndRow());
}

@Override
public void doPageData(PageInfo<T> aPageData) {
logger.info("doPageData do not Override");
}

import com.github.pagehelper.PageInfo;
import com.pingan.toa.asset.dao.mapper.bank.AssetBankCardMapper;
import com.pingan.toa.asset.model.po.bank.AssetBankCardPO;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service("bizService")
public class BizService extends AbstractPageHelperService<AssetBankCardPO> {

private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private AssetBankCardMapper assetBankCardMapper;

@Override
public PageInfo<AssetBankCardPO> queryAllData(AssetBankCardPO aCondition) {

// Example ex=new Example(AssetBankCardPO.class);
// ex.setOrderByClause("customerOrgName desc");
Map<String, Object> m = new HashMap<String, Object>();
List<AssetBankCardPO> selectAll = assetBankCardMapper.query(m);
logger.info("查询[{}]", selectAll.size());
StringBuffer buf = new StringBuffer();
for (AssetBankCardPO po : selectAll) {
buf.append(po.getCustomerOrgName() + ",");
}
logger.info("数据[{}]", buf.toString());
return new PageInfo<AssetBankCardPO>(selectAll);

}

@Override
public void doPageData(PageInfo<AssetBankCardPO> aPageData) {
StringBuffer buf = new StringBuffer();
for (AssetBankCardPO po : aPageData.getList()) {
buf.append(po.getCustomerOrgName() + ",");
}
logger.info("处理[{}]", aPageData.getSize());
logger.info("数据[{}]", buf.toString());
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis 框架 批处理