问题:在springboot 与mybatis-plus整合分页查询报错如下:
原controller实现如下:用的lambdaQueryWrapper 对id进行排序
@GetMapping("/types")
public String types(@RequestParam(value = "page",defaultValue = "0") int page,
@RequestParam(value = "pageSize",defaultValue = "5") int pageSize,
@RequestParam(value = "orderName",defaultValue = "id") String orderString,
Model model){
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper();
lambdaQueryWrapper.orderByDesc(orderString);
IPage<Type> iPage = typeService.page(new Page<Type>(page,pageSize),lambdaQueryWrapper);
model.addAttribute("pageModel",pages);
return "admin/type";
}
然后拦截日志报:
Error evaluating expression 'ew.sqlSegment != null and ew.sqlSegment != '''.
Cause: org.apache.ibatis.ognl.OgnlException: sqlSegment [java.lang.ClassCastException: class java.lang.String cannot be cast to class com.baomidou.mybatisplus.core.toolkit.support.SFunction
(java.lang.String is in module java.base of loader 'bootstrap'; com.baomidou.mybatisplus.core.toolkit.support.SFunction is in unnamed module of loader 'app')]
解决方法
把lambdaQueryWrapper.orderByDesc(orderString)这个排序条件 改为 page实现:pages.addOrder(OrderItem.desc(orderString));
@GetMapping("/types")
public String types(@RequestParam(value = "page",defaultValue = "0") int page,
@RequestParam(value = "pageSize",defaultValue = "5") int pageSize,
@RequestParam(value = "orderName",defaultValue = "id") String orderString,
Model model){
Page<Type> pages = new Page(page,pageSize);
pages.addOrder(OrderItem.desc(orderString));
// LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper();
// lambdaQueryWrapper.orderByDesc(orderString);
typeService.page(pages);
model.addAttribute("pageModel",pages);
return "admin/type";
}
上面分页有问题,以下为正确的分页
mapper层
@Mapper
public interface TypeMapper extends BaseMapper<Type> {
}
service && impl
@Mapper
public interface TypeMapper extends BaseMapper<Type> {
}
@Service
public class TypeServiceImpl extends ServiceImpl<TypeMapper,Type> implements TypeService {
}
service层
@GetMapping("/types")
public String types(@RequestParam(value = "page",defaultValue = "0") int page,
@RequestParam(value = "pageSize",defaultValue = "5") int pageSize,
@RequestParam(value = "orderName",defaultValue = "id") String orderString,
Model model){
Page<Type> pages = new Page<>(page,pageSize);
typeService.page(pages,new LambdaQueryWrapper<Type>().orderByDesc(Type::getId));
model.addAttribute("pageModel",pages);
log.info("type 传到页面的pages: {}", pages.getRecords());
return "admin/type";
}
view层
<div class="item" th:each="i :${#numbers.sequence(1,pageModel.getPages())}" style="display: inline">
<a th:text="${i}" th:class="${pageModel.getCurrent() == i}? 'page-item active' :' page-item' "></a>
</div>