iBatis中RowHandler处理大数据量的导出

使用MyRowHandler处理类来处理大量数据的导出:

实现RowHandler的方法

public class  XXXX(实现层方法名) implements RowHandler {
   
    private HSSFWorkbook wb;  
    private HSSFSheet sheet ;   
    private HSSFRow row;  
    private HSSFCell cell;  
    private int dataNum=0;  
    private int rowStart = 1;
    private int rowI = 0;
    
    public void setWb(HSSFWorkbook wb) {  
    this.wb = wb;  
        setSheet();  

//处理需要导出数据的业务
    List<T> lists = xxxxx(处理数据方法);
    handleRow(lists);
       
    }  
    @Override  
    public void handleRow(Object arg0){  
        dataNum++;  
        if(dataNum%50000==0){  
            //每5万条记录分页  
            setSheet();  
        }  


         //在这里处理逻辑,插入数据到excel  

Map  map = (Map) arg0;

        row =  sheet.createRow((int) rowI + 1);  

    row.createCell((short) 0).setCellValue(map.getKey());  
        row.createCell((short) 1).setCellValue(map.getValue);  
        rowI++;  
    }  
    public HSSFWorkbook getWb() {  
        return wb;  
    }  
  
    public void setSheet(){  
        this.sheet= wb.createSheet();  
        rowStart = 1;  
        //写表头  
        writeHeader();  
    }  
    public void writeHeader(){  
        String[] header = {"交易时间","机构订单号"};  
        row = sheet.createRow(0);  
        int n=0;  
        for (String  head : header) {  
            cell = row.createCell((short) n);  
            HSSFRichTextString str = new HSSFRichTextString(head);  
            cell.setCellValue(str);  
            n++;   
        }  
    }

}

controller层代码:

 public ModelAndView downloadsss(HttpServletRequest request, HttpServletResponse response ){
    logger.debug("FundoutChannelBillController.download() is running...");
    String queryTime = request.getParameter("queryTime");
        String channelName = request.getParameter("channelName");
        HSSFWorkbook wb = new HSSFWorkbook();  

HSSFRow row = null; 

//调用相应xxxxx的接口,写入excel

XXXX(实现层方法名) xxxx= new XXXX(实现层方法名)();
        xxxx.setWb(wb);  

YYYYService.ZZZZZ方法(xxxx);//调用queryWithRowHandler
        wb = xxxx.getWb();  

//弹出下载
response.setContentType("application/octet-stream; charset=UTF-8");
response.setHeader(
"Content-Disposition",
"attachment;filename=" + new String((System.currentTimeMillis() + ".xls").getBytes(), "ISO8859_1"));
ServletOutputStream outputStream = response.getOutputStream();
try {
wb.write(outputStream);
response.setStatus(HttpServletResponse.SC_OK);
outputStream.flush();
} catch (IOException e) {
logger.error(e.getMessage(), e);
} finally {
if (outputStream != null) {
outputStream.close();
}
}
}catch (Exception e) {
logger.error( "下载文件异常", e );
}


return null;
}


YYYYService的实现层

public class YYYYServiceImpl implements YYYYService{

public void ZZZZZ(RowHandler rowHandler) {
findListsDAO.ZZZZZ( rowHandler);
}

}


Dao层:

public  findListsDAO extends SqlMapClientDaoSupport{
public void ZZZZZ(RowHandler rowHandler){
getSqlMapClientTemplate().queryWithRowHandler("相应sql的查询", rowHandler); 
}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值