diff --git a/orm/src/main/java/com/zfoo/orm/OrmContext.java b/orm/src/main/java/com/zfoo/orm/OrmContext.java index cb1ca093..2a25ef51 100644 --- a/orm/src/main/java/com/zfoo/orm/OrmContext.java +++ b/orm/src/main/java/com/zfoo/orm/OrmContext.java @@ -64,7 +64,7 @@ public class OrmContext implements ApplicationListener, return instance.accessor; } - public static > IQueryBuilder getQuery(Class entityClazz) { + public static > IQueryBuilder getQuery(Class entityClazz) { return instance.query.builder(entityClazz); } diff --git a/orm/src/main/java/com/zfoo/orm/model/query/IQuery.java b/orm/src/main/java/com/zfoo/orm/model/query/IQuery.java index 00799b61..52e1628d 100644 --- a/orm/src/main/java/com/zfoo/orm/model/query/IQuery.java +++ b/orm/src/main/java/com/zfoo/orm/model/query/IQuery.java @@ -22,5 +22,7 @@ import com.zfoo.orm.model.entity.IEntity; * @version 3.0 */ public interface IQuery { - > IQueryBuilder builder(Class entityClazz); + + > IQueryBuilder builder(Class entityClazz); + } diff --git a/orm/src/main/java/com/zfoo/orm/model/query/IQueryBuilder.java b/orm/src/main/java/com/zfoo/orm/model/query/IQueryBuilder.java index 2b5ef141..ed987981 100644 --- a/orm/src/main/java/com/zfoo/orm/model/query/IQueryBuilder.java +++ b/orm/src/main/java/com/zfoo/orm/model/query/IQueryBuilder.java @@ -1,3 +1,16 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + package com.zfoo.orm.model.query; import com.zfoo.orm.model.entity.IEntity; @@ -5,27 +18,42 @@ import com.zfoo.protocol.model.Pair; import java.util.List; -/* -EQ、= 等于(=) -NE、<> 不等于(<>) -GT、> 大于(>) -GTE、>= 大于等于(>=) -LT、< 小于(<) -lte、<= 小于等于(<=) -LIKE 模糊查询 -[n] in (不在)IN 查询 + +/** + * EQ、= 等于(=) + * NE、<> 不等于(<>) + * GT、> 大于(>) + * GTE、>= 大于等于(>=) + * LT、< 小于(<) + * lte、<= 小于等于(<=) + * LIKE 模糊查询 + * [n] in (不在)IN 查询 + * + * @author sinprog + * @version 3.0 */ -public interface IQueryBuilder{ +public interface IQueryBuilder { + IQueryBuilder eq(String fieldName, Object fieldValue); + IQueryBuilder ne(String fieldName, Object fieldValue); + IQueryBuilder in(String fieldName, List fieldValueList); + IQueryBuilder nin(String fieldName, List fieldValueList); + IQueryBuilder like(String fieldName, String fieldValue); + IQueryBuilder lt(String fieldName, Object fieldValue); + IQueryBuilder lte(String fieldName, Object fieldValue); + IQueryBuilder gt(String fieldName, Object fieldValue); + IQueryBuilder gte(String fieldName, Object fieldValue); + List queryAll(); + E find(); diff --git a/orm/src/main/java/com/zfoo/orm/model/query/MongoQueryBuilder.java b/orm/src/main/java/com/zfoo/orm/model/query/MongoQueryBuilder.java index a854fdc1..347ab23f 100644 --- a/orm/src/main/java/com/zfoo/orm/model/query/MongoQueryBuilder.java +++ b/orm/src/main/java/com/zfoo/orm/model/query/MongoQueryBuilder.java @@ -1,9 +1,21 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + package com.zfoo.orm.model.query; import com.mongodb.client.model.Filters; import com.zfoo.orm.OrmContext; import com.zfoo.orm.model.entity.IEntity; -import com.zfoo.protocol.collection.CollectionUtils; import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.util.StringUtils; import org.bson.conversions.Bson; @@ -12,71 +24,76 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; -public class MongoQueryBuilder> implements IQueryBuilder{ - private Class entity; - private Bson builer; - MongoQueryBuilder(Class entityClazz) - { +public class MongoQueryBuilder> implements IQueryBuilder { + + private final Class entity; + private Bson builder; + + public MongoQueryBuilder(Class entityClazz) { entity = entityClazz; } + private void wrapBuilder(Bson bson) { + if (builder != null) { + builder = Filters.and(builder, bson); + } else { + builder = bson; + } + } @Override public IQueryBuilder eq(String fieldName, Object fieldValue) { var bson = Filters.eq(fieldName, fieldValue); - if(builer!=null) builer = Filters.and(builer, bson); - else builer = bson; + wrapBuilder(bson); return this; } + @Override public IQueryBuilder ne(String fieldName, Object fieldValue) { var bson = Filters.ne(fieldName, fieldValue); - if(builer!=null) builer = Filters.and(builer, bson); - else builer = bson; + wrapBuilder(bson); return this; } + @Override public IQueryBuilder lt(String fieldName, Object fieldValue) { var bson = Filters.lt(fieldName, fieldValue); - if(builer!=null) builer = Filters.and(builer, bson); - else builer = bson; + wrapBuilder(bson); return this; } + @Override public IQueryBuilder lte(String fieldName, Object fieldValue) { var bson = Filters.lte(fieldName, fieldValue); - if(builer!=null) builer = Filters.and(builer, bson); - else builer = bson; + wrapBuilder(bson); return this; } + @Override public IQueryBuilder gt(String fieldName, Object fieldValue) { var bson = Filters.gt(fieldName, fieldValue); - if(builer!=null) builer = Filters.and(builer, bson); - else builer = bson; + wrapBuilder(bson); return this; } + @Override public IQueryBuilder gte(String fieldName, Object fieldValue) { var bson = Filters.gte(fieldName, fieldValue); - if(builer!=null) builer = Filters.and(builer, bson); - else builer = bson; + wrapBuilder(bson); return this; } @Override public IQueryBuilder in(String fieldName, List fieldValueList) { var bson = Filters.in(fieldName, fieldValueList); - if(builer!=null) builer = Filters.and(builer, bson); - else builer = bson; + wrapBuilder(bson); return this; } @Override public IQueryBuilder nin(String fieldName, List fieldValueList) { var bson = Filters.nin(fieldName, fieldValueList); - if(builer!=null) builer = Filters.and(builer, bson); - else builer = bson; + wrapBuilder(bson); return this; } @@ -84,8 +101,7 @@ public class MongoQueryBuilder> implements IQueryBuilder public IQueryBuilder like(String fieldName, String fieldValue) { var regex = StringUtils.format("^{}.*", fieldValue); var bson = Filters.regex(fieldName, regex); - if(builer!=null) builer = Filters.and(builer, bson); - else builer = bson; + wrapBuilder(bson); return this; } @@ -93,11 +109,11 @@ public class MongoQueryBuilder> implements IQueryBuilder public List queryAll() { var collection = OrmContext.getOrmManager().getCollection(entity); var list = new ArrayList(); - var result = builer!=null?collection.find(builer):collection.find(); + var result = builder != null ? collection.find(builder) : collection.find(); result.forEach(new Consumer>() { @Override public void accept(IEntity entity) { - list.add((E)entity); + list.add((E) entity); } }); return list; @@ -106,7 +122,7 @@ public class MongoQueryBuilder> implements IQueryBuilder @Override public E find() { var collection = OrmContext.getOrmManager().getCollection(entity); - var list = builer!=null?collection.find(builer):collection.find(); + var list = builder != null ? collection.find(builder) : collection.find(); for (E row : list) { return row; } @@ -119,10 +135,9 @@ public class MongoQueryBuilder> implements IQueryBuilder var p = Page.valueOf(page, itemsPerPage, collection.countDocuments()); - var result = builer!=null?collection.find(builer):collection.find(); + var result = builder != null ? collection.find(builder) : collection.find(); var list = new ArrayList(); - result - .skip(p.skipNum()) + result.skip(p.skipNum()) .limit(p.getItemsPerPage()) .forEach(new Consumer>() { @Override diff --git a/orm/src/main/java/com/zfoo/orm/model/query/MongodbQuery.java b/orm/src/main/java/com/zfoo/orm/model/query/MongodbQuery.java index c1946957..8ec061b0 100644 --- a/orm/src/main/java/com/zfoo/orm/model/query/MongodbQuery.java +++ b/orm/src/main/java/com/zfoo/orm/model/query/MongodbQuery.java @@ -25,4 +25,5 @@ public class MongodbQuery implements IQuery { public > IQueryBuilder builder(Class entityClazz) { return new MongoQueryBuilder(entityClazz); } + }