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);
}
}