天天看點

Mybatis分頁插件-PageHelper(5.0)的使用

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}​

​翻到上一頁,