Mybatis 分页跑批处理数据简易框架
2017-02-07 16:51
190 查看
需求:解决跑批查询出来数据量太大,做了一个简单的分页处理数据框架
主要两个类:PageHelperService 和 AbstractPageHelperService
主要两个类: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 源代码,实现数据库分页及Object[]数据结果
- CYQ.Data 数据框架 数据库分页方式及存储过程[SQL2000/SQL2005/Oracle]
- jdbc_分页查询,大数据,批处理,存储过程
- mybatis框架的两种分页
- 在基于Mybatis持久层框架,使用数据库事务时,插入一条数据后,无法返回主键ID的问题研究
- 基于Prototype 1.6.2 框架下的数据分页
- java大数据 高并发 系统框架 springmvc mybatis Bootstrap html5
- 【MyBatis框架】订单商品数据模型-分析思路
- Codeigniter框架实现获取分页数据和总条数的方法
- Java的MyBatis框架中实现多表连接查询和查询结果分页
- Silverlight + DomainService 简易框架之三完成一个数据(非集合)查询操作
- 第十五天3月10日之JDBC案例、分页技术、大数据(文本、图片)存储、批处理和存储过程的调用
- MyBatis分页返回数据不对问题
- Mybatis关联查询一对多使用插件分页返回数据不对
- Struts2+Hibernate3+Spring三大框架技术实现MySQL数据分页
- CYQ.Data 数据框架 数据库分页方式及存储过程[SQL2000/SQL2005/Oracle]
- mybatis-分页显示数据
- mybatis数据库数据分页问题
- MyBatis分页返回数据不对问题
- MyBatis知识系列之五:利用Mybatis实现数据表的分页