公共查询类criteria

package cn.edu.hbcf.common.vo;

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import cn.edu.hbcf.common.utils.TypeCaseHelper;

/**
 * 公用条件查询类 也可以用于MVC层之间的参数传递
 * 
 * @author LiPenghui
 * 
 */ 
public class Criteria {

    /**
     * 存放条件查询值
     */
    private Map<String, Object> condition;
    /**
     * 是否相异 为什么是protected类型?
     */
    private boolean distinct;
    /**
     * 排序字段
     */
    private String orderByClause;

    private int start;
    private int limit;

    private Integer oracleStart;
    private Integer oracleEnd;

    public Integer getOracleStart() {

        return oracleStart;
    }

    public void setOracleStart(Integer oracleStart) {
        this.oracleStart = oracleStart;
    }

    public Integer getOracleEnd() {
        return oracleEnd;
    }

    public void setOracleEnd(Integer oracleEnd) {
        this.oracleEnd = oracleEnd;
    }

    public Map<String, Object> getCondition() {
        return condition;
    }

    public void setCondition(Map<String, Object> condition) {
        this.condition = condition;
    }

    public Criteria() {
        condition = new HashMap<String, Object>();
    }

    public void clear() {
        this.condition.clear();
        this.orderByClause = null;
        this.distinct = false;
        this.start = 0;
        this.limit = 0;
    }

    /**
     * 添加查询条件
     * 
     * @param conditionKey
     * 查询条件的名称
     * @param contidionValue
     * 查询条件的值
     * @return
     */
    public Criteria put(String key, Object value) {
        this.condition.put(key, value);
        return (Criteria) this;
    }

    /**
     * 得到键值,C层和S层的参数传递时取值所用 自行转换对象
     * 
     * @param contionKey
     * 条件键值
     * @return 返回指定键所映射的值
     */
    public Object get(String contionKey) {
        return this.condition.get(contionKey);
    }

    public Map<String, Object> getConditionMap() {
        return condition;
    }

    public void setConditionMap(Map<String, Object> conditionMap) {
        this.condition = conditionMap;
    }

    /**
     * 是否相异
     * 
     * @return
     */
    public boolean isDistinct() {
        return distinct;
    }

    public void setDistinct(boolean distinct) {
        this.distinct = distinct;
    }

    /**
     * 获取排序字段
     * 
     * @return
     */
    public String getOrderByClause() {
        return orderByClause;
    }

    /**
     * 设置排序字段
     * 
     * @param orderByClause
     */
    public void setOrderByClause(String orderByClause) {
        this.orderByClause = orderByClause;
    }

    /**
     * 以BigDecimal返回键值
     * 
     * @param key
     * 键名
     * @return Date 键值
     */
    public BigDecimal getAsBigDecimal(String key) {
        Object obj = TypeCaseHelper.convert(get(key), "BigDecimal", null);
        if (obj != null) {
            return (BigDecimal) obj;
        } else {
            return null;
        }
    }

    /**
     * 以Date类型返回键值
     * 
     * @param key
     * 键名
     * @return Date 键值
     */
    public Date getAsDate(String key) {
        Object obj = TypeCaseHelper.convert(get(key), "Date", "yyyy-MM-dd");
        if (obj == null) {
            return (Date) obj;
        } else {
            return null;
        }
    }

    /**
     * 以Integer类型返回键值
     * 
     * @param key
     * 键名
     * @return Integer 键值
     */
    public Integer getAsInteger(String key) {
        Object obj = TypeCaseHelper.convert(get(key), "Integer", null);
        if (obj != null) {
            return (Integer) obj;
        } else {
            return null;
        }
    }

    /**
     * 以Long类型返回键值
     * 
     * @param key
     * 键名
     * @return Long 键值
     */
    public Long getAsLong(String key) {
        Object obj = TypeCaseHelper.convert(get(key), "Long", null);
        if (obj != null) {
            return (Long) obj;
        } else {
            return null;
        }
    }

    /**
     * 以字符串类型返回键值
     * 
     * @param key
     * 键名
     * @return 键值
     */
    public String getAsString(String key) {
        Object obj = TypeCaseHelper.convert(get(key), "String", null);
        if (obj != null) {
            return (String) obj;
        } else {
            return null;
        }
    }

