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

org.voovan.db.recorder.Query Maven / Gradle / Ivy

package org.voovan.db.recorder;

import org.voovan.db.recorder.exception.RecorderException;

import java.util.*;

/**
 * 查询条件构造
 *
 * @author: helyho
 * DBase Framework.
 * WebSite: https://github.com/helyho/DBase
 * Licence: Apache v2 License
 */
public class Query {
    private List dataFields;
    private Map andFields;
    private Map orFields;
    private Map orderFields;
    private List customCondictions;
    private int pageNumber = -1;
    private int pageSize = -1;

    public Query() {
        dataFields = new ArrayList();
        andFields = new IdentityHashMap();
        orFields = new IdentityHashMap();
        orderFields = new IdentityHashMap();
        customCondictions = new ArrayList();
    }

    public boolean hasCondiction() {
        return !andFields.isEmpty() || !orFields.isEmpty() || !customCondictions.isEmpty();
    }

    public Query data(String ... fieldNameArr) {
        if(fieldNameArr != null) {
            for (String fieldName : fieldNameArr) {
                dataFields.add(fieldName);
            }
        }
        return this;
    }

    public Query and(String fieldName, Operate operator) {
        andFields.put(fieldName, operator);
        return this;
    }

    public Query or(String fieldName, Operate operator) {
        orFields.put(fieldName, operator);
        return this;
    }

    public Query and(String ... fieldNameArr) {
        if(fieldNameArr != null) {
            for (String fieldName : fieldNameArr) {
                andFields.put(fieldName, Operate.EQUAL);
            }
        }
        return this;
    }

    public Query or(String ... fieldNameArr) {
        if(fieldNameArr != null) {
            for (String fieldName : fieldNameArr) {
                orFields.put(fieldName, Operate.EQUAL);
            }
        }
        return this;
    }

    public Query custom(String ... customCondictionArr){
        if(customCondictionArr != null) {
            for (String customCondiction : customCondictionArr) {
                customCondictions.add(customCondiction);
            }
        }
        return this;
    }

    public Query order(String ... fieldNames) {
        orderFields.put(fieldNames, false);
        return this;
    }

    public Query order(Boolean isDesc, String ... fieldNames) {
        orderFields.put(fieldNames, isDesc);
        return this;
    }

    public Query page(int pageNumber, int pageSize){
        this.pageNumber = pageNumber;
        this.pageSize = pageSize;

        return this;
    }

    public int getPageNumber() {
        return pageNumber;
    }

    public void setPageNumber(int pageNumber) {
        this.pageNumber = pageNumber;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public List getDataFields() {
        return dataFields;
    }

    public Map getAndFields() {
        return andFields;
    }

    public Map getOrFields() {
        return orFields;
    }

    public List getCustomCondictions() {
        return customCondictions;
    }

    protected Map getOrderFields() {
        return orderFields;
    }

    public enum Operate{
        EQUAL, NOT_EQUAL, GREATER, LESS, GREATER_EQUAL, LESS_EQUAL, LIKE, IN, NOT_LIKE, NOT_IN
    }

    public static String getActualOperate(Operate operate) throws RecorderException {
        switch (operate){
            case EQUAL : return "=";
            case NOT_EQUAL : return "!=";
            case GREATER : return ">";
            case LESS : return "<";
            case GREATER_EQUAL : return ">=";
            case LESS_EQUAL : return "<=";
            case LIKE : return "like";
            case IN : return "in";
            case NOT_LIKE : return "not like";
            case NOT_IN : return "not in";
            default : throw new RecorderException("operate is unknow");
        }
    }

    public static Query newInstance(){
        return new Query();
    }

    @Override
    public int hashCode() {
        return Objects.hash(dataFields, andFields, orFields, orderFields, customCondictions, pageNumber, pageSize);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy