mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-05-19 19:27:16 +00:00
@@ -17,7 +17,9 @@ import com.mongodb.client.MongoClient;
|
||||
import com.zfoo.orm.manager.IOrmManager;
|
||||
import com.zfoo.orm.manager.OrmManager;
|
||||
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.IQueryBuilder;
|
||||
import com.zfoo.protocol.util.ReflectionUtils;
|
||||
import com.zfoo.scheduler.SchedulerContext;
|
||||
import com.zfoo.scheduler.model.StopWatch;
|
||||
@@ -62,8 +64,8 @@ public class OrmContext implements ApplicationListener<ApplicationContextEvent>,
|
||||
return instance.accessor;
|
||||
}
|
||||
|
||||
public static IQuery getQuery() {
|
||||
return instance.query;
|
||||
public static <E extends IEntity<?>> IQueryBuilder getQuery(Class<E> entityClazz) {
|
||||
return instance.query.builder(entityClazz);
|
||||
}
|
||||
|
||||
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());
|
||||
|
||||
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));
|
||||
for (var entity : updateList) {
|
||||
var dbEntity = dbMap.get(entity.id());
|
||||
|
||||
@@ -14,9 +14,6 @@
|
||||
package com.zfoo.orm.model.query;
|
||||
|
||||
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
|
||||
*/
|
||||
public interface IQuery {
|
||||
|
||||
<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);
|
||||
|
||||
<E extends IEntity<?>> IQueryBuilder builder(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;
|
||||
|
||||
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 java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* @author jaysunxiao
|
||||
@@ -32,82 +22,7 @@ import java.util.function.Consumer;
|
||||
public class MongodbQuery implements IQuery {
|
||||
|
||||
@Override
|
||||
public <E extends IEntity<?>> List<E> queryAll(Class<E> entityClazz) {
|
||||
var collection = OrmContext.getOrmManager().getCollection(entityClazz);
|
||||
var list = new ArrayList<E>();
|
||||
collection.find().forEach(new Consumer<IEntity<?>>() {
|
||||
@Override
|
||||
public void accept(IEntity<?> entity) {
|
||||
list.add((E) entity);
|
||||
}
|
||||
});
|
||||
return list;
|
||||
public <E extends IEntity<?>> IQueryBuilder<E> builder(Class<E> entityClazz) {
|
||||
return new MongoQueryBuilder<E>(entityClazz);
|
||||
}
|
||||
|
||||
@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.entity.UserEntity;
|
||||
import com.zfoo.orm.util.MongoIdUtils;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
@@ -30,14 +31,21 @@ public class QueryTest {
|
||||
@Test
|
||||
public void queryAllTest() {
|
||||
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);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryByFieldTest() {
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user