1. 程式人生 > >Mybatis分頁插件-PageHelper的使用

Mybatis分頁插件-PageHelper的使用

epo obj 實現 默認值 prev asn release dsm out

轉載:http://blog.csdn.net/u012728960/article/details/50791343

Mybatis分頁插件-PageHelper的使用

怎樣配置mybatis這裏就不提了,我來說說我配置這個分頁插件的過程吧。

下載JAR包

分頁插件pagehelper.jar:

https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/
http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/
由於使用了sql解析工具,你還需要下載jsqlparser.jar

4.1.0及以後版本需要0.9.4版本

http://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/0.9.4/
4.1.0以前版本需要0.9.1版本

http://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/0.9.1/

一、首先,在spring-mybatis.xml中是這樣配置:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath:com/sinyat/api/weather/mapping/*.xml" />
        <property name="typeAliasesPackage" value="com.sinyat.api.weather.model" />
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageHelper">
                    <property name="properties">
                        <value>
                            dialect=mysql
                        </value>
                    </property>
                </bean>
            </array>
        </property>
    </bean>

我是在spring裏配置的,還可以在mybatis-config.xml裏配置,有興趣的話可以百度下。

二、需要分頁,自然就還要一個查詢了。用了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}翻到上一頁,
技術分享

下面這個是因為我沒有進行判斷,所以,第0頁自然是什麽都沒有的。
技術分享
判斷的話,在PageInfo裏有對應的屬性,比如:

    //是否有前一頁
    private boolean hasPreviousPage = false;
    //是否有下一頁
    private boolean hasNextPage = false;

好了,demo就是這些了。

下一個是通用Mapper,據說也是很不錯的東西。

Mybatis分頁插件-PageHelper的使用