一、前言
java通过执行sql语句对oracle和mysql数据库数据分别实现分页功能语法是不一样的,一个是通过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@}