首页

解决mysql和oracle数据库关于SQL分页差异性问题办法示例JAVA代码分享

标签:sql,分页,limit,rownum,java,代码,hibernate分页     发布时间:2017-03-12   

一、前言

java通过执行sql语句对oraclemysql数据库数据分别实现分页功能语法是不一样的,一个是通过rownum,另一个是通过limit,如何在代码中屏蔽差异化设计呢

二、代码示例

1. 首先定义公共的接口IDBHelper,如下所示

public interface IDBHelper {@b@@b@	String wrapToPageSql(String sql, int start, int limit);@b@}

2.实现oracle的实现类OracleHelper,如下

public class OracleHelper implements IDBHelper {@b@	@Override@b@	public String wrapToPageSql(String sql, int start, int limit) {@b@		int end = start + limit; @b@		return "select * from (select rownum rn,t2.* from ("+sql+") t2 where rownum <= "+end+") t1 where t1.rn > "+start;@b@	}@b@}

3.实现mysql的实现类MySQLHelper,如下

public class MySQLHelper implements IDBHelper { @b@	@Override@b@	public String wrapToPageSql(String sql, int start, int limit) {@b@		return sql + " limit "+start+","+limit;@b@	}@b@@b@}

三、补充说明

Hibernate分页(setFirstResult、setMaxResults)

public List<T> findPage(String hql,int firstRow,int maxRow){@b@      List<T> result;@b@  @b@      Session session=HibernateUtil.getSession();@b@@b@      Query q = session.createQuery(hql);@b@      q.setFirstResult(firstRow);@b@      q.setMaxResults(maxRow);@b@      result =(List<T>) q.list(); @b@@b@      session.flush();@b@      HibernateUtil.closeSession(session);@b@      @b@      return result;@b@}