Java多条件クエリ文組合せツールクラス


package util;

import java.sql.Date;

public class Expression {

	StringBuffer exp = new StringBuffer();
	int count = 0;
	boolean leftbra = false; //        
	boolean orderflag = false; //       
	boolean between = false;//   between and between     

	/**
	 *          ,          
	 * 
	 * @param value
	 *              
	 * @param valueClz
	 *              
	 */
	public void appendValue(Object value, Class valueClz) {

		Object paraValue = "";
		/*
		 * try { paraValue = new String(value.getBytes("iso-8859-1"),"utf-8"); }
		 * catch (UnsupportedEncodingException e) { // TODO Auto-generated catch
		 * block paraValue = value; e.printStackTrace(); }
		 */
		paraValue = value;
		if (valueClz == Integer.class) {
			exp.append(paraValue + " ");
		} else if (valueClz == Long.class) {
			exp.append(paraValue + " ");
		} else if (valueClz == String.class) {
			exp.append("'" + paraValue + "' ");
		} else if (valueClz == Date.class) {
			exp.append("'" + paraValue + "' ");
		} else if (valueClz == Double.class) {
			exp.append(paraValue + " ");
		} else if (valueClz == Float.class) {
			exp.append(paraValue + " ");
		} else if (valueClz == Boolean.class) {
			exp.append(paraValue + " ");
		}
	}

	/**
	 *         (and)          where paraName like %paraValue%   and paraName
	 * like %paraValue%
	 * 
	 * @param paraName
	 *                     (   )
	 * @param paraValue
	 *                (   )
	 * @param valueClz
	 *                
	 */
	public void andLike(String paraName, String paraValue, Class valueClz) {
		if (count <= 0) {
			exp.append(" where ");
			exp.append(paraName + " like ");
			appendValue("%" + paraValue + "%", valueClz);
		} else {
			exp.append(" and ");
			exp.append(paraName + " like ");
			appendValue("%" + paraValue + "%", valueClz);
		}
		count++;
	}

	/**
	 *     between and between  ,           andAnd  ; : where checktime between
	 * '2018-05-03'   and checktime between '2018-05-03'      :where checktime
	 * between '2018-05-03' and '2018-05-03'
	 * 
	 * @param paraName
	 *                     (   )
	 * @param paraValue
	 *                (   )
	 * @param valueClz
	 *                
	 */
	public void andBetween(String paraName, String paraValue, Class valueClz) {
		if (count <= 0) {
			exp.append(" where ");
			exp.append(paraName + " between ");
			appendValue(paraValue, valueClz);
		} else {
			exp.append(" and ");
			exp.append(paraName + " between ");
			appendValue(paraValue, valueClz);
		}
		count++;
		between = true;
	}

	/**
	 *     between and and  ,            andBetween  ; : and '2018-05-03'
	 *      :where checktime between '2018-05-03' and '2018-05-03'
	 * 
	 * @param paraValue
	 *                (   )
	 * @param valueClz
	 *                
	 */
	public void andAnd(String paraValue, Class valueClz) {
		if (between) {
			exp.append(" and ");
			appendValue(paraValue, valueClz);
			count++;
		}
	}

	/**
	 *         (and)         , "where (paraName like %paraValue%"   and
	 * "(paraName like %paraValue%"           andRightBraLike()    
	 * 
	 * @param paraName
	 *                     (   )
	 * @param paraValue
	 *                (   )
	 * @param valueClz
	 *                
	 */
	public void andLeftBraLike(String paraName, String paraValue, Class valueClz) {
		if (leftbra == false) {
			if (count <= 0) {
				exp.append(" where ");
				exp.append("( " + paraName + " like ");
				appendValue("%" + paraValue + "%", valueClz);
			} else {
				exp.append(" and ");
				exp.append("( " + paraName + " like ");
				appendValue("%" + paraValue + "%", valueClz);
			}
			count++;
			leftbra = true;
		} else {
			if (count <= 0) {
				exp.append(" where ");
				exp.append(paraName + " like ");
				appendValue("%" + paraValue + "%", valueClz);
			} else {
				exp.append(" and ");
				exp.append(paraName + " like ");
				appendValue("%" + paraValue + "%", valueClz);
			}
			count++;
		}
	}

