package org.exitsoft.orm.core; /** * orm条件过滤器,可以通过{@link PropertyFilterRestrictionHolder#createPropertyFilter(String, String)}创建,使用他创建可以直接 * 写入表达式即可,相关表达式样式查看{@link PropertyCriterionBuilder}的实现类,如果直接创建查看{@link PropertyCriterionBuilder} * 实现类的实际restrictionName值和{@link PropertyType}枚举值,如果一个属性对比多个值可以使用逗号(,)分割 * <p> * 例子: * </p> * <code>PropertyFilter filter = new PropertyFilter("EQ",PropertyType.S.getValue(),new String[]{"propertyName"},"a,b,c");<code> * <p>当使用以上filter到{@link HibernateDao#findByPropertyFilters(java.util.List)}是会产生以下sql</p> * <p>sql:selete * from table where propertyName = 'a' and propertyName = 'b' and propertyName = 'c'</p> * * <code>PropertyFilter filter = new PropertyFilter("EQ",PropertyType.S.getValue(),new String[]{"propertyName1","propertyName2"},"a");<code> * <p>当使用以上filter到{@link HibernateDao#findByPropertyFilters(java.util.List)}是会产生以下sql</p> * <p>sql:selete * from table where propertyName1 = 'a' or propertyName2 = 'a'</p> * * <code>PropertyFilter filter = new PropertyFilter("EQ",PropertyType.S.getValue(),new String[]{"propertyName1","propertyName2"},"a,b");<code> * <p>当使用以上filter到{@link HibernateDao#findByPropertyFilters(java.util.List)}是会产生以下sql</p> * <p>sql:selete * from table where (propertyName1 = 'a' or propertyName1 = 'b') and (propertyName2 = 'a' or propertyName2 = 'b')</p> * * @see PropertyFilterRestrictionHolder#createPropertyFilter(String, String) * @see PropertyFilterRestrictionHolder#createPropertyFilter(String[], String[]) * @see PropertyCriterionBuilder * * @author vincent */ public class PropertyFilter { //约束名称 private String restrictionName; //属性类型 private Class<?> propertyType; //属性名称 private String[] propertyNames; //对比值 private String matchValue; public PropertyFilter() { } /** * 构造方法,可以通过{@link PropertyFilterRestrictionHolder#createPropertyFilter(String, String)}创建,使用他创建可以直接 * 写入表达式即可,相关表达式样式查看{@link PropertyCriterionBuilder}的实现类,如果直接创建查看{@link PropertyCriterionBuilder} * 实现类的实际restrictionName值和{@link PropertyType}枚举值,如果一个属性对比多个值可以使用逗号(,)分割 * * <p> * 例子: * </p> * <code>PropertyFilter filter = new PropertyFilter("EQ",PropertyType.S.getValue(),new String[]{"propertyName"},"a,b,c");<code> * <p>当使用以上filter到{@link HibernateDao#findByPropertyFilters(java.util.List)}是会产生以下sql</p> * <p>sql:selete * from table where propertyName = 'a' and propertyName = 'b' and propertyName = 'c'</p> * * <code>PropertyFilter filter = new PropertyFilter("EQ",PropertyType.S.getValue(),new String[]{"propertyName1","propertyName2"},"a");<code> * <p>当使用以上filter到{@link HibernateDao#findByPropertyFilters(java.util.List)}是会产生以下sql</p> * <p>sql:selete * from table where propertyName1 = 'a' or propertyName2 = 'a'</p> * * <code>PropertyFilter filter = new PropertyFilter("EQ",PropertyType.S.getValue(),new String[]{"propertyName1","propertyName2"},"a,b");<code> * <p>当使用以上filter到{@link HibernateDao#findByPropertyFilters(java.util.List)}是会产生以下sql</p> * <p>sql:selete * from table where (propertyName1 = 'a' or propertyName1 = 'b') and (propertyName2 = 'a' or propertyName2 = 'b')</p> * * @param restrictionName 约束名称 * @param propertyType 属性类型 * @param propertyNames 属性名称 * @param matchValue 对比值 */ public PropertyFilter(String restrictionName, PropertyType propertyType,String[] propertyNames,String matchValue) { super(); this.restrictionName = restrictionName; this.propertyType = propertyType.getValue(); this.propertyNames = propertyNames; this.matchValue = matchValue; } /** * 获取约束名称 * * @return String */ public String getRestrictionName() { return restrictionName; } /** * 设置约束名称 * * @param restrictionName 约束名称 */ public void setRestrictionName(String restrictionName) { this.restrictionName = restrictionName; } /** * 获取属性类型 * * @return Class */ public Class<?> getPropertyType() { return propertyType; } /** * 设置属性类型 * * @param propertyType 属性类型 */ public void setPropertyType(Class<?> propertyType) { this.propertyType = propertyType; } /** * 获取属性名称 * * @return String[] */ public String[] getPropertyNames() { return propertyNames; } /** * 设置属性名称 * * @param propertyNames 属性名称 */ public void setPropertyNames(String[] propertyNames) { this.propertyNames = propertyNames; } /** * 获取对比值 * * @return String */ public String getMatchValue() { return matchValue; } /** * 设置对比值 * * @param matchValue 对比值 */ public void setMatchValue(String matchValue) { this.matchValue = matchValue; } /** * 是否存在多个属性,如果是返回true,否则返回false * * @return boolean */ public boolean hasMultiplePropertyNames() { return this.propertyNames != null || this.propertyNames.length > 1; } /** * 获取单个属性名称 * * @return String */ public String getSinglePropertyName() { if (hasMultiplePropertyNames()) { throw new IllegalAccessError("PropertyFilter中存在多个propertyName:" + this.propertyNames); } return this.propertyNames[0]; } }