PageHelper 记录

在项目中使用PageHelper组件时,发现即使没有指定PageHelper.orderBy(),SQL查询语句也会自动添加order by id,导致'Column 'id' in order clause is ambiguous'的错误。分析原因是实体类QueryBean中orderBy字段有默认初始化值,PageHelper在执行查询时会调用SqlUtil的相关方法,自动处理orderBy,从而添加到SQL中。解决办法是避免在实体类中使用默认初始化的orderBy字段或在使用PageHelper时显式设置order by。
摘要由CSDN通过智能技术生成

自动添加order by 问题

项目中引入 了PageHelper 组件, 然后 查询的时候,明明没有指定 PageHelper.orderBy();但是在执行sql的时候,sql的结尾却莫名其妙多了 order by id

例子

//  mapper
 Integer searchCount(QueryBean querybean);
<select id = "searchCount">

 select * from s left join b on b.id = s.p_id where s = #{temp}
 </select>

然后代码执行之后;报错 提示

*order by id asc ~~~~~
Column ‘id’ in order clause is ambiguous
*

明明 没有使用PageHelper.orderBy 功能,也没有自己手写添加order by ,但是依旧在后面添加了order by id , 找了很久 ,自己的分析原因如下

首先看实体类 QueryBean 信息

public class QueryBean  {
   
    private int page =1;
    private int limit = 20;
    private String orderField = "id";
    private String orderDirection = "asc";
    // 注意此处有 orderBy 字段,且有默认的初始值
    private String orderBy = "id asc";
}

注意上面的实体类中包含了 orderBy 字段,且有默认的初始化值;

@Intercepts(@Signature(type = Executor.class, method = "query", args = {
   MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}))
public class PageHelper implements Interceptor {
   
	 /**
     * Mybatis拦截器方法;当执行查询的时候,此方法会执行
     *
     * @param invocation 拦截器入参
     * @return 返回执行结果
     * @throws Throwable 抛出异常
     */
    public Object intercept(Invocation invocation) throws Throwable {
   
        if (autoRuntimeDialect) {
   
            SqlUtil sqlUtil = getSqlUtil(invocation);
            return sqlUtil.processPage(invocation)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值