Java 多条件查询语句组合工具类

2 篇文章 0 订阅
1 篇文章 0 订阅
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());
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值