mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-10-16 10:15:28 +00:00
7 files changed
+193
-113
No files matched your search
@@ -17,7 +17,9 @@ import com.mongodb.client.MongoClient;
|
|||||||
import com.zfoo.orm.manager.IOrmManager;
|
import com.zfoo.orm.manager.IOrmManager;
|
||||||
import com.zfoo.orm.manager.OrmManager;
|
import com.zfoo.orm.manager.OrmManager;
|
||||||
import com.zfoo.orm.model.accessor.IAccessor;
|
import com.zfoo.orm.model.accessor.IAccessor;
|
||||||
|
import com.zfoo.orm.model.entity.IEntity;
|
||||||
import com.zfoo.orm.model.query.IQuery;
|
import com.zfoo.orm.model.query.IQuery;
|
||||||
|
import com.zfoo.orm.model.query.IQueryBuilder;
|
||||||
import com.zfoo.protocol.util.ReflectionUtils;
|
import com.zfoo.protocol.util.ReflectionUtils;
|
||||||
import com.zfoo.scheduler.SchedulerContext;
|
import com.zfoo.scheduler.SchedulerContext;
|
||||||
import com.zfoo.scheduler.model.StopWatch;
|
import com.zfoo.scheduler.model.StopWatch;
|
||||||
@@ -62,8 +64,8 @@ public class OrmContext implements ApplicationListener<ApplicationContextEvent>,
|
|||||||
return instance.accessor;
|
return instance.accessor;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IQuery getQuery() {
|
public static <E extends IEntity<?>> IQueryBuilder getQuery(Class<E> entityClazz) {
|
||||||
return instance.query;
|
return instance.query.builder(entityClazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IOrmManager getOrmManager() {
|
public static IOrmManager getOrmManager() {
|
||||||
|
|||||||
@@ -241,7 +241,7 @@ public class EntityCaches<PK extends Comparable<PK>, E extends IEntity<PK>> impl
|
|||||||
var ids = updateList.stream().map(it -> it.id()).collect(Collectors.toList());
|
var ids = updateList.stream().map(it -> it.id()).collect(Collectors.toList());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var dbList = OrmContext.getQuery().queryFieldIn("_id", ids, (Class<E>) entityDef.getClazz());
|
List<IEntity> dbList = OrmContext.getQuery(entityDef.getClazz()).in("_id", ids).queryAll();
|
||||||
var dbMap = dbList.stream().collect(Collectors.toMap(key -> key.id(), value -> value));
|
var dbMap = dbList.stream().collect(Collectors.toMap(key -> key.id(), value -> value));
|
||||||
for (var entity : updateList) {
|
for (var entity : updateList) {
|
||||||
var dbEntity = dbMap.get(entity.id());
|
var dbEntity = dbMap.get(entity.id());
|
||||||
|
|||||||
@@ -14,9 +14,6 @@
|
|||||||
package com.zfoo.orm.model.query;
|
package com.zfoo.orm.model.query;
|
||||||
|
|
||||||
import com.zfoo.orm.model.entity.IEntity;
|
import com.zfoo.orm.model.entity.IEntity;
|
||||||
import com.zfoo.protocol.model.Pair;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 对数据库进行(查找)的相关方法
|
* 对数据库进行(查找)的相关方法
|
||||||
@@ -25,22 +22,5 @@ import java.util.List;
|
|||||||
* @version 3.0
|
* @version 3.0
|
||||||
*/
|
*/
|
||||||
public interface IQuery {
|
public interface IQuery {
|
||||||
|
<E extends IEntity<?>> IQueryBuilder builder(Class<E> entityClazz);
|
||||||
<E extends IEntity<?>> List<E> queryFieldLike(String fieldName, String fieldValue, Class<E> entityClazz);
|
|
||||||
|
|
||||||
<E extends IEntity<?>> List<E> queryAll(Class<E> entityClazz);
|
|
||||||
|
|
||||||
<E extends IEntity<?>> List<E> queryFieldEqual(String fieldName, Object fieldValue, Class<E> entityClazz);
|
|
||||||
|
|
||||||
<E extends IEntity<?>> List<E> queryFieldIn(String fieldName, List<?> fieldValueList, Class<E> entityClazz);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询,默认按照id排序
|
|
||||||
*
|
|
||||||
* @param page 第几页
|
|
||||||
* @param itemsPerPage 每页容量
|
|
||||||
* @param entityClazz 实体类
|
|
||||||
*/
|
|
||||||
<E extends IEntity<?>> Pair<Page, List<E>> pageQuery(int page, int itemsPerPage, Class<E> entityClazz);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
package com.zfoo.orm.model.query;
|
||||||
|
|
||||||
|
import com.zfoo.orm.model.entity.IEntity;
|
||||||
|
import com.zfoo.protocol.model.Pair;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/*
|
||||||
|
EQ、= 等于(=)
|
||||||
|
NE、<> 不等于(<>)
|
||||||
|
GT、> 大于(>)
|
||||||
|
GTE、>= 大于等于(>=)
|
||||||
|
LT、< 小于(<)
|
||||||
|
lte、<= 小于等于(<=)
|
||||||
|
LIKE 模糊查询
|
||||||
|
[n] in (不在)IN 查询
|
||||||
|
*/
|
||||||
|
public interface IQueryBuilder<E extends IEntity>{
|
||||||
|
IQueryBuilder<E> eq(String fieldName, Object fieldValue);
|
||||||
|
IQueryBuilder<E> ne(String fieldName, Object fieldValue);
|
||||||
|
IQueryBuilder<E> in(String fieldName, List<?> fieldValueList);
|
||||||
|
IQueryBuilder<E> nin(String fieldName, List<?> fieldValueList);
|
||||||
|
IQueryBuilder<E> like(String fieldName, String fieldValue);
|
||||||
|
IQueryBuilder<E> lt(String fieldName, Object fieldValue);
|
||||||
|
IQueryBuilder<E> lte(String fieldName, Object fieldValue);
|
||||||
|
IQueryBuilder<E> gt(String fieldName, Object fieldValue);
|
||||||
|
IQueryBuilder<E> gte(String fieldName, Object fieldValue);
|
||||||
|
List<E> queryAll();
|
||||||
|
E find();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询,默认按照id排序
|
||||||
|
*
|
||||||
|
* @param page 第几页
|
||||||
|
* @param itemsPerPage 每页容量
|
||||||
|
*/
|
||||||
|
Pair<Page, List<E>> page(int page, int itemsPerPage);
|
||||||
|
}
|
||||||
@@ -0,0 +1,136 @@
|
|||||||
|
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;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
public class MongoQueryBuilder<E extends IEntity<?>> implements IQueryBuilder<E>{
|
||||||
|
private Class<E> entity;
|
||||||
|
private Bson builer;
|
||||||
|
MongoQueryBuilder(Class<E> entityClazz)
|
||||||
|
{
|
||||||
|
entity = entityClazz;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IQueryBuilder<E> eq(String fieldName, Object fieldValue) {
|
||||||
|
var bson = Filters.eq(fieldName, fieldValue);
|
||||||
|
if(builer!=null) builer = Filters.and(builer, bson);
|
||||||
|
else builer = bson;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public IQueryBuilder<E> ne(String fieldName, Object fieldValue) {
|
||||||
|
var bson = Filters.ne(fieldName, fieldValue);
|
||||||
|
if(builer!=null) builer = Filters.and(builer, bson);
|
||||||
|
else builer = bson;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public IQueryBuilder<E> lt(String fieldName, Object fieldValue) {
|
||||||
|
var bson = Filters.lt(fieldName, fieldValue);
|
||||||
|
if(builer!=null) builer = Filters.and(builer, bson);
|
||||||
|
else builer = bson;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public IQueryBuilder<E> lte(String fieldName, Object fieldValue) {
|
||||||
|
var bson = Filters.lte(fieldName, fieldValue);
|
||||||
|
if(builer!=null) builer = Filters.and(builer, bson);
|
||||||
|
else builer = bson;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public IQueryBuilder<E> gt(String fieldName, Object fieldValue) {
|
||||||
|
var bson = Filters.gt(fieldName, fieldValue);
|
||||||
|
if(builer!=null) builer = Filters.and(builer, bson);
|
||||||
|
else builer = bson;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public IQueryBuilder<E> gte(String fieldName, Object fieldValue) {
|
||||||
|
var bson = Filters.gte(fieldName, fieldValue);
|
||||||
|
if(builer!=null) builer = Filters.and(builer, bson);
|
||||||
|
else builer = bson;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IQueryBuilder<E> in(String fieldName, List<?> fieldValueList) {
|
||||||
|
var bson = Filters.in(fieldName, fieldValueList);
|
||||||
|
if(builer!=null) builer = Filters.and(builer, bson);
|
||||||
|
else builer = bson;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IQueryBuilder<E> nin(String fieldName, List<?> fieldValueList) {
|
||||||
|
var bson = Filters.nin(fieldName, fieldValueList);
|
||||||
|
if(builer!=null) builer = Filters.and(builer, bson);
|
||||||
|
else builer = bson;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IQueryBuilder<E> 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;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<E> queryAll() {
|
||||||
|
var collection = OrmContext.getOrmManager().getCollection(entity);
|
||||||
|
var list = new ArrayList<E>();
|
||||||
|
var result = builer!=null?collection.find(builer):collection.find();
|
||||||
|
result.forEach(new Consumer<IEntity<?>>() {
|
||||||
|
@Override
|
||||||
|
public void accept(IEntity<?> entity) {
|
||||||
|
list.add((E)entity);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public E find() {
|
||||||
|
var collection = OrmContext.getOrmManager().getCollection(entity);
|
||||||
|
var list = builer!=null?collection.find(builer):collection.find();
|
||||||
|
for (E row : list) {
|
||||||
|
return row;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Pair<Page, List<E>> page(int page, int itemsPerPage) {
|
||||||
|
var collection = OrmContext.getOrmManager().getCollection(entity);
|
||||||
|
|
||||||
|
var p = Page.valueOf(page, itemsPerPage, collection.countDocuments());
|
||||||
|
|
||||||
|
var result = builer!=null?collection.find(builer):collection.find();
|
||||||
|
var list = new ArrayList<E>();
|
||||||
|
result
|
||||||
|
.skip(p.skipNum())
|
||||||
|
.limit(p.getItemsPerPage())
|
||||||
|
.forEach(new Consumer<IEntity<?>>() {
|
||||||
|
@Override
|
||||||
|
public void accept(IEntity<?> entity) {
|
||||||
|
list.add((E) entity);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return new Pair<>(p, list);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,17 +13,7 @@
|
|||||||
|
|
||||||
package com.zfoo.orm.model.query;
|
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.orm.model.entity.IEntity;
|
||||||
import com.zfoo.protocol.collection.CollectionUtils;
|
|
||||||
import com.zfoo.protocol.model.Pair;
|
|
||||||
import com.zfoo.protocol.util.StringUtils;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author jaysunxiao
|
* @author jaysunxiao
|
||||||
@@ -32,82 +22,7 @@ import java.util.function.Consumer;
|
|||||||
public class MongodbQuery implements IQuery {
|
public class MongodbQuery implements IQuery {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends IEntity<?>> List<E> queryAll(Class<E> entityClazz) {
|
public <E extends IEntity<?>> IQueryBuilder<E> builder(Class<E> entityClazz) {
|
||||||
var collection = OrmContext.getOrmManager().getCollection(entityClazz);
|
return new MongoQueryBuilder<E>(entityClazz);
|
||||||
var list = new ArrayList<E>();
|
|
||||||
collection.find().forEach(new Consumer<IEntity<?>>() {
|
|
||||||
@Override
|
|
||||||
public void accept(IEntity<?> entity) {
|
|
||||||
list.add((E) entity);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return list;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public <E extends IEntity<?>> List<E> queryFieldEqual(String fieldName, Object fieldValue, Class<E> entityClazz) {
|
|
||||||
if (fieldValue == null) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
var collection = OrmContext.getOrmManager().getCollection(entityClazz);
|
|
||||||
var list = new ArrayList<E>();
|
|
||||||
collection.find(Filters.eq(fieldName, fieldValue)).forEach(new Consumer<IEntity<?>>() {
|
|
||||||
@Override
|
|
||||||
public void accept(IEntity<?> entity) {
|
|
||||||
list.add((E) entity);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <E extends IEntity<?>> List<E> queryFieldLike(String fieldName, String fieldValue, Class<E> entityClazz) {
|
|
||||||
if (StringUtils.isBlank(fieldValue)) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
var collection = OrmContext.getOrmManager().getCollection((Class<? extends IEntity<?>>) entityClazz);
|
|
||||||
var list = new ArrayList<E>();
|
|
||||||
var regex = StringUtils.format("^{}.*", fieldValue);
|
|
||||||
collection.find(Filters.regex(fieldName, regex)).forEach((Consumer<IEntity<?>>) entity -> list.add((E) entity));
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <E extends IEntity<?>> List<E> queryFieldIn(String fieldName, List<?> fieldValueList, Class<E> entityClazz) {
|
|
||||||
if (CollectionUtils.isEmpty(fieldValueList)) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
|
|
||||||
var collection = OrmContext.getOrmManager().getCollection(entityClazz);
|
|
||||||
var list = new ArrayList<E>();
|
|
||||||
collection.find(Filters.in(fieldName, fieldValueList)).forEach(new Consumer<IEntity<?>>() {
|
|
||||||
@Override
|
|
||||||
public void accept(IEntity<?> entity) {
|
|
||||||
list.add((E) entity);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <E extends IEntity<?>> Pair<Page, List<E>> pageQuery(int page, int itemsPerPage, Class<E> entityClazz) {
|
|
||||||
var collection = OrmContext.getOrmManager().getCollection(entityClazz);
|
|
||||||
|
|
||||||
var p = Page.valueOf(page, itemsPerPage, collection.countDocuments());
|
|
||||||
|
|
||||||
var list = new ArrayList<E>();
|
|
||||||
collection.find()
|
|
||||||
.skip(p.skipNum())
|
|
||||||
.limit(p.getItemsPerPage())
|
|
||||||
.forEach(new Consumer<IEntity<?>>() {
|
|
||||||
@Override
|
|
||||||
public void accept(IEntity<?> entity) {
|
|
||||||
list.add((E) entity);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return new Pair<>(p, list);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -15,6 +15,7 @@ package com.zfoo.orm.query;
|
|||||||
|
|
||||||
import com.zfoo.orm.OrmContext;
|
import com.zfoo.orm.OrmContext;
|
||||||
import com.zfoo.orm.entity.UserEntity;
|
import com.zfoo.orm.entity.UserEntity;
|
||||||
|
import com.zfoo.orm.util.MongoIdUtils;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||||
@@ -30,14 +31,21 @@ public class QueryTest {
|
|||||||
@Test
|
@Test
|
||||||
public void queryAllTest() {
|
public void queryAllTest() {
|
||||||
var context = new ClassPathXmlApplicationContext("application.xml");
|
var context = new ClassPathXmlApplicationContext("application.xml");
|
||||||
var list = OrmContext.getQuery().queryAll(UserEntity.class);
|
|
||||||
|
var id = MongoIdUtils.getIncrementIdFromMongoDefault(UserEntity.class);
|
||||||
|
var entity = new UserEntity();
|
||||||
|
entity.setId(id);
|
||||||
|
entity.setC((int)id);
|
||||||
|
entity.setE("User_"+id);
|
||||||
|
OrmContext.getAccessor().insert(entity);
|
||||||
|
var list = OrmContext.getQuery(UserEntity.class).eq("e", "User_1").eq("f", null).queryAll();
|
||||||
System.out.println(list);
|
System.out.println(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void queryByFieldTest() {
|
public void queryByFieldTest() {
|
||||||
var context = new ClassPathXmlApplicationContext("application.xml");
|
var context = new ClassPathXmlApplicationContext("application.xml");
|
||||||
var list = OrmContext.getQuery().queryFieldEqual("a", 1, UserEntity.class);
|
var list = OrmContext.getQuery(UserEntity.class).eq("a", 1).queryAll();
|
||||||
System.out.println(list);
|
System.out.println(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user