|
|
@@ -72,17 +72,50 @@ public class BaseDao<T extends BaseEntity> {
|
|
|
*/
|
|
|
public Query<T> createQuery() {
|
|
|
Query<T> query = datastore.createQuery(entityClass);
|
|
|
- globalFilter(query);
|
|
|
+ filter(query, globalFilter());
|
|
|
return query;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 全局过滤,如有需要,可重写该方法
|
|
|
*
|
|
|
- * @param query
|
|
|
- */
|
|
|
- protected void globalFilter(Query<T> query) {
|
|
|
- // Default do nothing
|
|
|
+ * @return 过滤条件,key-value的形式
|
|
|
+ * <p>
|
|
|
+ * <b>Note</b>: Property is in the form of "name op" ("age >").
|
|
|
+ * <p/>
|
|
|
+ * <p>
|
|
|
+ * Valid operators are ["=", "==","!=", "<>", ">", "<", ">=", "<=",
|
|
|
+ * "in", "nin", "all", "size", "exists"]
|
|
|
+ * </p>
|
|
|
+ * <p/>
|
|
|
+ * <p>
|
|
|
+ * Examples:
|
|
|
+ * </p>
|
|
|
+ * <p/>
|
|
|
+ * <ul>
|
|
|
+ * <li>{@code filter("yearsOfOperation >", 5)}</li>
|
|
|
+ * <li>{@code filter("rooms.maxBeds >=", 2)}</li>
|
|
|
+ * <li>{@code filter("rooms.bathrooms exists", 1)}</li>
|
|
|
+ * <li>{@code filter("stars in", new Long[]{3, 4}) //3 and 4 stars
|
|
|
+ * (midrange?)}</li>
|
|
|
+ * <li>{@code filter("quantity mod", new Long[]{4, 0}) // customers
|
|
|
+ * ordered in packs of 4)}</li>
|
|
|
+ * <li>{@code filter("age >=", age)}</li>
|
|
|
+ * <li>{@code filter("age =", age)}</li>
|
|
|
+ * <li>{@code filter("age", age)} (if no operator, = is assumed)
|
|
|
+ * </li>
|
|
|
+ * <li>{@code filter("age !=", age)}</li>
|
|
|
+ * <li>{@code filter("age in", ageList)}</li>
|
|
|
+ * <li>{@code filter("customers.loyaltyYears in", yearsList)}</li>
|
|
|
+ * </ul>
|
|
|
+ * <p/>
|
|
|
+ * <p>
|
|
|
+ * You can filter on id properties <strong>if</strong> this query is
|
|
|
+ * restricted to a Class<T>.
|
|
|
+ */
|
|
|
+ protected Map<String, Object> globalFilter() {
|
|
|
+ // Default no filter
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -704,10 +737,12 @@ public class BaseDao<T extends BaseEntity> {
|
|
|
* is restricted to a Class<T>.
|
|
|
* @return the query used to match the documents to update
|
|
|
*/
|
|
|
- protected Query<T> filter(@NotEmpty("query") Query<T> query, @NotEmpty("filters") Map<String, Object> filters) {
|
|
|
- Set<Entry<String, Object>> entrySet = filters.entrySet();
|
|
|
- for (Entry<String, Object> entry : entrySet) {
|
|
|
- query.filter(entry.getKey(), entry.getValue());
|
|
|
+ protected Query<T> filter(@NotEmpty("query") Query<T> query, Map<String, Object> filters) {
|
|
|
+ if (!CollectionUtils.isEmpty(filters)) {
|
|
|
+ Set<Entry<String, Object>> entrySet = filters.entrySet();
|
|
|
+ for (Entry<String, Object> entry : entrySet) {
|
|
|
+ query.filter(entry.getKey(), entry.getValue());
|
|
|
+ }
|
|
|
}
|
|
|
return query;
|
|
|
}
|