当前使用版本(必填,否则不予处理)
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对象就替换,获取不到就替换成空字符串, 最后嫌太丑陋,也就没用,自己重新加了个方法把分页当参数传进去了。