	/**
	 *         (and)         , "where paraName like %paraValue%"   and
	 * "paraName like %paraValue%)"            andLeftBraLike()    
	 * 
	 * @param paraName
	 *                     (   )
	 * @param paraValue
	 *                (   )
	 * @param valueClz
	 *                
	 */
	public void andRightBraLike(String paraName, String paraValue,
			Class valueClz) {
		if (leftbra == true) {
			if (count <= 0) {
				exp.append(" where ");
				exp.append(paraName + " like ");
				appendValue("%" + paraValue + "%", valueClz);
			} else {
				exp.append(" and ");
				exp.append(paraName + " like ");
				appendValue("%" + paraValue + "%", valueClz);
				exp.append(" )");
			}
			count++;
			leftbra = false;
		} else {
			if (count <= 0) {
				exp.append(" where ");
				exp.append(paraName + " like ");
				appendValue("%" + paraValue + "%", valueClz);
			} else {
				exp.append(" and ");
				exp.append(paraName + " like ");
				appendValue("%" + paraValue + "%", valueClz);
			}
			count++;
		}

	}

	/**
	 *         (and)          where paraName = paraValue   and paraName =
	 * paraValue
	 * 
	 * @param paraName
	 *                     (   )
	 * @param paraValue
	 *                (   )
	 * @param valueClz
	 *                
	 */
	public void andEqu(String paraName, Object paraValue, Class valueClz) {
		if (count <= 0) {
			exp.append(" where ");
			exp.append(paraName + " = ");
			appendValue(paraValue, valueClz);
		} else {
			exp.append(" and ");
			exp.append(paraName + " = ");
			appendValue(paraValue, valueClz);
		}
		count++;
	}

	/**
	 *         (and)          where paraName <> paraValue   and paraName <>
	 * paraValue
	 * 
	 * @param paraName
	 *                     (   )
	 * @param paraValue
	 *                (   )
	 * @param valueClz
	 *                
	 */
	public void andNotEqu(String paraName, Object paraValue, Class valueClz) {
		if (count <= 0) {
			exp.append(" where ");
			exp.append(paraName + " <> ");
			appendValue(paraValue, valueClz);
		} else {
			exp.append(" and ");
			exp.append(paraName + " <> ");
			appendValue(paraValue, valueClz);
		}
		count++;
	}

	/**
	 *           (or)         where paraName like paraValue   or paraName like
	 * paraValue
	 * 
	 * @param paraName
	 *                     (   )
	 * @param paraValue
	 *                (   )
	 * @param valueClz
	 *                
	 */
	public void orLike(String paraName, String paraValue, Class valueClz) {
		if (count <= 0) {
			exp.append(" where ");
			exp.append(paraName + " like ");
			appendValue("%" + paraValue + "%", valueClz);
		} else {
			exp.append(" or ");
			exp.append(paraName + " like ");
			appendValue("%" + paraValue + "%", valueClz);
		}
		count++;
	}

	/**
	 *         (or)          , "where (paraName like %paraValue%"   or
	 * "(paraName like %paraValue%"           andRightBraLike()    
	 * 
	 * @param paraName
	 *                     (   )
	 * @param paraValue
	 *                (   )
	 * @param valueClz
	 *                
	 */
	public void orLeftBraLike(String paraName, String paraValue, Class valueClz) {
		if (leftbra == false) {
			if (count <= 0) {
				exp.append(" where ");
				exp.append("( " + paraName + " like ");
				appendValue("%" + paraValue + "%", valueClz);
			} else {
				exp.append(" or ");
				exp.append("( " + paraName + " like ");
				appendValue("%" + paraValue + "%", valueClz);
			}
			count++;
			leftbra = true;
		} else {
			if (count <= 0) {
				exp.append(" where ");
				exp.append(paraName + " like ");
				appendValue("%" + paraValue + "%", valueClz);
			} else {
				exp.append(" or ");
				exp.append(paraName + " like ");
				appendValue("%" + paraValue + "%", valueClz);
			}
			count++;
		}
	}

