oracle 、MySql分页 举例

三重循环

select mbid00,mbmc00, llurl0,cfwz00,mbsltp,sycs00,lrsj00 from (
  select mbid00,mbmc00, llurl0,cfwz00,mbsltp,sycs00,lrsj00,rownum as con from (
    select * from JZ_MBXXB0 where 1=1 and lbid00=
    '201'
    order by lrsj00)
     where rownum<=
     10
     ) where con>=
     1

在hibernate + Mysql 方式

/**
	 * 分页查询
	 */
	@SuppressWarnings("unchecked")
	public List doSearch(PageDao pageDAO, final int pageSize,
			final String name00) throws Exception {
		
		List list = new ArrayList();
		StringBuffer sql = new StringBuffer(
		"from Book b where b.name00 LIKE '%");
		sql.append(name00);
		sql.append("%'");
		
		final String typeSql = new String(sql);
		// 设置每页显示条数
		pageDAO.setPagesize(pageSize);
		int pagesize = pageDAO.getPagesize();
		// 获取总记录数
		List count = (List)hibernateTemplate.execute(  

			new HibernateCallback(){
				public Object doInHibernate(Session session)
				throws HibernateException, SQLException{
				Query q = session.createQuery(typeSql);
				//q.setFirstResult(0);
				//q.setMaxResults(2);
				List ss =q.list();
				return q.list(); //没查到数据也不会返回null, 只能用isEmpty
			}
		}
		);
		pageDAO.getRsCountForSQL(count.size());
		// 获取总页数
		pageDAO.GetPageCount();
		// 获取当前页
		final int currpage = pageDAO.GetCurrentPageForRequest();
		// 设置工具条类型
		String pool = pageDAO.pagetool(PageDao.Text);

		//System.out.println(pageDAO.getParamUrl());
		
		List<BookDTO> dt = new ArrayList<BookDTO>();
		List rs = (List)hibernateTemplate.execute(  

				new HibernateCallback(){
					public Object doInHibernate(Session session)
					throws HibernateException, SQLException{
					Query q = session.createQuery(typeSql);
					q.setFirstResult((currpage - 1) * pageSize);
					q.setMaxResults(pageSize);//currpage * 
					List ss =q.list();
					return q.list(); //没查到数据也不会返回null, 只能用isEmpty
				}
			}
			);
		for (Iterator it = rs.iterator(); it.hasNext();) {
			Object obj = it.next();
			BookDTO dto = new BookDTO();
			BeanUtils.copyProperties(obj,dto);
			dt.add(dto);
		}
		//session.setAttribute("pagedto", pageDAO);
		list.add(0,dt);
		list.add(1,pool);
		return list;
		
	}


hibernate + Oracle  方式 效率较差

public List queryMbList(final PageDao pageDAO, final int pageSize,
			String lbid) {
		
		List list = new ArrayList();
		StringBuffer sql = new StringBuffer();
		StringBuffer hql = new StringBuffer();
		
			sql = new StringBuffer(
			"select * from JZ_MBXXB0 where 1=1 and lbid00='");
			sql.append(lbid);
			sql.append("'");
		}
		
		// 设置每页显示条数
		pageDAO.setPagesize(pageSize);
		@SuppressWarnings("unused")
		int pagesize = pageDAO.getPagesize();
		// 获取总记录数
		List count = persistence.executeSQLQuery(sql.toString());
		pageDAO.getRsCountForSQL(count.size());
		// 获取总页数
		pageDAO.GetPageCount();
		// 获取当前页
		int currpage = pageDAO.GetCurrentPageForRequest();
		// 设置工具条类型
		String pool = pageDAO.pagetool(PageDao.Text);
		
		
		hql = new StringBuffer(
		"select mbid00,mbmc00, llurl0,cfwz00,mbsltp,sycs00,lrsj00 from ( ");
		hql.append("select mbid00,mbmc00, llurl0,cfwz00,mbsltp,sycs00,lrsj00,rownum as con from (");
		
		if(lbid.equals("200")){
			hql.append("select * from JZ_MBXXB0 where 1=1");
		}else{
			hql.append("select * from JZ_MBXXB0 where 1=1 and lbid00='");
			hql.append(lbid);
			hql.append("'");
		}
		
		
		hql.append("order by sycs00 desc,lrsj00 desc)"); //按条件排序 
		hql.append(" where rownum<=");
		hql.append(currpage * pageSize); //显示到第几条
		hql.append(") where con>="); //从第几行开始显示
		hql.append((currpage - 1) * pageSize + 1);
		List<Mbxxb0DTO> dt = new ArrayList<Mbxxb0DTO>();
		List rs = persistence.executeSQLQuery(hql.toString());
		for (Iterator it = rs.iterator(); it.hasNext();) {
			Object obj = it.next();
			Mbxxb0DTO dto = new Mbxxb0DTO();
			BeanHelper.copyProperties(obj,dto);
			dt.add(dto);
		}
		list.add(0,dt);
		list.add(1,pool);
		return list;
	}


OracleMySQL都支持分页查询,但它们使用不同的语法和关键字来实现。 在Oracle中,分页查询可以使用ROWNUM伪列来实现。ROWNUM是Oracle的一个伪列,用于按顺序为查询结果中的行分配唯一的行号。为了实现分页,我们可以在查询语句中使用ROWNUM的大小和判断条件。例如,要获取第1到第10行的结果,可以使用以下语句: SELECT * FROM (SELECT t.*, ROWNUM AS rn FROM 表名 t WHERE ROWNUM <= 10) WHERE rn > 0; 这将返回结果集中的前10行。 在MySQL中,分页查询可以使用LIMIT关键字来实现。LIMIT关键字接受两个参数,第一个参数表示返回结果的起始索引,第二个参数表示返回的记录数。例如,要获取第1到第10行的结果,可以使用以下语句: SELECT * FROM 表名 LIMIT 0, 10; 这将返回结果集中的前10行。 总结来说,Oracle使用ROWNUM伪列实现分页查询,而MySQL使用LIMIT关键字实现分页查询。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [oracle分页mysql分页](https://blog.csdn.net/qq_43774175/article/details/105549271)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [MYSQLORACLE分页](https://blog.csdn.net/qq_41482600/article/details/127815977)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值