📄 filter.java
字号:
package ActiveObject.core;import ActiveObject.vo.Command;import ActiveObject.vo.CompareReference;import ActiveObject.vo.CompareValue;import ActiveObject.vo.TableType;import ActiveObject.exception.*;import java.util.*;/** * @author tanjiazhang */public class Filter { private int limitStart = -1; private int limitLength = -1; //表名-别称 映射 private List<TableType> tables = new ArrayList<TableType>(); /** * 用于字段与值的比较 */ private Map<String, CompareValue> valueFilters = new HashMap<String, CompareValue>(); /** * 用于字段与字段的比较 */ private Map<String, CompareReference> referenceFilters = new HashMap<String, CompareReference>(); private Map<String, Order> orders = new HashMap<String, Order>(); public Filter (Class objectType) { this.tables.add(new TableType(objectType)); } public Filter (Class objectType, String nickName) { this.tables.add(new TableType(objectType, nickName)); } public Filter (ActiveRecord record) { } public Filter join(Class objectType, String nickName) throws TableAliasDuplicateException{ for(TableType item : this.tables) { if(item.getNickName().equals(nickName)) throw new TableAliasDuplicateException(); } this.tables.add(new TableType(objectType, nickName)); return this; } public Filter join(Class objectType) throws TableAliasDuplicateException{ return join(objectType, objectType.getSimpleName()); } // Class getMainObject()// {// return this.tables.get(0).getObjectType();// } /** * 添加过滤条件 * @param field * @param value * @return */// public Filter addEqualValue (String field, Object value) {// valueFilters.put(field, new CompareValue("=", value));// return this;// }// public Filter addEqualReference (String field, String reference) throws ReferenceFormatNotValid{//是否有必要对参数进行检查?待定// if(!referenceFilters.keySet().contains(field.substring(0, field.indexOf("."))))// throw new ReferenceFormatNotValid();// referenceFilters.put(field, new CompareReference("=", reference));// return this;// }// public Filter addLargerValue (String field, Object value) {// valueFilters.put(field, new CompareValue(">", value));// return this;// }// public Filter addLargerReference (String field, String reference) {// referenceFilters.put(field, new CompareReference(">", reference));// return this;// }//// public Filter addSmallerValue (String field, Object value) {// valueFilters.put(field, new CompareValue("<", value));// return this;// }// public Filter addSmallerReference (String field, String reference) {// referenceFilters.put(field, new CompareReference("<", reference));// return this;// }//// public Filter addLikeValue (String field, Object value) {// valueFilters.put(field, new CompareValue(" like ", value));// return this;// }// public Filter addLikeReference (String field, String reference) {// referenceFilters.put(field, new CompareReference(" like ", reference));// return this;// } /** * 添加排序条件 * @param field * @param sortOrder * @return */ public Filter addOrder (String field, Order sortOrder) { this.orders.put(field, sortOrder); return this; } public Command createQueryCommand () { StringBuffer buf = new StringBuffer(200); buf.append("select * from "); int tableCount = this.tables.size(); for(int i=0;i<tableCount;i++) { TableType table = this.tables.get(i); buf.append(table.getObjectType().getSimpleName()); if(table.getNickName() != null) { buf.append(" as "); buf.append(table.getNickName()); } if(i == tableCount-1) buf.append(" "); else buf.append(","); } int totalFilterCount = this.valueFilters.size() + this.referenceFilters.size(); List params = new ArrayList(); //添加过滤条件 if(totalFilterCount > 0) { buf.append(" where "); for(String key : this.valueFilters.keySet()) { CompareValue value = this.valueFilters.get(key); buf.append(key); buf.append(value.getCompare()); buf.append("?,"); params.add(value.getValue()); } buf.replace(buf.length()-1, buf.length(), ""); } //添加排序控制 if(this.orders.size() > 0) { buf.append(" order by "); int size = this.orders.size(); int index = 1; for(String key : this.orders.keySet()) { buf.append(key); if(this.orders.get(key) == Order.DESC) buf.append(" DESC "); else buf.append(" ASC "); if(index < size) buf.append(","); index++; } } //添加记录个数限制 if(this.limitLength > -1) { buf.append(" limit "); if(this.limitStart > -1) { buf.append(this.limitStart); buf.append(","); } buf.append(this.limitLength); } return new Command(buf.toString(), params.toArray()); }// protected Command createUpdateCommand (Value fields, Class objectType) {// StringBuffer buf = new StringBuffer(200);// buf.append("update ");// buf.append(objectType.getSimpleName());// buf.append(" set ");// int totalFilterCount = this.valueFilters.size() + this.referenceFilters.size();// List params = new ArrayList();// // //添加set语句的内容// for(String item : fields.getColumns())// {// buf.append(item);// buf.append("=?,");// params.add(fields.getColumnValue(item));// }// buf.replace(buf.length()-1, buf.length(), "");// // //添加过滤条件// if(totalFilterCount == 0)// {// buf.append(" where ");// for(String key : this.valueFilters.keySet())// {// CompareValue value = this.valueFilters.get(key);// buf.append(key);// buf.append(value.getCompare());// buf.append("?,");// params.add(value.getValue());// }// buf.replace(buf.length()-1, buf.length(), "");// }// // //添加排序控制// if(this.orders.size() > 0)// {// buf.append(" order by ");// int size = this.orders.size();// int index = 1;// for(String key : this.orders.keySet())// {// buf.append(key);// if(this.orders.get(key) == Order.DESC)// buf.append(" DESC ");// else// buf.append(" ASC ");// if(index < size)// buf.append(",");// index++;// }// }// // //添加记录个数限制// if(this.limitLength > -1)// {// buf.append(" limit ");// if(this.limitStart > -1)// {// buf.append(this.limitStart);// buf.append(",");// }// buf.append(this.limitLength);// }// return new Command(buf.toString(), params.toArray());// } public Command createDeleteCommand () { StringBuffer buf = new StringBuffer(200); buf.append("delete "); int tableCount = this.tables.size(); if(tableCount > 1) { for(int i=0;i<tableCount;i++) { buf.append(tables.get(i).getNickName()); if(i == tableCount-1) buf.append(" "); else buf.append(","); } } buf.append("from "); for(int i=0;i<tableCount;i++) { TableType table = this.tables.get(i); buf.append(table.getObjectType().getSimpleName()); if(table.getNickName() != null) { buf.append(" as "); buf.append(table.getNickName()); } if(i == tableCount-1) buf.append(" "); else buf.append(","); } int totalFilterCount = this.valueFilters.size() + this.referenceFilters.size(); List params = new ArrayList(); //添加过滤条件 if(totalFilterCount > 0) { buf.append(" where "); for(String key : this.valueFilters.keySet()) { CompareValue value = this.valueFilters.get(key); buf.append(key); buf.append(value.getCompare()); buf.append("?,"); params.add(value.getValue()); } buf.replace(buf.length()-1, buf.length(), ""); } if(tableCount == 1) { //添加排序控制 if(this.orders.size() > 0) { buf.append(" order by "); int size = this.orders.size(); int index = 1; for(String key : this.orders.keySet()) { buf.append(key); if(this.orders.get(key) == Order.DESC) buf.append(" DESC "); else buf.append(" ASC "); if(index < size) buf.append(","); index++; } } //添加记录个数限制 if(this.limitLength > -1) { buf.append(" limit "); if(this.limitStart > -1) { buf.append(this.limitStart); buf.append(","); } buf.append(this.limitLength); } } return new Command(buf.toString(), params.toArray()); } /** * 设置记录个数 * @param length */ public Filter setLength (int length) { this.limitLength = length; return this; } /** * 设置记录范围 * @param start 开始位置 * @param length 记录个数 * @return */ public Filter setRange (int start, int length) { this.limitStart = start; this.limitLength = length; return this; } /** * 添加过滤和排序条件 * @param field * @param value * @param sortOrder * @return */ private Filter add (String field, Object value, Order sortOrder) { return null; } public List<TableType> getTables() { return tables; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -