Mybatis-plus使用Page时报错:“OFFSET”附近有语法错误

Mybatis-plus使用分页工具Page时报错:“OFFSET”附近有语法错误

最近在开发中遇到一个问题,在使用mybatis-plus的分页工具Page进行分页查找时报错。

代码实现

maven依赖:

	<!-- mybatis-plus -->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>${mybatis-plus.version}</version>
		</dependency>

service层:

	@Override
    public Page getList(Integer pageNo, Integer pageSize, String userName) {
        Page page = new Page(pageNo, pageSize);
        // 设置OrderItem, order by create_time desc
        List<OrderItem> orderItems = new ArrayList<>();
        orderItems.add(OrderItem.desc("create_time"));
        page.addOrder(orderItems);
        Page result = userMapper.getList(page, userName);
        return result;
    }

mapper层

@Mapper
public interface UserMapper {
    //按条件查询分页数据
    Page getList(Page page, String userName);
}

xml文件:

	<select id="getList" resultType="com.demo.modules.task.entity.user">
		SELECT
		[id], [user_name], [user_fullname]
		FROM user
        WHERE user_name = #{userName}
	</select>

报错

com.microsoft.sqlserver.jdbc.SQLServerException:OFFSET”附近有语法错误。

解决过程

定位原因

找到报错时执行的sql语句:

SELECT
		[id], [user_name], [user_fullname]
		FROM user
        WHERE user_name = ? OFFSET ? ROWS FETCH NEXT ? ROWS ONLY

说明是OFFSET前面缺少了order by create_time desc

打断点在执行前看page对象,orderItem已经确认添加上去了

然后找到控制台报错前的一句WARN

WARN    at com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor.concatOrderBy(PaginationInterceptor.java:142)- failed to concat orderBy from IPage, exception=null

进入com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor.java,在concatOrderBy打上断点
在执行该句代码时异常:

Select selectStatement = (Select)CCJSqlParserUtil.parse(originalSql);

在控制台debug监视CCJSqlParserUtil.parse(originalSql),直接抛出异常,是sql语句的问题

解决方式

去掉sql中的中括号
xml文件:

	<select id="getList" resultType="com.demo.modules.task.entity.user">
		SELECT
		id, user_name, user_fullname
		FROM user
        WHERE user_name = #{userName}
	</select>

去掉后成功运行,CCJSqlParserUtil.parse(originalSql)不报错。

  • 1
    点赞
  • 2
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值