¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.springblade.core.mp.resolver; |
| | | |
| | | import com.baomidou.mybatisplus.core.metadata.OrderItem; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import org.springblade.core.tool.utils.ObjectUtil; |
| | | import org.springblade.core.tool.utils.StringPool; |
| | | import org.springblade.core.tool.utils.StringUtil; |
| | | import org.springframework.core.MethodParameter; |
| | | import org.springframework.lang.NonNull; |
| | | import org.springframework.web.bind.support.WebDataBinderFactory; |
| | | import org.springframework.web.context.request.NativeWebRequest; |
| | | import org.springframework.web.method.support.HandlerMethodArgumentResolver; |
| | | import org.springframework.web.method.support.ModelAndViewContainer; |
| | | |
| | | /** |
| | | * è§£å³ Mybatis Plus page SQL注å
¥é®é¢ |
| | | * |
| | | * @author L.cm |
| | | */ |
| | | public class PageArgumentResolver implements HandlerMethodArgumentResolver { |
| | | private static final String ORDER_ASC = "asc"; |
| | | |
| | | @Override |
| | | public boolean supportsParameter(MethodParameter parameter) { |
| | | return Page.class.equals(parameter.getParameterType()); |
| | | } |
| | | |
| | | /** |
| | | * page åæ°è§£æ |
| | | * |
| | | * @param parameter MethodParameter |
| | | * @param mavContainer ModelAndViewContainer |
| | | * @param request NativeWebRequest |
| | | * @param binderFactory WebDataBinderFactory |
| | | * @return æ£æ¥åæ°çpage对象 |
| | | */ |
| | | @Override |
| | | public Object resolveArgument(@NonNull MethodParameter parameter, ModelAndViewContainer mavContainer, |
| | | NativeWebRequest request, WebDataBinderFactory binderFactory) { |
| | | // å页忰 page: 0, size: 10, sort=id%2Cdesc |
| | | String pageParam = request.getParameter("page"); |
| | | String sizeParam = request.getParameter("size"); |
| | | String[] sortParam = request.getParameterValues("sort"); |
| | | Page<?> page = new Page<>(); |
| | | if (StringUtil.isNotBlank(pageParam)) { |
| | | page.setCurrent(Long.parseLong(pageParam)); |
| | | } |
| | | if (StringUtil.isNotBlank(sizeParam)) { |
| | | page.setSize(Long.parseLong(sizeParam)); |
| | | } |
| | | if (ObjectUtil.isEmpty(sortParam)) { |
| | | return page; |
| | | } |
| | | for (String param : sortParam) { |
| | | if (StringUtil.isBlank(param)) { |
| | | continue; |
| | | } |
| | | String[] split = param.split(StringPool.COMMA); |
| | | // æ¸
çå符串 |
| | | OrderItem orderItem = new OrderItem(); |
| | | orderItem.setColumn(StringUtil.cleanIdentifier(split[0])); |
| | | orderItem.setAsc(isOrderAsc(split)); |
| | | page.addOrder(orderItem); |
| | | } |
| | | return page; |
| | | } |
| | | |
| | | private static boolean isOrderAsc(String[] split) { |
| | | // é»è®¤ desc |
| | | if (split.length < 2) { |
| | | return false; |
| | | } |
| | | return ORDER_ASC.equalsIgnoreCase(split[1]); |
| | | } |
| | | } |