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

com.yuweix.kuafu.dao.mybatis.where.Criteria Maven / Gradle / Ivy

The newest version!
package com.yuweix.kuafu.dao.mybatis.where;


import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;


/**
 * @author yuwei
 */
public class Criteria implements Serializable {
	/**
	 *
	 */
	private static final long serialVersionUID = 1L;

	private StringBuilder sql;
	private Map params;
	private int pindex;

	private Criteria() {
		sql = new StringBuilder("");
		params = new HashMap();
		pindex = 0;
	}

	public static Criteria of(String key, Operator operator) {
		return of(key, operator, null);
	}
	public static Criteria of(String key, Operator operator, Object value) {
		Criteria criteria = new Criteria();
		String criterionSql = createCriterionSql(key, operator, value, criteria.params, criteria.hashCode(), ++criteria.pindex);
		criteria.sql.append(criterionSql);
		return criteria;
	}
	private static String createCriterionSql(String key, Operator operator, Object value, Map params
			, int hashCode, int pindex) throws IllegalArgumentException {
		if (key == null || "".equals(key.trim()) || operator == null) {
			throw new IllegalArgumentException("Invalid argument.");
		}

		String paramKey = "p" + hashCode +  "" + pindex;
		if (operator.getCode().equals(Operator.in.getCode()) || operator.getCode().equals(Operator.nin.getCode())) {
			if ((value == null) || !(value instanceof Collection)) {
				return "";
			} else {
				Collection col = (Collection) value;
				if (col.size() <= 0) {
					if (operator.getCode().equals(Operator.in.getCode())) {
						return " 1 = 0 ";
					} else {
						return " 1 = 1 ";
					}
				} else {
					params.put(paramKey, value);
					return key + " " + operator.getCode() + " #{item} ";
				}
			}
		} else if (value == null) {
			return key + " " + operator.getCode() + " ";
		} else {
			params.put(paramKey, value);
			return key + " " + operator.getCode() + " #{criteria.params." + paramKey + "} ";
		}
	}

	private Criteria add(Connector connector, String criterionSql) {
		if (criterionSql != null && !"".equals(criterionSql.trim())) {
			sql.append(" ")
				.append(connector.getCode())
				.append(" ")
				.append(criterionSql)
				.append(" ");
		}
		return this;
	}
	public Criteria and(String key, Operator operator) {
		return and(key, operator, null);
	}
	public Criteria and(String key, Operator operator, Object value) {
		String criterionSql = createCriterionSql(key, operator, value, this.params, this.hashCode(), ++this.pindex);
		return add(Connector.and, criterionSql);
	}
	public Criteria and(String sql) {
		return add(Connector.and, sql);
	}
	public Criteria or(String key, Operator operator) {
		return or(key, operator, null);
	}
	public Criteria or(String key, Operator operator, Object value) {
		String criterionSql = createCriterionSql(key, operator, value, this.params, this.hashCode(), ++this.pindex);
		return add(Connector.or, criterionSql);
	}
	public Criteria or(String sql) {
		return add(Connector.or, sql);
	}

	private Criteria add(Connector connector, Criteria criteria) {
		params.putAll(criteria.getParams());
		String criteriaSql = criteria.toSql();
		if (criteriaSql != null && !"".equals(criteriaSql.trim())) {
			sql.insert(0, "(")
				.append(") ")
				.append(connector.getCode())
				.append(" (")
				.append(criteriaSql)
				.append(") ");
		}
		return this;
	}
	public Criteria and(Criteria criteria) {
		return add(Connector.and, criteria);
	}
	public Criteria or(Criteria criteria) {
		return add(Connector.or, criteria);
	}

	public String toSql() {
		return sql.toString();
	}

	public Map getParams() {
		return params;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy