当前使用版本(必填,否则不予处理)

3.3.2

该问题是如何引起的?(确定最新版也有问题再提!!!)

以MySql数据库方言分页源码为例:

/**
 * MYSQL 数据库分页语句组装实现
 *
 * @author hubin
 * @since 2016-01-23
 */
public class MySqlDialect implements IDialect {

    @Override
    public DialectModel buildPaginationSql(String originalSql, long offset, long limit) {
        String sql = originalSql + " LIMIT " + FIRST_MARK + StringPool.COMMA + SECOND_MARK;
        return new DialectModel(sql, offset, limit).setConsumerChain();
    }
}

这里只是简单的拼接分页sql,无法应对复杂问题,可以定义一个占位符,比如:${SimplePlaceholder}

select u.user_id, u.username, u.phone, u.email,
           sj.job_id   as sj_job_id,
           sj.name     as sj_name,
           sj.enabled  as sj_enabled,
           sj.job_sort as sj_job_sort
    from (select * from sys_user ${SimplePlaceholder}) u  -- 这里
           left join sys_users_jobs suj on u.user_id = suj.user_id
           left join sys_job sj on suj.job_id = sj.job_id
      WHERE (username <> ?)

最终结果就会是这样的:

select u.user_id, u.username, u.phone, u.email,
           sj.job_id   as sj_job_id,
           sj.name     as sj_name,
           sj.enabled  as sj_enabled,
           sj.job_sort as sj_job_sort
    from (select * from sys_user LIMIT ?, ?}) u  -- 这里
           left join sys_users_jobs suj on u.user_id = suj.user_id
           left join sys_job sj on suj.job_id = sj.job_id
      WHERE (username <> ?)

这样就可以解决多表联合查询分页的问题

重现步骤(如果有就写完整)

报错信息

Comment From: miemieYaho

这种你自己写分页吧

Comment From: the-Rings

自己写分页sql如何用上Page对象,这种例子,我没有找到

Comment From: miemieYaho

用不了,自己xml写分页,返回list

Comment From: the-Rings

多谢,辛苦了

Comment From: icesugar

我也是一样的需求,然后也是buildPaginationSql 那个地方改替换的,然后没从ctl调用的时候没page对象就不走SQL处理,就报SQL错误了。后面想要不加个mybatis拦截器,能获取page对象就替换,获取不到就替换成空字符串, 最后嫌太丑陋,也就没用,自己重新加了个方法把分页当参数传进去了。