	/**
	 *         (or)          , "where paraName like %paraValue%)"   or
	 * "paraName like %paraValue%)"            andLeftBraLike()    
	 * 
	 * @param paraName
	 *                     (   )
	 * @param paraValue
	 *                (   )
	 * @param valueClz
	 *                
	 */
	public void orRightBraLike(String paraName, String paraValue, Class valueClz) {
		if (leftbra == true) {
			if (count <= 0) {
				exp.append(" where ");
				exp.append(paraName + " like ");
				appendValue("%" + paraValue + "%", valueClz);
			} else {
				exp.append(" or ");
				exp.append(paraName + " like ");
				appendValue("%" + paraValue + "%", valueClz);
				exp.append(" )");
			}
			count++;
			leftbra = false;
		} else {
			if (count <= 0) {
				exp.append(" where ");
				exp.append(paraName + " like ");
				appendValue("%" + paraValue + "%", valueClz);
			} else {
				exp.append(" or ");
				exp.append(paraName + " like ");
				appendValue("%" + paraValue + "%", valueClz);
			}
			count++;
		}
	}

	/**
	 *         (or)          where paraName = paraValue   or paraName =
	 * paraValue
	 * 
	 * @param paraName
	 *                     (   )
	 * @param paraValue
	 *                (   )
	 * @param valueClz
	 *                
	 */
	public void orEqu(String paraName, Object paraValue, Class valueClz) {
		if (count <= 0) {
			exp.append(" where ");
			exp.append(paraName + " = ");
			appendValue(paraValue, valueClz);
		} else {
			exp.append(" or ");
			exp.append(paraName + " = ");
			appendValue(paraValue, valueClz);
		}
		count++;
	}

	/**
	 *         (or)          where paraName <> paraValue   or paraName <>
	 * paraValue
	 * 
	 * @param paraName
	 *                     (   )
	 * @param paraValue
	 *                (   )
	 * @param valueClz
	 *                
	 */
	public void orNotEqu(String paraName, Object paraValue, Class valueClz) {
		if (count <= 0) {
			exp.append(" where ");
			exp.append(paraName + " <> ");
			appendValue(paraValue, valueClz);
		} else {
			exp.append(" or ");
			exp.append(paraName + " <> ");
			appendValue(paraValue, valueClz);
		}
		count++;
	}

	/**
	 *              order by paraName asc   ,paraName asc(           )   :123456
	 *   
	 * 
	 * @param paraName
	 *                       
	 */
	public void orderByAsc(String paraName) {
		if (orderflag == false) { //           
			exp.append(" order by ");
			exp.append(paraName + " asc ");
			orderflag = true; //
		} else {
			exp.append(", ");
			exp.append(paraName + " asc ");
		}

	}

	/**
	 *               order by paraName desc   ,paraName desc(           )   :
	 * 654321   
	 * 
	 * @param paraName
	 *                       
	 */
	public void orderByDesc(String paraName) {
		if (orderflag == false) { //           
			exp.append(" order by ");
			exp.append(paraName + " desc ");
			orderflag = true; //
		} else {
			exp.append(", ");
			exp.append(paraName + " desc ");
		}
	}

	/**
	 *         (or)          , "where (paraName = paraValue"   or
	 * "(paraName = paraValue"           andRightBraLike()    
	 * 
	 * @param paraName
	 *                     (   )
	 * @param paraValue
	 *                (   )
	 * @param valueClz
	 *                
	 */
	public void orLeftBraAnd(String paraName, Object paraValue, Class valueClz) {
		if (leftbra == false) {
			if (count <= 0) {
				exp.append(" where ");
				exp.append("( " + paraName + " = ");
				appendValue(paraValue, valueClz);
			} else {
				exp.append(" or ");
				exp.append("( " + paraName + " = ");
				appendValue(paraValue, valueClz);
			}
			count++;
			leftbra = true;
		} else {
			if (count <= 0) {
				exp.append(" where ");
				exp.append(paraName + " = ");
				appendValue(paraValue, valueClz);
			} else {
				exp.append(" or ");
				exp.append(paraName + " = ");
				appendValue(paraValue, valueClz);
			}
			count++;
		}
	}

