快盘下载:好资源、好软件、快快下载吧!

快盘排行|快盘最新

当前位置:首页软件教程电脑软件教程 → mybatis-plus通用业务分页查询封装

mybatis-plus通用业务分页查询封装

时间:2022-09-30 17:28:07人气:作者:快盘下载我要评论

mybatis的通用分页查询一般都是调用API

<P extends IPage<T>> P selectPage(P page, ;Param(;ew;) Wrapper<T> queryWrapper);

但这种操作对于编码结构而言;一般是放在数据层/业务层进行处理;一般的做法是;

封装Controller层实现Entity/Vo转换DTO封装Service层调用mybatis-plus层分页查询方法selectPage
对于每一种业务场景;都需要做此封装;从而带来许多重复冗余的代码

因此这里考虑设计一个通用的分页查询工具;从而替代繁琐的代码封装
本次demo用到的后端maven依赖组件如下

springbootmybatis-plusdruid;mysqlspringboot-web

代码目录核心类包括
mybatis-plus通用业务分页查询封装
分别职责为;
控制器层;提供外部http调用
业务层;封装通用的分页查询

public abstract class AbstractPageController<T,E> {

    ;Autowired
    PageService<E> pageService;
    private Class<T> dtoClass;

    public AbstractPageController() {
        ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass();
        Type[] actualTypeArguments = type.getActualTypeArguments();
        dtoClass = (Class<T>) actualTypeArguments[0];

    }

    ;PostMapping(;/pageQuery;)
    public IPage<T> pageQuery(;RequestBody Object param) {
        return PageUtils.copy(pageService.pageQuery(param), dtoClass);
    }

}

这里通过反射的方式;拿到外部配置的DTO类

;Service
public abstract class AbstractPageServiceImpl<T> implements PageService<T> {

    private final String PAGE_SIZE = ;pageSize;;

    private final String CURRENT_PAGE = ;currentPage;;

    ;Autowired
    private BaseMapper<T> mapper;

    public void beforePageQuery(Object param) {
    }

    public IPage<T> afterPageQuery(IPage<T> iPage) {
        return iPage;
    }

    public IPage<T> pageQuery(Object param) {
        try {
            beforePageQuery(param);
        } catch (Exception e) {
            e.printStackTrace();
        }
        IPage<T> iPage;
        Map<String, Object> convertParam = BeanUtils.bean2Map(param);
        if (CollectionUtils.isEmpty(convertParam)) {
            return new Page<>();
        }
        int pageSize = Optional.ofNullable(convertParam.get(PAGE_SIZE)).map(Object::toString).map(Integer::parseInt).orElse(0);
        int pageNum = Optional.ofNullable(convertParam.get(CURRENT_PAGE)).map(Object::toString).map(Integer::parseInt).orElse(0);
        if (pageNum == 0 || pageSize == 0) {
            return new Page<>();
        }
        QueryWrapper<T> wrapper = new QueryWrapper<>();
        Page<T> page = new Page<>(pageNum, pageSize);
        iPage = mapper.selectPage(page, wrapper);
        try {
            iPage = afterPageQuery(iPage);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return iPage;
    }

}

这里提供了通用的业务查询
同时在业务查询前后加入了前置;后置操作;用于其他特殊业务逻辑处理

那最终使用的方法是

Controller
;RestController
;RequestMapping(;/user;)
public class UserController extends AbstractPageController<UserDTO, User> {
}
Service
public interface IUserService extends PageService<User> {
}
;Service
public class IUserServiceImpl extends AbstractPageServiceImpl<User> implements IUserService {
}

最后通过postman调用一下测试

gitee仓库地址
https://gitee.com/twy12138/pagequery-helper/tree/main

网友评论

快盘下载暂未开通留言功能。

关于我们| 广告联络| 联系我们| 网站帮助| 免责声明| 软件发布

Copyright 2019-2029 【快快下载吧】 版权所有 快快下载吧 | 豫ICP备10006759号公安备案:41010502004165

声明: 快快下载吧上的所有软件和资料来源于互联网,仅供学习和研究使用,请测试后自行销毁,如有侵犯你版权的,请来信指出,本站将立即改正。