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

cn.org.atool.fluent.mybatis.segment.GroupByBase Maven / Gradle / Ivy

package cn.org.atool.fluent.mybatis.segment;

import cn.org.atool.fluent.mybatis.base.crud.IBaseQuery;
import cn.org.atool.fluent.mybatis.base.model.Column;
import cn.org.atool.fluent.mybatis.base.model.FieldMapping;
import cn.org.atool.fluent.mybatis.segment.model.ISqlSegment;

import java.util.ArrayList;
import java.util.List;

import static cn.org.atool.fluent.mybatis.If.notBlank;
import static cn.org.atool.fluent.mybatis.segment.model.KeyWordSegment.GROUP_BY;

/**
 * BaseGroupBy
 *
 * @author darui.wu 2020/6/21 8:09 下午
 */
@SuppressWarnings({"unchecked"})
public abstract class GroupByBase<
    G extends GroupByBase,
    Q extends IBaseQuery
    >
    extends BaseSegment {

    /**
     * 排序字段
     */
    private final List apply = new ArrayList<>();

    protected GroupByBase(Q query) {
        super(query);
    }

    /**
     * 添加group by字段列表
     *
     * @param columns 字段列表
     * @return groupBy选择器
     */
    public G apply(String... columns) {
        for (String column : columns) {
            if (notBlank(column)) {
                Column _column = Column.column(column, this.wrapper);
                apply.add(_column::wrapColumn);
            }
        }
        return (G) this;
    }

    /**
     * 添加group by字段列表
     *
     * @param condition 成立条件
     * @param columns   字段列表
     * @return groupBy选择器
     */
    public G apply(boolean condition, String... columns) {
        return condition ? this.apply(columns) : (G) this;
    }

    /**
     * 添加group by字段列表
     *
     * @param columns 字段列表
     * @return groupBy选择器
     */
    public G apply(FieldMapping... columns) {
        for (FieldMapping column : columns) {
            if (column != null) {
                Column _column = Column.column(column, this.wrapper);
                apply.add(_column::wrapColumn);
            }
        }
        return (G) this;
    }

    /**
     * 添加group by字段列表
     *
     * @param condition 成立条件
     * @param columns   字段列表
     * @return groupBy选择器
     */
    public G apply(boolean condition, FieldMapping... columns) {
        return condition ? this.apply(columns) : (G) this;
    }

    @Override
    protected G apply() {
        this.apply(this.current);
        return (G) this;
    }

    @Override
    public Q end() {
        for (ISqlSegment segment : this.apply) {
            this.wrapper.getWrapperData().apply(GROUP_BY, segment);
        }
        return super.end();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy