动态集合处理器
在数据库应用程序开发中,我们有时需要根据不同的条件查询不同的集合。Mongo-Plus 提供了一个动态集合处理器 CollectionNameHandler,它允许我们在运行时动态地改变 MongoDB 语句中的集合名,这对于处理分表逻辑非常有用
CollectionNameHandler
- 动态集合处理接口
- String dynamicCollectionName(ExecuteMethodEnum,Object[],MongoNamespace): 参数分别对应:执行的方法枚举、参数、命名空间
示例
实现 CollectionNameHandler 接口,创建一个动态集合处理器,并且注册为Bean。在这个例子中,我们判断,如果查询参数中包含userName
参数,并且userName
参数值为张三
,则将集合名称修改为user_zhangsan
。
java
@Component
public class CustomCollectionNameHandler implements CollectionNameHandler {
@Override
public String dynamicCollectionName(ExecuteMethodEnum executeMethodEnum, Object[] source, MongoNamespace namespace) {
if (executeMethodEnum == ExecuteMethodEnum.QUERY){
// 具体类型参数转换参考com.anwen.mongo.execute.Execute接口,
// 比如查询(executeQuery(Bson, BasicDBObject, BasicDBObject, Class<T>, MongoCollection<Document>)),
// 对应的第0个参数类型为Bson
Bson bson = (Bson) source[0];
BsonString userName = bson.toBsonDocument().getString("userName",new BsonString(""));
// 如果userName == 张三
if (userName.getValue().equals("张三")) {
//返回新集合名为:user_zhangsan
return "user_zhangsan";
}
}
//条件不满足则返回原名称
return namespace.getCollectionName();
}
}