	/**
	 *         (or)          , "where paraName = paraValue)"   or
	 * "paraName = paraValue)"            andLeftBraLike()    
	 * 
	 * @param paraName
	 *                     (   )
	 * @param paraValue
	 *                (   )
	 * @param valueClz
	 *                
	 */
	public void orRightBraAnd(String paraName, Object paraValue, Class valueClz) {
		if (leftbra == true) {
			if (count <= 0) {
				exp.append(" where ");
				exp.append(paraName + " = ");
				appendValue(paraValue, valueClz);
			} else {
				exp.append(" or ");
				exp.append(paraName + " = ");
				appendValue(paraValue, valueClz);
				exp.append(" )");
			}
			count++;
			leftbra = false;
		} else {
			if (count <= 0) {
				exp.append(" where ");
				exp.append(paraName + " = ");
				appendValue(paraValue, valueClz);
			} else {
				exp.append(" or ");
				exp.append(paraName + " = ");
				appendValue(paraValue, valueClz);
			}
			count++;
		}
	}

	/**
	 *         (and)         , "where (paraName = paraValue"   and
	 * "(paraName = paraValue"           andRightBraLike()    
	 * 
	 * @param paraName
	 *                     (   )
	 * @param paraValue
	 *                (   )
	 * @param valueClz
	 *                
	 */
	public void andLeftBraAnd(String paraName, Object paraValue, Class valueClz) {
		if (leftbra == false) {
			if (count <= 0) {
				exp.append(" where ");
				exp.append("( " + paraName + " = ");
				appendValue(paraValue, valueClz);
			} else {
				exp.append(" and ");
				exp.append("( " + paraName + " = ");
				appendValue(paraValue, valueClz);
			}
			count++;
			leftbra = true;
		} else {
			if (count <= 0) {
				exp.append(" where ");
				exp.append(paraName + " = ");
				appendValue(paraValue, valueClz);
			} else {
				exp.append(" and ");
				exp.append(paraName + " = ");
				appendValue(paraValue, valueClz);
			}
			count++;
		}
	}

	/**
	 *         (and)         , "where paraName = paraValue"   and
	 * "paraName = paraValue)"            andLeftBraLike()    
	 * 
	 * @param paraName
	 *                     (   )
	 * @param paraValue
	 *                (   )
	 * @param valueClz
	 *                
	 */
	public void andRightBraAnd(String paraName, Object paraValue, Class valueClz) {
		if (leftbra == true) {
			if (count <= 0) {
				exp.append(" where ");
				exp.append(paraName + " = ");
				appendValue(paraValue, valueClz);
			} else {
				exp.append(" and ");
				exp.append(paraName + " = ");
				appendValue(paraValue, valueClz);
				exp.append(" )");
			}
			count++;
			leftbra = false;
		} else {
			if (count <= 0) {
				exp.append(" where ");
				exp.append(paraName + " = ");
				appendValue(paraValue, valueClz);
			} else {
				exp.append(" and ");
				exp.append(paraName + " = ");
				appendValue(paraValue, valueClz);
			}
			count++;
		}

	}

	/**
	 *               
	 */
	public String toString() {
		return exp.toString();
	}

	/**
	 *     
	 */
	public void clear() {
		count = 0;
		exp.delete(0, exp.length());
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Expression exp = new Expression();
		/*
		 * exp.andEqu("userid", "zhangjs", String.class);
		 * exp.andLeftBraLike("forumType", "   ", String.class);
		 * exp.orLeftBraLike("forumType", "  ", String.class);
		 * exp.orRightBraLike("forumType", "  ", String.class);
		 * exp.orEqu("count", 10, Integer.class);
		 * 
		 * exp.andBetween("checktime", "2018-05-03", String.class);
		 * exp.andAnd("2018-05-03", String.class);
		 * exp.orderByDesc("VForumTitle.id.createtime");
		 * System.out.println(exp.toString());
		 */
		// select * from T_User
		// where (userid = 'zhangjs' and pwd = '123456') or isdelete = false
		exp.andLeftBraAnd("userid", "zhangjs", String.class);
		exp.orRightBraAnd("pwd", "123456", String.class);
		exp.andLeftBraAnd("userid", "zhangjs", String.class);
		exp.orRightBraAnd("pwd", "123456", String.class);
		exp.orEqu("isdelete", "true", Boolean.class);
		exp.orderByAsc("createtime");
		System.out.println(exp.toString());
	}

}