mybatisplus+pagehelper 自定义分页,解决limit参数在最后的问题
mybatisplus自定义分页网上的教程有个问题,就是limit分页的两个参数永远在最后。
·
网上的教程有个问题,就是limit分页的两个参数永远在最后。
最终代码
/**
* @author zongjy
* @date 2022/10/19 17:39
**/
@Component
public class MySqlDialectCustom extends MySqlDialect {
final String limit = "/*limit*/";
@Override
public Object processPageParameter(MappedStatement ms, Map<String, Object> paramMap, Page page, BoundSql boundSql, CacheKey pageKey) {
paramMap.put(PAGEPARAMETER_FIRST, page.getStartRow());
paramMap.put(PAGEPARAMETER_SECOND, page.getPageSize());
//处理pageKey
pageKey.update(page.getStartRow());
pageKey.update(page.getPageSize());
//处理参数配置
if (boundSql.getParameterMappings() != null) {
List<ParameterMapping> newParameterMappings = new ArrayList<ParameterMapping>(boundSql.getParameterMappings());
if (boundSql.getSql().contains(limit)) {
//自定义分页 不注入分页变量
} else if (page.getStartRow() == 0) {
newParameterMappings.add(new ParameterMapping.Builder(ms.getConfiguration(), PAGEPARAMETER_SECOND, int.class).build());
} else {
newParameterMappings.add(new ParameterMapping.Builder(ms.getConfiguration(), PAGEPARAMETER_FIRST, long.class).build());
newParameterMappings.add(new ParameterMapping.Builder(ms.getConfiguration(), PAGEPARAMETER_SECOND, int.class).build());
}
MetaObject metaObject = MetaObjectUtil.forObject(boundSql);
metaObject.setValue("parameterMappings", newParameterMappings);
}
return paramMap;
}
@Override
public String getPageSql(String sql, Page page, CacheKey pageKey) {
//System.out.println("走自定义分页");
if (sql.contains(limit)) {
if (page.getStartRow() == 0) {
sql = sql.replace(limit, " LIMIT "+page.getStartRow());
} else {
sql = sql.replace(limit, " LIMIT "+page.getStartRow()+","+page.getPageSize());
}
return sql;
}
return super.getPageSql(sql, page, pageKey);
}
}
同时配置类增加如下内容,注意helperDialect不可写成helper-dialect,否则无效
pagehelper:
helperDialect: cc.xx.configs.MySqlDialectCustom
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)