package jef.database; import java.sql.SQLException; import java.util.List; import jef.tools.Assert; import jef.tools.PageInfo; import jef.tools.PageLimit; final class PagingIteratorNativeQImpl<T> extends PagingIterator<T>{ private NativeQuery<T> nativeQuery;//3使用NativeQuery的情况 PagingIteratorNativeQImpl(NativeQuery<T> sql, int pageSize) { this.nativeQuery=sql; Assert.notNull(sql); this.transformer = sql.getResultTransformer(); page = new PageInfo(); page.setRowsPerPage(pageSize); } @Override protected long doCount() throws SQLException { return nativeQuery.getResultCount(); } protected List<T> doQuery(boolean pageFlag) throws SQLException { calcPage(); PageLimit range=page.getCurrentRecordRange(); if(range.getStart()==1 && range.getEndAsInt()==page.getTotal()){ pageFlag=false; } if(pageFlag) nativeQuery.setRange(range); List<T> result=nativeQuery.getResultList(); if (result.isEmpty()) { recordEmpty(); } return result; } public NativeQuery<T> getQuery(){ return nativeQuery; } }