Mybatis使用IPAGE排序错误

一、错误信息

//分页排序
page.setOrders(OrderItem.descs("publish_time"));

报错信息
failed to concat orderBy from IPage, exception=null

这里”failed to concat orderBy from IPage, exception=null“只是提示你错误了,但是没有提及是哪里出现问题

二、检查错误原因

@Test
public void testSqlParser() throws Exception{
        String sql = "";
        CCJSqlParserUtil.parse(sql);
}

通过CCJSqlParserUtil.parse可以抛出SQL的问题所在,一般为关键字冲突、函数使用不匹配导致

三、例子

我这里的SQL为

sql: select a,b,IF(c=1 or d=2,0,1) as f from table;

这里是会提示SQL的IF关键字出现问题,但是这个SQL是可以执行成功,Ipage的排序解析认为这个SQL是错误的

而只有一个IF条件时,解析是正确的,所以这里抛出问题不一定是你的SQL问题,而是这个分页排序的问题

sql: select a,b,IF(c=1,0,1) as f from table;

现在就是两种解决办法:

  1. 放弃Ipage的排序功能,将排序语句写在SQL中
  2. 修改IF,在判断中只保留一个条件
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将MyBatis Plus的`IPage<实体>`对象转换为`IPage<DTO>`对象,并且使用Java 8的`::`符号,可以按照以下步骤进行操作: 1. 首先,在定义DTO类时,确保DTO类的构造函数与实体类对应的构造函数参数一致。假设实体类为`User`,DTO类为`UserDTO`,它们具有相同的字段。 ```java public class UserDTO { private Long id; private String name; public UserDTO(Long id, String name) { this.id = id; this.name = name; } // 省略getter和setter方法 } ``` 2. 在查询方法中,使用MyBatis Plus的`IPage<实体>`作为返回类型,并将查询结果转换为`IPage<DTO>`。 ```java import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { @Autowired private UserMapper userMapper; public IPage<UserDTO> getUsers() { IPage<User> entityPage = new Page<>(1, 10); // 创建实体类的分页对象 IPage<User> userPage = userMapper.selectPage(entityPage, null); // 执行实体类的分页查询 return userPage.convert(UserDTO::new); // 将实体类的分页对象转换为DTO类的分页对象 } } ``` 在上述示例中,我们使用`Page`类创建了一个实体类的分页对象`entityPage`,然后通过`selectPage`方法执行实体类的分页查询,返回的结果是`IPage<实体>`类型的对象`userPage`。最后,使用`convert`方法将`userPage`对象转换为`IPage<DTO>`对象,这里使用了Java 8的`::`符号来引用DTO类的构造函数。 通过以上步骤,你可以将MyBatis Plus的`IPage<实体>`对象转换为`IPage<DTO>`对象,并使用`::`符号来简化转换过程。请确保实体类和DTO类的字段一一对应,以确保转换的正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值