PageHelper 还是 MyBatis Plus 自带分页插件?
在座CRUD boy肯定对各种分页方式熟稔于心,那么,有没有思考过为什么用它?有什么优缺点?性能如何?
就拿MyBatis Plus(以下简称MP)自带的PaginationInnerInterceptor(真特么长,以下简称PII)和PageHelper(以下简称PH)来比较,你更中意那种?
public interface UserMapper extends BaseMapper<User> {
List<User> selectNative(UserQuery query);
}
咦~貌似和原始MyBatis没有任何区别!
然后,PII是这样子写的(分页参数必须放第一个,第二个参数必须带@Param注解):
public interface UserMapper extends BaseMapper<User> {
IPage<User> selectNative(IPage<User> page, @Param("query") UserQuery query);
}
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 >= #{regStart} and create_time <= #{regEnd}
</select>
</mapper>
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 >= #{query.regStart} and create_time <= #{query.regEnd}
</select>
</mapper>
多包了一层query,条件一多,是不是就有点碍眼了?
无疑PII更接近于JPA的写法,但是耦合也更严重,而PH更加简洁。
【总结】
如果不打算手写SQL,两者差异不大;
如果需要兼容原生MyBatis的XML,或者将来可能换成其他MyBatis扩展(比如通用Mapper),强烈安利PH!
BTW. 即使是非原生SQL的场景,PH也有优势,比如对于多余的排序参数的处理。所以我的建议是:PageHelper+MP BaseMapper核心方法(除了分页),不要使用IService和代码生成器。
作者:iakuil
链接:https://www.jianshu.com/p/b1a37d7e720c
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)