mybatis实现物理分页

本文探讨了Mybatis在Oracle数据库中的分页实现,比较了mybatis自带的逻辑分页与物理分页的效率,并提供了两种物理分页的实现方式:使用include标签和拦截器。通过拦截器改造RowBounds,实现物理分页,同时分享了相关参考资料。
摘要由CSDN通过智能技术生成

  这两两天由于工作需要,对mybatis分页进行研究,现进行记录,主要从一下两个方面阐述。博主用的数据库是oracle,所以以下分页都是针对oracle的,mybatis版本是3.3.0

  一.mybatis自带分页功能的效率与物理分页的效率对比

1.mybatis自带分页功能

通过查找资料,mybatis分页是逻辑分页,如果数据量大会造成内存溢出.mybatis自带分页实现如下

dao层代码

 

public List<WorkflowRecord> queryByMybatis(int startRow, int endRow) {
		
		RowBounds rowBounds = new RowBounds(startRow,endRow);
		System.out.println("rowBounds Offset:"+rowBounds.getOffset());
		System.out.println("rowBounds Limit:"+rowBounds.getLimit());
		WorkflowRecord workflowRecord=new WorkflowRecord();
		return sqlSessionTemplate.selectList(QUERY_BY_MYBYTAIS,workflowRecord,rowBounds);
	}

 对应的sql为

 

<select id="queryByMybatis" resultMap="proRecResult">

       select * from T_PROREC 	   	
</select>

 其中RowBounds的源码为

 



 红线部分为默认值 下文还会提到,RowBounds的两个属性offset,limit;

offset:从第n条开始取;limit:取多少条

 

2.物理分页

 

dao层代码

 

@Override
	public List<WorkflowRecord> queryBySql(int startRow, int endRow) {
		
              Map<String, Object> params =new HashMap<String, Object>();			
		params.put("startRow", new Integer(startRow));    
                params.put("endRow", new Integer(endRow));
		
		return sqlSessionTemplate.selectList(QUERY_BY_SQL, params);
	}

 对应sql

 

 

<select id="queryBySql" resultMap="proRecResult">
    
     select *
        from (SELECT ROWNUM r, t1.*
           from (
              selec
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值