    /**
     * 以Timestamp类型返回键值
     * 
     * @param key
     * 键名
     * @return Timestamp键值
     */
    public Timestamp getAsTimestamp(String key) {
        Object obj = TypeCaseHelper.convert(get(key), "Timestamp", null);
        if (obj != null) {
            return (Timestamp) obj;
        } else {
            return null;
        }
    }

    /**
     * 以Boolean类型返回键值
     * 
     * @param key
     * 键名
     * @return Boolean 键值
     */
    public Boolean getAsBoolean(String key) {
        Object obj = TypeCaseHelper.convert(get(key), "Boolean", null);
        if (obj != null) {
            return (Boolean) obj;
        } else {
            return null;
        }
    }

    public int getStart() {
        return start;
    }

    public void setStart(int start) {
        this.start = start;
    }

    public int getLimit() {
        return limit;
    }

    public void setLimit(int limit) {
        this.limit = limit;
    }
}

 TypeCaseHelper.java

package cn.edu.hbcf.common.utils;

import java.math.BigDecimal;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;

/**
 * 类型转换辅助工具类<br>
 * 
 */
public class TypeCaseHelper {

    /**
     * 转换核心实现方法
     * 
     * @param obj
     * @param type
     * @param format
     * @return Object
     * @throws TypeCastException
     */
    public static Object convert(Object obj, String type, String format) throws TypeCastException {
        Locale locale = new Locale("zh", "CN", "");
        if (obj == null)
            return null;
        if (obj.getClass().getName().equals(type))
            return obj;
        if ("Object".equals(type) || "java.lang.Object".equals(type))
            return obj;
        String fromType = null;
        if (obj instanceof String) {
            fromType = "String";
            String str = (String) obj;
            if ("String".equals(type) || "java.lang.String".equals(type))
                return obj;
            if (str.length() == 0)
                return null;
            if ("Boolean".equals(type) || "java.lang.Boolean".equals(type)) {
                Boolean value = null;
                if (str.equalsIgnoreCase("TRUE"))
                    value = new Boolean(true);
                else
                    value = new Boolean(false);
                return value;
            }
            if ("Double".equals(type) || "java.lang.Double".equals(type))
                try {
                    Number tempNum = getNf(locale).parse(str);
                    return new Double(tempNum.doubleValue());
                } catch (ParseException e) {
                    throw new TypeCastException("Could not convert " + str + " to " + type + ": ", e);
                }
            if ("BigDecimal".equals(type) || "java.math.BigDecimal".equals(type))
                try {
                    BigDecimal retBig = new BigDecimal(str);
                    int iscale = str.indexOf(".");
                    int keylen = str.length();
                    if (iscale > -1) {
                        iscale = keylen - (iscale + 1);
                        return retBig.setScale(iscale, 5);
                    } else {
                        return retBig.setScale(0, 5);
                    }
                } catch (Exception e) {
                    throw new TypeCastException("Could not convert " + str + " to " + type + ": ", e);
                }
            if ("Float".equals(type) || "java.lang.Float".equals(type))
                try {
                    Number tempNum = getNf(locale).parse(str);
                    return new Float(tempNum.floatValue());
                } catch (ParseException e) {
                    throw new TypeCastException("Could not convert " + str + " to " + type + ": ", e);
                }
            if ("Long".equals(type) || "java.lang.Long".equals(type))
                try {
                    NumberFormat nf = getNf(locale);
                    nf.setMaximumFractionDigits(0);
                    Number tempNum = nf.parse(str);
                    return new Long(tempNum.longValue());
                } catch (ParseException e) {
                    throw new TypeCastException("Could not convert " + str + " to " + type + ": ", e);
                }
            if ("Integer".equals(type) || "java.lang.Integer".equals(type))
                try {
                    NumberFormat nf = getNf(locale);
                    nf.setMaximumFractionDigits(0);
                    Number tempNum = nf.parse(str);
                    return new Integer(tempNum.intValue());
                } catch (ParseException e) {
                    throw new TypeCastException("Could not convert " + str + " to " + type + ": ", e);
                }
            if ("Date".equals(type) || "java.sql.Date".equals(type)) {
                if (format == null || format.length() == 0)
                    try {
                        return Date.valueOf(str);
                    } catch (Exception e) {
                        try {
                            DateFormat df = null;
                            if (locale != null)
                                df = DateFormat.getDateInstance(3, locale);
                            else
                                df = DateFormat.getDateInstance(3);
                            java.util.Date fieldDate = df.parse(str);
                            return new Date(fieldDate.getTime());
                        } catch (ParseException e1) {
                            throw new TypeCastException("Could not convert " + str + " to " + type + ": ", e);
                        }
                    }
                try {
                    SimpleDateFormat sdf = new SimpleDateFormat(format);
                    java.util.Date fieldDate = sdf.parse(str);
                    return new Date(fieldDate.getTime());
                } catch (ParseException e) {
                    throw new TypeCastException("Could not convert " + str + " to " + type + ": ", e);
                }
            }
            if ("Timestamp".equals(type) || "java.sql.Timestamp".equals(type)) {
                if (str.length() == 10)
                    str = str + " 00:00:00";
                if (format == null || format.length() == 0)
                    try {
                        return Timestamp.valueOf(str);
                    } catch (Exception e) {
                        try {
                            DateFormat df = null;
                            if (locale != null)
                                df = DateFormat.getDateTimeInstance(3, 3, locale);
                            else
                                df = DateFormat.getDateTimeInstance(3, 3);
                            java.util.Date fieldDate = df.parse(str);
                            return new Timestamp(fieldDate.getTime());
                        } catch (ParseException e1) {
                            throw new TypeCastException("Could not convert " + str + " to " + type + ": ", e);
                        }
                    }
                try {
                    SimpleDateFormat sdf = new SimpleDateFormat(format);
                    java.util.Date fieldDate = sdf.parse(str);
                    return new Timestamp(fieldDate.getTime());
                } catch (ParseException e) {
                    throw new TypeCastException("Could not convert " + str + " to " + type + ": ", e);
                }
            } else {
                throw new TypeCastException("Conversion from " + fromType + " to " + type + " not currently supported");
            }
        }
        if (obj instanceof BigDecimal) {
            fromType = "BigDecimal";
            BigDecimal bigD = (BigDecimal) obj;
            if ("String".equals(type))
                return getNf(locale).format(bigD.doubleValue());
            if ("BigDecimal".equals(type) || "java.math.BigDecimal".equals(type))
                return obj;
            if ("Double".equals(type))
                return new Double(bigD.doubleValue());
            if ("Float".equals(type))
                return new Float(bigD.floatValue());
            if ("Long".equals(type))
                return new Long(Math.round(bigD.doubleValue()));
            if ("Integer".equals(type))
                return new Integer((int) Math.round(bigD.doubleValue()));
            else
                throw new TypeCastException("Conversion from " + fromType + " to " + type + " not currently supported");
        }
        if (obj instanceof Double) {
            fromType = "Double";
            Double dbl = (Double) obj;
            if ("String".equals(type) || "java.lang.String".equals(type))
                return getNf(locale).format(dbl.doubleValue());
            if ("Double".equals(type) || "java.lang.Double".equals(type))
                return obj;
            if ("Float".equals(type) || "java.lang.Float".equals(type))
                return new Float(dbl.floatValue());
            if ("Long".equals(type) || "java.lang.Long".equals(type))
                return new Long(Math.round(dbl.doubleValue()));
            if ("Integer".equals(type) || "java.lang.Integer".equals(type))
                return new Integer((int) Math.round(dbl.doubleValue()));
            if ("BigDecimal".equals(type) || "java.math.BigDecimal".equals(type))
                return new BigDecimal(dbl.toString());
            else
                throw new TypeCastException("Conversion from " + fromType + " to " + type + " not currently supported");
        }
        if (obj instanceof Float) {
            fromType = "Float";
            Float flt = (Float) obj;
            if ("String".equals(type))
                return getNf(locale).format(flt.doubleValue());
            if ("BigDecimal".equals(type) || "java.math.BigDecimal".equals(type))
                return new BigDecimal(flt.doubleValue());
            if ("Double".equals(type))
                return new Double(flt.doubleValue());
            if ("Float".equals(type))
                return obj;
            if ("Long".equals(type))
                return new Long(Math.round(flt.doubleValue()));
            if ("Integer".equals(type))
                return new Integer((int) Math.round(flt.doubleValue()));
            else
                throw new TypeCastException("Conversion from " + fromType + " to " + type + " not currently supported");
        }
        if (obj instanceof Long) {
            fromType = "Long";
            Long lng = (Long) obj;
            if ("String".equals(type) || "java.lang.String".equals(type))
                return getNf(locale).format(lng.longValue());
            if ("Double".equals(type) || "java.lang.Double".equals(type))
                return new Double(lng.doubleValue());
            if ("Float".equals(type) || "java.lang.Float".equals(type))
                return new Float(lng.floatValue());
            if ("BigDecimal".equals(type) || "java.math.BigDecimal".equals(type))
                return new BigDecimal(lng.toString());
            if ("Long".equals(type) || "java.lang.Long".equals(type))
                return obj;
            if ("Integer".equals(type) || "java.lang.Integer".equals(type))
                return new Integer(lng.intValue());
            else
                throw new TypeCastException("Conversion from " + fromType + " to " + type + " not currently supported");
        }
        if (obj instanceof Integer) {
            fromType = "Integer";
            Integer intgr = (Integer) obj;
            if ("String".equals(type) || "java.lang.String".equals(type))
                return getNf(locale).format(intgr.longValue());
            if ("Double".equals(type) || "java.lang.Double".equals(type))
                return new Double(intgr.doubleValue());
            if ("Float".equals(type) || "java.lang.Float".equals(type))
                return new Float(intgr.floatValue());
            if ("BigDecimal".equals(type) || "java.math.BigDecimal".equals(type)) {
                String str = intgr.toString();
                BigDecimal retBig = new BigDecimal(intgr.doubleValue());
                int iscale = str.indexOf(".");
                int keylen = str.length();
                if (iscale > -1) {
                    iscale = keylen - (iscale + 1);
                    return retBig.setScale(iscale, 5);
                } else {
                    return retBig.setScale(0, 5);
                }
            }
            if ("Long".equals(type) || "java.lang.Long".equals(type))
                return new Long(intgr.longValue());
            if ("Integer".equals(type) || "java.lang.Integer".equals(type))
                return obj;
            else
                throw new TypeCastException("Conversion from " + fromType + " to " + type + " not currently supported");
        }
        if (obj instanceof Date) {
            fromType = "Date";
            Date dte = (Date) obj;
            if ("String".equals(type) || "java.lang.String".equals(type))
                if (format == null || format.length() == 0) {
                    return dte.toString();
                } else {
                    SimpleDateFormat sdf = new SimpleDateFormat(format);
                    return sdf.format(new java.util.Date(dte.getTime()));
                }
            if ("Date".equals(type) || "java.sql.Date".equals(type))
                return obj;
            if ("Time".equals(type) || "java.sql.Time".equals(type))
                throw new TypeCastException("Conversion from " + fromType + " to " + type + " not currently supported");
            if ("Timestamp".equals(type) || "java.sql.Timestamp".equals(type))
                return new Timestamp(dte.getTime());
            else
                throw new TypeCastException("Conversion from " + fromType + " to " + type + " not currently supported");
        }
        if (obj instanceof Timestamp) {
            fromType = "Timestamp";
            Timestamp tme = (Timestamp) obj;
            if ("String".equals(type) || "java.lang.String".equals(type))
                if (format == null || format.length() == 0) {
                    return (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(tme).toString();
                } else {
                    SimpleDateFormat sdf = new SimpleDateFormat(format);
                    return sdf.format(new java.util.Date(tme.getTime()));
                }
            if ("Date".equals(type) || "java.sql.Date".equals(type))
                return new Date(tme.getTime());
            if ("Time".equals(type) || "java.sql.Time".equals(type))
                return new Time(tme.getTime());
            if ("Timestamp".equals(type) || "java.sql.Timestamp".equals(type))
                return obj;
            else
                throw new TypeCastException("Conversion from " + fromType + " to " + type + " not currently supported");
        }
        if (obj instanceof Boolean) {
            fromType = "Boolean";
            Boolean bol = (Boolean) obj;
            if ("Boolean".equals(type) || "java.lang.Boolean".equals(type))
                return bol;
            if ("String".equals(type) || "java.lang.String".equals(type))
                return bol.toString();
            if ("Integer".equals(type) || "java.lang.Integer".equals(type)) {
                if (bol.booleanValue())
                    return new Integer(1);
                else
                    return new Integer(0);
            } else {
                throw new TypeCastException("Conversion from " + fromType + " to " + type + " not currently supported");
            }
        }
        if ("String".equals(type) || "java.lang.String".equals(type))
            return obj.toString();
        else
            throw new TypeCastException("Conversion from " + obj.getClass().getName() + " to " + type + " not currently supported");
    }

    private static NumberFormat getNf(Locale locale) {
        NumberFormat nf = null;
        if (locale == null)
            nf = NumberFormat.getNumberInstance();
        else
            nf = NumberFormat.getNumberInstance(locale);
        nf.setGroupingUsed(false);
        return nf;
    }

    public static Boolean convert2SBoolean(Object obj) throws TypeCastException {
        return (Boolean) convert(obj, "Boolean", null);
    }

    public static Integer convert2Integer(Object obj) throws TypeCastException {
        return (Integer) convert(obj, "Integer", null);
    }

    public static String convert2String(Object obj) throws TypeCastException {
        return (String) convert(obj, "String", null);
    }

    public static String convert2String(Object obj, String defaultValue) throws TypeCastException {
        Object s = convert(obj, "String", null);
        if (s != null)
            return (String) s;
        else
            return "";
    }

    public static Long convert2Long(Object obj) throws TypeCastException {
        return (Long) convert(obj, "Long", null);
    }

    public static Double convert2Double(Object obj) throws TypeCastException {
        return (Double) convert(obj, "Double", null);
    }

    public static BigDecimal convert2BigDecimal(Object obj, int scale) throws TypeCastException {
        return ((BigDecimal) convert(obj, "BigDecimal", null)).setScale(scale, 5);
    }

    public static Date convert2SqlDate(Object obj, String format) throws TypeCastException {
        return (Date) convert(obj, "Date", format);
    }

    public static Timestamp convert2Timestamp(Object obj, String format) throws TypeCastException {
        return (Timestamp) convert(obj, "Timestamp", format);
    }
}

TypeCastException.java

package cn.edu.hbcf.common.utils;

import java.io.PrintStream;
import java.io.PrintWriter;

/**
 * 类型转换工具类<br>
 * 
 * @author 
 * @since 2009-07-06
 * @see java.lang.RuntimeException
 */
public class TypeCastException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    Throwable nested;

    public TypeCastException() {
        nested = null;
    }

    public TypeCastException(String msg) {
        super(msg);
        nested = null;
    }

    public TypeCastException(String msg, Throwable nested) {
        super(msg);
        this.nested = null;
        this.nested = nested;
    }

    public TypeCastException(Throwable nested) {

        this.nested = null;
        this.nested = nested;
    }

    public String getMessage() {
        if (nested != null)
            return super.getMessage() + " (" + nested.getMessage() + ")";
        else
            return super.getMessage();
    }

    public String getNonNestedMessage() {
        return super.getMessage();
    }

    public Throwable getNested() {
        if (nested == null)
            return this;
        else
            return nested;
    }

    public void printStackTrace() {
        super.printStackTrace();
        if (nested != null)
            nested.printStackTrace();
    }

    public void printStackTrace(PrintStream ps) {
        super.printStackTrace(ps);
        if (nested != null)
            nested.printStackTrace(ps);
    }

    public void printStackTrace(PrintWriter pw) {
        super.printStackTrace(pw);
        if (nested != null)
            nested.printStackTrace(pw);
    }
}
原文地址:https://www.cnblogs.com/zrui-xyu/p/4942827.html