maven依賴
<!-- pagehelper分頁插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.0.0</version>
</dependency>
一、首先,在
spring-mybatis.xml
中是這樣配置:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 資料庫連接配接池 -->
<property name="dataSource" ref="dataSource" />
<!-- 加載mybatis的全局配置檔案 -->
<!-- <property name="configLocation" value="classpath:sqlMapConfig.xml"
/> -->
<!-- 為com.red.packet.po包下的所有實體類配置别名(mybatis 3.2.8以上版本) -->
<property name="typeAliasesPackage" value="com.red.packet.po" />
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<value>
helperDialect=mysql
</value>
</property>
</bean>
</array>
</property>
</bean>
二、需要分頁,自然就還要一個查詢了。用了PageHelper之後,查詢語句就可以很簡單了。
<select id="selectAll" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from citylist
</select>
這是我的查詢語句,查詢城市清單。沒有其他條件,就是查所有。當然,我這隻是一個小的demo,沒做那麼麻煩,真正的使用,是需要條件查詢的。
現在來講講用了PageHelper之後的好處:
那就是查詢語句可以不用limit,但是就一點好處嗎?自然不是。請接着往下看。
三、接口、實作類我就不再貼代碼了,該怎麼寫還是怎麼寫,不需要傳分頁參數。然後是Controller:
@RequestMapping("showcity")
public ModelAndView showCityList(ModelAndView mv,
@RequestParam(required=true,defaultValue="1") Integer page,
@RequestParam(required=false,defaultValue="10") Integer pageSize){
PageHelper.startPage(page, pageSize);
List<CityList> list = cityListService.selectAll();
PageInfo<CityList> p=new PageInfo<CityList>(list);
//System.out.println(p.getList());
mv.addObject("citylist", list);
mv.addObject("page", p);
mv.setViewName("weather/showCityList");
return mv;
}
可以看到,方法裡有兩個參數,前面也說了,這是一個demo,僅僅隻是一個非常簡單的分頁效果。
PageHelper.startPage(page, pageSize);
這段代碼表示,程式開始分頁了,page預設值是1,pageSize預設是10,意思是從第1頁開始,每頁顯示10條記錄。
PageInfo這個類是插件裡的類,這個類裡面的屬性還是值得看一看:
//目前頁
private int pageNum;
//每頁的數量
private int pageSize;
//目前頁的數量
private int size;
//排序
private String orderBy;
//由于startRow和endRow不常用,這裡說個具體的用法
//可以在頁面中"顯示startRow到endRow 共size條資料"
//目前頁面第一個元素在資料庫中的行号
private int startRow;
//目前頁面最後一個元素在資料庫中的行号
private int endRow;
//總記錄數
private long total;
//總頁數
private int pages;
//結果集
private List<T> list;
//第一頁
private int firstPage;
//前一頁
private int prePage;
//下一頁
private int nextPage;
//最後一頁
private int lastPage;
//是否為第一頁
private boolean isFirstPage = false;
//是否為最後一頁
private boolean isLastPage = false;
//是否有前一頁
private boolean hasPreviousPage = false;
//是否有下一頁
private boolean hasNextPage = false;
//導航頁碼數
private int navigatePages;
//所有導航頁号
private int[] navigatepageNums;
使用PageInfo這個類,你需要将查詢出來的list放進去:
PageInfo<CityList> p=new PageInfo<CityList>(list);
然後
mv.addObject("page", p);
這樣在頁面中就可以通過
${page.nextPage}
翻到下一頁,
${page.prePage}
翻到上一頁,