mybatis分頁插件MicroPageInterceptor

mybatis分頁插件MicroPageInterceptor

源碼地址:
https://github.com/jeffreyning/mybatis-plus

MicroPageInterceptor特點
1, 支持mysql和oracle分頁
2, 不必在xml編寫統計count的sql
3, 使用RowBounds子類PageInfo作爲分頁信息和記錄總數的載體,不必像其他分頁插件那樣要求輸入輸出參數必須繼承特殊父類。
4, 可在PageInfo中填寫自定義排序sql串,提高查詢性能和排序靈活性

spring中配置mybatis分頁插件MicroPageInterceptor
建議在sqlSessionFactory中配置,可以根據sqlSessionFactory是oracle還是mysql配置插件的dialect屬性

    <!-- define the SqlSessionFactory -->  <beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">
        <propertyname="dataSource"ref="dynamic_xa_dataSource"/>
        <propertyname="typeAliasesPackage"value="foo.model"/>
      <propertyname="plugins">         
        <list>             
           <beanclass="com.nh.micro.mybatis.plugin.MicroPageInterceptor">
           <propertyname="dialect"value="mysql"/>
            </bean>         
        </list>     
      </property>        
    </bean>

Dao接口設置
接口中添加PageInfo參數,表示需要分頁處理

//分頁查詢,傳入PageInfo參數
public List queryInfoByCondition(Map paramMap,PageInfo pageInfo);
//不分頁,則不用傳PageInfo參數
public List queryInfoByCondition(Map paramMap);

PageInfo結構
PageInfo繼承RowBounds可以透傳到Mybatis內部,不影響正常的參數。
pageNo,頁數從1開始
pageRows,每頁條數
orderStr,自定義排序sql(非必填)
total,返回總記錄數(返回值)

public class PageInfo extends RowBounds {
    public PageInfo(int pageNo,int pageRows) {
        super(pageNo, pageRows);
    }
    public PageInfo(int offset,int limit, String orderStr) {
        super(offset, limit);
        this.orderStr=orderStr;
    }
    private Longtotal = 0l;
    public Long getTotal() {
        returntotal;
    }
    public void setTotal(Long total) {
        this.total = total;
    }
    private StringorderStr = "";
    public String getOrderStr() {
        returnorderStr;
    }
    public void setOrderStr(String orderStr) {
        this.orderStr = orderStr;
    }
}

分頁或不分頁sql在xml中是一樣的不需要修改;sql不需要針對pageinfo做額外處理,比如手工添加limit或rownum;不需要分頁的則不傳PageInfo參數;不需要額外填寫count統計sql;

<selectid="queryInfoByCondition"parameterType="Map"resultType="java.util.Map">        
select * from  micro_test5 where condition=#{param}    
</select>

Java調用Dao
PageInfo創建實例時需填寫pageNo(頁數從1開始)和pageRows(每頁條數)
如果xml中sql沒有orderby語句可以,在pageInfo中設置pageInfo.setOrderStr()

//創建分頁信息對象
PageInfo pageInfo=new PageInfo(1,10);//第1頁,每頁10條
//可以設置order串(非必須)
pageInfo.setOrderStr("id desc");
//調用dao並傳入pageInfo
List list=testRep.queryInfoById(paramMap,pageInfo);
System.out.println(list);
//使用pageInfo.getTotal()獲取總記錄數
System.out.println(pageInfo.getTotal());

注意:
1,自定義排序
如果xml中sql沒有寫死排序sql,則pageInfo可以設置排序字符串。好處是查詢記錄個數時不必排序,查詢記錄時自動拼上排序sql,提高查詢性能。也可以不修改xml中sql支持靈活排序。
2,總記錄數處理
不必編寫額外的查詢count的sql;記錄數會在插件中設置到pageInfo對象的total字段中帶回。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章