All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.pighand.framework.spring.base.BaseMapper Maven / Gradle / Ivy

The newest version!
package com.pighand.framework.spring.base;

import com.mybatisflex.core.field.FieldQueryBuilder;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.pighand.framework.spring.page.NextToken;
import com.pighand.framework.spring.page.PageOrList;
import com.pighand.framework.spring.page.PageType;
import com.pighand.framework.spring.util.VerifyUtils;

import java.util.List;
import java.util.function.Consumer;

/**
 * mapper 基础父类
 *
 * @author wangshuli
 */
public interface BaseMapper extends com.mybatisflex.core.BaseMapper {

    /**
     * select one support Field Query
     *
     * @param queryWrapper
     * @param asType
     * @param consumers
     * @param 
     * @return
     */
    default  R selectOneByQueryAs(QueryWrapper queryWrapper, Class asType,
        Consumer>... consumers) {
        if (queryWrapper == null) {
            queryWrapper = new QueryWrapper();
        }

        queryWrapper.limit(1);
        List result = this.selectListByQueryAs(queryWrapper, asType, consumers);
        return result.isEmpty() ? null : result.get(0);
    }

    /**
     * 分页查询
     *
     * @param pageInfo
     * @return
     * @see #page(BaseModel, QueryWrapper, Class, Consumer[])
     */
    default PageOrList page(BaseModel pageInfo) {
        return this.page(pageInfo, null, null);
    }

    /**
     * 分页查询
     *
     * @param pageInfo
     * @return
     * @see #page(BaseModel, QueryWrapper, Class, Consumer[])
     */
    default  PageOrList page(BaseModel pageInfo, Class asType) {

        return this.page(pageInfo, null, asType);
    }

    /**
     * 分页查询
     *
     * @param pageInfo
     * @param queryWrapper
     * @return
     * @see #page(BaseModel, QueryWrapper, Class, Consumer[])
     */
    default  PageOrList page(BaseModel pageInfo, QueryWrapper queryWrapper) {
        return this.page(pageInfo, queryWrapper, null);
    }

    /**
     * 分页查询
     * 

1. 如果没有设置pageType或AUTO,根据pageSize、nextToken判断pageType *

2. pageType判断分页类型,并初始化分页数据 *

3. 根据分页数据查询数据 * * @param pageInfo * @param queryWrapper * @param asType * @param consumers * @return */ default PageOrList page(BaseModel pageInfo, QueryWrapper queryWrapper, Class asType, Consumer>... consumers) { // init page params pageInfo.init(); List records; PageOrList pageOrList; if (queryWrapper == null) { queryWrapper = new QueryWrapper(); } PageType pageType = pageInfo.getPageType(); if (pageType.equals(PageType.LIST)) { // query by list if (asType != null) { records = this.selectListByQueryAs(queryWrapper, asType, (Consumer>[])consumers); } else { records = this.selectListByQuery(queryWrapper, (Consumer>[])consumers); } pageOrList = new PageOrList(records); } else if (pageType.equals(PageType.PAGE)) { // query by paginate Page page; if (asType != null) { page = this.paginateAs(pageInfo.toPage(), queryWrapper, asType, (Consumer>[])consumers); } else { page = this.paginate(pageInfo.toPage(), queryWrapper, (Consumer>[])consumers); } pageOrList = new PageOrList(page); } else if (pageType.equals(PageType.NEXT_TOKEN)) { // query by nextToken // decode nextToken if (VerifyUtils.isNotEmpty(pageInfo.getNextToken())) { NextToken nextToken = NextToken.decode(pageInfo.getNextToken()); if (nextToken.getOperation().equals("0")) { queryWrapper.ge(nextToken.getFullColumn(), nextToken.getValue()); } else { queryWrapper.le(nextToken.getFullColumn(), nextToken.getValue()); } } Long pageSize = pageInfo.getPageSize(); Long nextPageSize = pageSize + 1; // init page params by nextToken pageInfo.setPageSize(nextPageSize); Page page; if (asType != null) { page = this.paginateAs(pageInfo.toPage(), queryWrapper, asType, (Consumer>[])consumers); } else { page = this.paginate(pageInfo.toPage(), queryWrapper, (Consumer>[])consumers); } List pageRecords = page.getRecords(); // generate new nextToken String newNextToken = null; boolean hasMore = page.getRecords().size() >= pageInfo.getPageSize(); if (hasMore) { Object lastRecords = pageRecords.get(pageRecords.size() - 1); newNextToken = pageInfo.getNextTokenDecode().encode(lastRecords); pageRecords.remove(page.getRecords().size() - 1); } pageOrList = new PageOrList(pageRecords, newNextToken, pageSize); } else { throw new RuntimeException("分页类型错误"); } return pageOrList; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy