diff --git a/orm/src/main/java/com/zfoo/orm/OrmContext.java b/orm/src/main/java/com/zfoo/orm/OrmContext.java index 8b653585..a42bf814 100644 --- a/orm/src/main/java/com/zfoo/orm/OrmContext.java +++ b/orm/src/main/java/com/zfoo/orm/OrmContext.java @@ -60,7 +60,7 @@ public class OrmContext implements ApplicationListener, return instance.accessor; } - public static > IQueryBuilder getQuery(Class entityClazz) { + public static , E extends IEntity> IQueryBuilder getQuery(Class entityClazz) { return instance.query.builder(entityClazz); } diff --git a/orm/src/main/java/com/zfoo/orm/accessor/IAccessor.java b/orm/src/main/java/com/zfoo/orm/accessor/IAccessor.java index e05a1615..d41af234 100644 --- a/orm/src/main/java/com/zfoo/orm/accessor/IAccessor.java +++ b/orm/src/main/java/com/zfoo/orm/accessor/IAccessor.java @@ -25,23 +25,23 @@ import java.util.List; */ public interface IAccessor { - > boolean insert(E entity); + , E extends IEntity> boolean insert(E entity); - > void batchInsert(List entities); + , E extends IEntity> void batchInsert(List entities); - > boolean update(E entity); + , E extends IEntity> boolean update(E entity); - > void batchUpdate(List entities); + , E extends IEntity> void batchUpdate(List entities); - > boolean delete(E entity); + , E extends IEntity> boolean delete(E entity); - > boolean delete(Object pk, Class entityClazz); + , E extends IEntity> boolean delete(PK pk, Class entityClazz); - > void batchDelete(List entities); + , E extends IEntity> void batchDelete(List entities); - > void batchDelete(List pks, Class entityClazz); + , E extends IEntity> void batchDelete(List pks, Class entityClazz); @Nullable - > E load(Object pk, Class entityClazz); + , E extends IEntity> E load(PK pk, Class entityClazz); } diff --git a/orm/src/main/java/com/zfoo/orm/accessor/MongodbAccessor.java b/orm/src/main/java/com/zfoo/orm/accessor/MongodbAccessor.java index a2f63049..476c1f72 100644 --- a/orm/src/main/java/com/zfoo/orm/accessor/MongodbAccessor.java +++ b/orm/src/main/java/com/zfoo/orm/accessor/MongodbAccessor.java @@ -35,7 +35,7 @@ public class MongodbAccessor implements IAccessor { @Override - public > boolean insert(E entity) { + public , E extends IEntity> boolean insert(E entity) { @SuppressWarnings("unchecked") var entityClazz = (Class) entity.getClass(); var collection = OrmContext.getOrmManager().getCollection(entityClazz); @@ -44,7 +44,7 @@ public class MongodbAccessor implements IAccessor { } @Override - public > void batchInsert(List entities) { + public , E extends IEntity> void batchInsert(List entities) { if (CollectionUtils.isEmpty(entities)) { return; } @@ -55,7 +55,7 @@ public class MongodbAccessor implements IAccessor { } @Override - public > boolean update(E entity) { + public , E extends IEntity> boolean update(E entity) { try { @SuppressWarnings("unchecked") var entityClazz = (Class) entity.getClass(); @@ -76,7 +76,7 @@ public class MongodbAccessor implements IAccessor { } @Override - public > void batchUpdate(List entities) { + public , E extends IEntity> void batchUpdate(List entities) { if (CollectionUtils.isEmpty(entities)) { return; } @@ -101,7 +101,7 @@ public class MongodbAccessor implements IAccessor { } @Override - public > boolean delete(E entity) { + public , E extends IEntity> boolean delete(E entity) { @SuppressWarnings("unchecked") var entityClazz = (Class) entity.getClass(); var collection = OrmContext.getOrmManager().getCollection(entityClazz); @@ -110,14 +110,14 @@ public class MongodbAccessor implements IAccessor { } @Override - public > boolean delete(Object pk, Class entityClazz) { + public , E extends IEntity> boolean delete(PK pk, Class entityClazz) { var collection = OrmContext.getOrmManager().getCollection(entityClazz); var result = collection.deleteOne(Filters.eq("_id", pk)); return result.getDeletedCount() > 0; } @Override - public > void batchDelete(List entities) { + public , E extends IEntity> void batchDelete(List entities) { if (CollectionUtils.isEmpty(entities)) { return; } @@ -129,13 +129,13 @@ public class MongodbAccessor implements IAccessor { } @Override - public > void batchDelete(List pks, Class entityClazz) { + public , E extends IEntity> void batchDelete(List pks, Class entityClazz) { var collection = OrmContext.getOrmManager().getCollection(entityClazz); collection.deleteMany(Filters.in("_id", pks)); } @Override - public > E load(Object pk, Class entityClazz) { + public , E extends IEntity> E load(PK pk, Class entityClazz) { var collection = OrmContext.getOrmManager().getCollection(entityClazz); var result = new ArrayList(1); collection.find(Filters.eq("_id", pk)).forEach(document -> result.add(document)); diff --git a/orm/src/main/java/com/zfoo/orm/manager/IOrmManager.java b/orm/src/main/java/com/zfoo/orm/manager/IOrmManager.java index e6dde761..b2bd7092 100644 --- a/orm/src/main/java/com/zfoo/orm/manager/IOrmManager.java +++ b/orm/src/main/java/com/zfoo/orm/manager/IOrmManager.java @@ -15,7 +15,6 @@ package com.zfoo.orm.manager; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoCollection; -import com.mongodb.client.MongoDatabase; import com.zfoo.orm.cache.IEntityCache; import com.zfoo.orm.model.IEntity; import org.bson.Document; @@ -39,14 +38,14 @@ public interface IOrmManager { */ MongoClient mongoClient(); - > IEntityCache getEntityCaches(Class clazz); + , E extends IEntity> IEntityCache getEntityCaches(Class clazz); Collection> getAllEntityCaches(); /** * 基于对象的orm操作 */ - > MongoCollection getCollection(Class entityClazz); + , E extends IEntity> MongoCollection getCollection(Class entityClazz); /** * 更加细粒度的操作 diff --git a/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java b/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java index cb346c83..1a21751b 100644 --- a/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java +++ b/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java @@ -142,7 +142,7 @@ public class OrmManager implements IOrmManager { var entityDef = entry.getValue(); var indexDefMap = entityDef.getIndexDefMap(); if (CollectionUtils.isNotEmpty(indexDefMap)) { - var collection = getCollection(entityClass); + var collection = mongodbDatabase.getCollection(collectionName(entityClass), entityClass); for (var indexDef : indexDefMap.entrySet()) { var fieldName = indexDef.getKey(); var index = indexDef.getValue(); @@ -174,7 +174,7 @@ public class OrmManager implements IOrmManager { if (CollectionUtils.isNotEmpty(indexTextDefMap)) { AssertionUtils.isTrue(indexTextDefMap.size() == 1 , StringUtils.format("A collection can have only one text index [{}]", JsonUtils.object2String(indexTextDefMap.keySet()))); - var collection = getCollection(entityClass); + var collection = mongodbDatabase.getCollection(collectionName(entityClass), entityClass); for (var indexTextDef : indexTextDefMap.entrySet()) { var fieldName = indexTextDef.getKey(); var hasIndex = false; @@ -240,7 +240,7 @@ public class OrmManager implements IOrmManager { } @Override - public > IEntityCache getEntityCaches(Class clazz) { + public , E extends IEntity> IEntityCache getEntityCaches(Class clazz) { var usable = allEntityCachesUsableMap.get(clazz); if (usable == null) { throw new RunException("EntityCaches that do not have [] defined", clazz.getCanonicalName()); @@ -250,7 +250,7 @@ public class OrmManager implements IOrmManager { throw new RunException("Orm does not use [] EntityCacheAutowired annotation, which are released in advance to save memory", clazz.getCanonicalName()); } @SuppressWarnings("unchecked") - var entityCache = (IEntityCache) entityCachesMap.get(clazz); + var entityCache = (IEntityCache) entityCachesMap.get(clazz); return entityCache; } @@ -259,14 +259,18 @@ public class OrmManager implements IOrmManager { return Collections.unmodifiableCollection(entityCachesMap.values()); } - @Override - public > MongoCollection getCollection(Class entityClazz) { + private String collectionName(Class> entityClazz) { var collectionName = collectionNameMap.get(entityClazz); if (collectionName == null) { collectionName = StringUtils.substringBeforeLast(StringUtils.uncapitalize(entityClazz.getSimpleName()), "Entity"); collectionNameMap.put(entityClazz, collectionName); } - return mongodbDatabase.getCollection(collectionName, entityClazz); + return collectionName; + } + + @Override + public , E extends IEntity> MongoCollection getCollection(Class entityClazz) { + return mongodbDatabase.getCollection(collectionName(entityClazz), entityClazz); } diff --git a/orm/src/main/java/com/zfoo/orm/query/IQuery.java b/orm/src/main/java/com/zfoo/orm/query/IQuery.java index 5aca8d75..54b3cbf9 100644 --- a/orm/src/main/java/com/zfoo/orm/query/IQuery.java +++ b/orm/src/main/java/com/zfoo/orm/query/IQuery.java @@ -20,8 +20,8 @@ import com.zfoo.orm.model.IEntity; * * @author godotg */ -public interface IQuery { +public interface IQuery, E extends IEntity> { - > IQueryBuilder builder(Class entityClazz); + IQueryBuilder builder(Class entityClazz); } diff --git a/orm/src/main/java/com/zfoo/orm/query/IQueryBuilder.java b/orm/src/main/java/com/zfoo/orm/query/IQueryBuilder.java index 148cbadd..f023082c 100644 --- a/orm/src/main/java/com/zfoo/orm/query/IQueryBuilder.java +++ b/orm/src/main/java/com/zfoo/orm/query/IQueryBuilder.java @@ -22,33 +22,33 @@ import java.util.List; /** * @author sinprog */ -public interface IQueryBuilder { +public interface IQueryBuilder, E extends IEntity> { // EQ、= 等于(=) - IQueryBuilder eq(String fieldName, Object fieldValue); + IQueryBuilder eq(String fieldName, Object fieldValue); // NE、<> 不等于(<>) - IQueryBuilder ne(String fieldName, Object fieldValue); + IQueryBuilder ne(String fieldName, Object fieldValue); - IQueryBuilder in(String fieldName, List fieldValueList); + IQueryBuilder in(String fieldName, List fieldValueList); // [n] in (不在)IN 查询 - IQueryBuilder nin(String fieldName, List fieldValueList); + IQueryBuilder nin(String fieldName, List fieldValueList); // LT、< 小于(<) - IQueryBuilder lt(String fieldName, Object fieldValue); + IQueryBuilder lt(String fieldName, Object fieldValue); // lte、<= 小于等于(<=) - IQueryBuilder lte(String fieldName, Object fieldValue); + IQueryBuilder lte(String fieldName, Object fieldValue); // GT、> 大于(>) - IQueryBuilder gt(String fieldName, Object fieldValue); + IQueryBuilder gt(String fieldName, Object fieldValue); // GTE、>= 大于等于(>=) - IQueryBuilder gte(String fieldName, Object fieldValue); + IQueryBuilder gte(String fieldName, Object fieldValue); // LIKE 模糊查询 - IQueryBuilder like(String fieldName, String fieldValue); + IQueryBuilder like(String fieldName, String fieldValue); List queryAll(); diff --git a/orm/src/main/java/com/zfoo/orm/query/MongoQueryBuilder.java b/orm/src/main/java/com/zfoo/orm/query/MongoQueryBuilder.java index 4aa2692f..eac46645 100644 --- a/orm/src/main/java/com/zfoo/orm/query/MongoQueryBuilder.java +++ b/orm/src/main/java/com/zfoo/orm/query/MongoQueryBuilder.java @@ -24,7 +24,7 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; -public class MongoQueryBuilder> implements IQueryBuilder { +public class MongoQueryBuilder, E extends IEntity> implements IQueryBuilder { private final Class entity; private Bson builder = Filters.empty(); @@ -38,63 +38,63 @@ public class MongoQueryBuilder> implements IQueryBuilder } @Override - public IQueryBuilder eq(String fieldName, Object fieldValue) { + public IQueryBuilder eq(String fieldName, Object fieldValue) { var bson = Filters.eq(fieldName, fieldValue); wrapBuilder(bson); return this; } @Override - public IQueryBuilder ne(String fieldName, Object fieldValue) { + public IQueryBuilder ne(String fieldName, Object fieldValue) { var bson = Filters.ne(fieldName, fieldValue); wrapBuilder(bson); return this; } @Override - public IQueryBuilder lt(String fieldName, Object fieldValue) { + public IQueryBuilder lt(String fieldName, Object fieldValue) { var bson = Filters.lt(fieldName, fieldValue); wrapBuilder(bson); return this; } @Override - public IQueryBuilder lte(String fieldName, Object fieldValue) { + public IQueryBuilder lte(String fieldName, Object fieldValue) { var bson = Filters.lte(fieldName, fieldValue); wrapBuilder(bson); return this; } @Override - public IQueryBuilder gt(String fieldName, Object fieldValue) { + public IQueryBuilder gt(String fieldName, Object fieldValue) { var bson = Filters.gt(fieldName, fieldValue); wrapBuilder(bson); return this; } @Override - public IQueryBuilder gte(String fieldName, Object fieldValue) { + public IQueryBuilder gte(String fieldName, Object fieldValue) { var bson = Filters.gte(fieldName, fieldValue); wrapBuilder(bson); return this; } @Override - public IQueryBuilder in(String fieldName, List fieldValueList) { + public IQueryBuilder in(String fieldName, List fieldValueList) { var bson = Filters.in(fieldName, fieldValueList); wrapBuilder(bson); return this; } @Override - public IQueryBuilder nin(String fieldName, List fieldValueList) { + public IQueryBuilder nin(String fieldName, List fieldValueList) { var bson = Filters.nin(fieldName, fieldValueList); wrapBuilder(bson); return this; } @Override - public IQueryBuilder like(String fieldName, String fieldValue) { + public IQueryBuilder like(String fieldName, String fieldValue) { var regex = StringUtils.format("^{}.*", fieldValue); var bson = Filters.regex(fieldName, regex); wrapBuilder(bson); @@ -106,14 +106,7 @@ public class MongoQueryBuilder> implements IQueryBuilder var collection = OrmContext.getOrmManager().getCollection(entity); var list = new ArrayList(); var result = collection.find(builder); - result.forEach(new Consumer>() { - @Override - public void accept(IEntity entity) { - @SuppressWarnings("unchecked") - var e = (E) entity; - list.add(e); - } - }); + result.forEach(entity -> list.add(entity)); return list; } @@ -127,12 +120,10 @@ public class MongoQueryBuilder> implements IQueryBuilder var list = new ArrayList(); result.skip(p.skipNum()) .limit(p.getItemsPerPage()) - .forEach(new Consumer>() { + .forEach(new Consumer() { @Override - public void accept(IEntity entity) { - @SuppressWarnings("unchecked") - var e = (E) entity; - list.add(e); + public void accept(E entity) { + list.add(entity); } }); diff --git a/orm/src/main/java/com/zfoo/orm/query/MongodbQuery.java b/orm/src/main/java/com/zfoo/orm/query/MongodbQuery.java index 57a25783..d92c449e 100644 --- a/orm/src/main/java/com/zfoo/orm/query/MongodbQuery.java +++ b/orm/src/main/java/com/zfoo/orm/query/MongodbQuery.java @@ -18,11 +18,11 @@ import com.zfoo.orm.model.IEntity; /** * @author godotg */ -public class MongodbQuery implements IQuery { +public class MongodbQuery, E extends IEntity> implements IQuery { @Override - public > IQueryBuilder builder(Class entityClazz) { - return new MongoQueryBuilder(entityClazz); + public IQueryBuilder builder(Class entityClazz) { + return new MongoQueryBuilder(entityClazz); } }