带条件查询工具类Query

package com.rzy.api.db;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Query
{
	private static Query query = null;
	private String table = null;
	private String baseSQL = null;
	private Map<String, String> condMap = new HashMap<String, String>();

	private Query(String tableName)
	{
		this.table = tableName.toUpperCase();
		baseSQL = String.format("SELECT * FROM %s T", this.table);
	}

	/**
	 * 根据表名创建Query单例对象
	 * 
	 * @return Query单例对象
	 */
	public static Query Create(String tableName)
	{
		query = new Query(tableName);
		return query;
	}

	/**
	 * 根据条件MAP得到条件SQL语句
	 * 
	 * @return
	 */
	private StringBuffer getWHERE()
	{
		StringBuffer where = new StringBuffer();
		for (Map.Entry<String, String> entry : this.condMap.entrySet())
		{
			String field = entry.getKey();
			String[] arr = entry.getValue().split("\\|");
			if ("=".equals(arr[0]))
			{
				if (where.length() != 0)
				{
					where.append(" AND ");
				}
				where.append(field).append(arr[0]).append("\'").append(arr[1])
						.append("\'");
			}
			else if ("LIKE".equalsIgnoreCase(arr[0]))
			{
				if (where.length() != 0)
				{
					where.append(" AND ");
				}
				where.append(field).append(" LIKE \'%").append(arr[1]).append(
						"%\'");
			}
			else if ("BETWEEN".equalsIgnoreCase(arr[0]))
			{
				if (where.length() != 0)
				{
					where.append(" AND ");
				}
				where.append("(").append(field).append(" BETWEEN \'").append(
						arr[1]).append("\' AND \'").append(arr[2])
						.append("\')");
			}
			else if ("IN".equalsIgnoreCase(arr[0]))
			{
				if (where.length() != 0)
				{
					where.append(" AND ");
				}
				where.append(field).append(" IN(").append(arr[1]).append(")");
			}
			else if ("ORDER".equalsIgnoreCase(arr[0]))
			{
				if (where.length() != 0)
				{
					where.append(" ORDER BY ");
				}
				else
				{
					where.append("ORDER BY ");
				}
				where.append(field).append(" ").append(arr[1]);
			}
			else
			{
				if (where.length() != 0)
				{
					where.append(" AND ");
				}
				where.append(field).append(arr[0]).append(arr[1]);
			}
		}
		boolean isOnlyOrder = where.toString().startsWith("ORDER BY");
		if (!isOnlyOrder)
		{
			where.insert(0, "WHERE ");
		}
		return where;
	}

	/**
	 * 根据条件MAP得到SQL语句
	 * 
	 * @return SQL语句
	 */
	private String SQL()
	{
		StringBuffer ret = new StringBuffer(baseSQL);
		if (this.condMap != null && this.condMap.size() != 0)
		{
			ret.append(" ").append(getWHERE());
		}
		return ret.toString();
	}

	/**
	 * 查询
	 * 
	 * @return 数据集合List<Map<k,v>> 其中k:字段名小写,v:字段值
	 * @throws SQLException
	 */
	public List<Map<String, Object>> list()
			throws SQLException
	{
		String sql = SQL().toString();
		List<Map<String, Object>> list = DBHelper.query(sql);
		return list;
	}

	/**
	 * 分页查询
	 *
	 * @param start
	 *            开始记录数
	 * @param limit
	 *            查询条数
	 * @return 数据集合List<Map<k,v>> 其中k:字段名小写,v:字段值
	 * @throws SQLException
	 */
	public List<Map<String, Object>> list(int start, int limit) throws SQLException
	{
		StringBuffer ret = new StringBuffer("SELECT * FROM(");
		ret.append(SQL().replace("*", "ROWNUM AS RM ,T.*")).append(
				") WHERE RM BETWEEN ").append(start + 1).append(" AND ")
				.append(start + limit);
		List<Map<String, Object>> list = DBHelper.query(ret.toString());
		return list;
	}

	/**
	 * 得到总记录数
	 * 
	 * 
	 * @return 总记录数
	 */
	public int count() throws SQLException
	{
		String sql = SQL().replace("*", "COUNT(*)");
		return Integer.parseInt(DBHelper.scalar(sql).toString());
	}

	/**
	 * 添加条件
	 * 
	 * @param field 字段 如:"name"
	 * @param opVal 操作符和值 如:"like|aaa","=|001","between|20|70","order|desc"
	 * @return Query 
	 */
	public Query add(String field,String opVal)
	{
		this.condMap.put(field,opVal);
		return this;
	}

}

 

你可能感兴趣的:(sql)