PageHelper還是MyBatis Plus自帶分頁(yè)插件?

在座CRUD boy肯定對(duì)各種分頁(yè)方式熟稔于心,那么,有沒(méi)有思考過(guò)為什么用它?有什么優(yōu)缺點(diǎn)?性能如何?
就拿MyBatis Plus(以下簡(jiǎn)稱MP)自帶的PaginationInnerInterceptor(真特么長(zhǎng),以下簡(jiǎn)稱PII)和PageHelper(以下簡(jiǎn)稱PH)來(lái)比較,你更中意那種?


假設(shè)有一個(gè)非常復(fù)雜的分頁(yè)查詢場(chǎng)景,需要在XML中手寫原生SQL,PH的Mapper會(huì)是這樣子的:

public interface UserMapper extends BaseMapper<User> {
    List<User> selectNative(UserQuery query);
}

咦~貌似和原始MyBatis沒(méi)有任何區(qū)別!

然后,PII是這樣子寫的(分頁(yè)參數(shù)必須放第一個(gè),第二個(gè)參數(shù)必須帶@Param注解):

public interface UserMapper extends BaseMapper<User> {
    IPage<User> selectNative(IPage<User> page, @Param("query") UserQuery query);
}

嗯~看起來(lái)稍微麻煩一丟丟……


PH的XML是這樣子的:

<mapper namespace="com.iakuil.mvp.dao.UserMapper">
    <select id="selectNative" resultType="com.hxzf.mvp.dao.entity.User" parameterType="com.iakuil.mvp.domain.UserQuery">
        select * from t_user where create_time &gt;= #{regStart} and create_time &lt;= #{regEnd}
    </select>
</mapper>

你騙我!這特么就是MyBatais原來(lái)的樣子!

PII的XML也有所不同:

<mapper namespace="com.iakuil.mvp.dao.UserMapper">
    <select id="selectNative" resultType="com.iakuil.mvp.dao.entity.User" parameterType="com.iakuil.mvp.domain.UserQuery">
        select * from t_user where create_time &gt;= #{query.regStart} and create_time &lt;= #{query.regEnd}
    </select>
</mapper>

多包了一層query,條件一多,是不是就有點(diǎn)礙眼了?

無(wú)疑PII更接近于JPA的寫法,但是耦合也更嚴(yán)重,而PH更加簡(jiǎn)潔。

【總結(jié)】

  • 如果不打算手寫SQL,兩者差異不大;
  • 如果需要兼容原生MyBatis的XML,或者將來(lái)可能換成其他MyBatis擴(kuò)展(比如通用Mapper),強(qiáng)烈安利PH!

BTW. 即使是非原生SQL的場(chǎng)景,PH也有優(yōu)勢(shì),比如對(duì)于多余的排序參數(shù)的處理。所以我的建議是:PageHelper+MP BaseMapper核心方法(除了分頁(yè))。


2022年1月27日編輯
自從體驗(yàn)了MyBatis Plus Generator(3.5.1版本)以后,我對(duì)代碼生成器有了很大的改觀,可以參考若依的BaseController.startPage()更加優(yōu)雅的實(shí)現(xiàn)分頁(yè),至于如何擴(kuò)展自己的模板生成DTO等,請(qǐng)移步后面的文章。

--- THE END ---

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容