文档章节

Titan Framework MongoDB深入理解3

 云季科技
发布于 10/22 15:33
字数 1135
阅读 4
收藏 0

在前两篇文章中,我们介绍了操作Mongo数据库的类型Curd和Finder,下面要理解的是框架内mongoDB操作的条件类型——MongoDBQueryCondition。

MongoDBQueryCondition是一个接口,规定了一些实现类需求方法,这个类有唯一的实现类MongoDBQueryConditionImpl,在实现类中,包含几个关键属性,分别是:

  1. String tableName
  2. Object condition
  3. Document conditionBson
  4. Int pageSize
  5. Int currentPage
  6. Document orderBy
  7. Class<?> clazz

tableName用于存放指定条件的表名,condition是一个用于实现类的内部类使用的属性,conditionBson用于存放用于内部类使用的Mongo节点类型,pageSize和currentPage大家应该不陌生,这两个属性用于存放分页查询的条件,orderBy用于存放排序的条件,clazz是一个用于内部类使用的类类型属性。在该实现类中,给出了pageSize,currentPage,tableName,clazz,condition,orderBy这些属性的get方法,用户可以通过get方法查询到当前查询条件对象的各个属性的状态。

下面讲解该类最重要的内部类成分,在这之前还有一点需要提一下的是,MongoDBQueryCondition接口中有一个静态方法Condition,该方法参数为一个函数,用户可以使用lambda轻松编写查询条件,该方法中创建了接口实现类的内部类Buidler,通过链式调用Builder内部的方法来添加,方法本身并不返回builder对象,因为内部通过java8的Consumer类的accept()忽略了进行传入参数函数并执行函数后获得的返回值,框架为该方法指定返回一个MongoDBQueryCondition对象。

内部类在上边已经提过,叫做Builder,在类中,它创建了一个它的外部类MongoDBQueryConditionImpl实例,内部有一个方法getCondition()会将该实例返回,上文说的MongoDBQueryCondition对象就是通过该方法获得。

类中的Table方法参数为Object对象,它将该对象的类名作为表名,并且用过该对象的类构造器获取该类的类类型作为类型属性,以确定条件中表的属性参数,它有一个重载方法,传递两个参数,分别是String类型的表名字和Class类类型,用户可以通过该重载方法添加不同于类名的表名的查询条件(如类名为A,但数据库表名为B)。

Page方法参数为两个int类型的参数,第一个参数表示当前页数,第二个参数表示取出数目,需要注意的是框架的分页已经实现完毕,不需要进行其他的计算,如果需要取出第3页数据,每页展示10条数据,那么参数应该传为(3,10),而不是(20,10)。

Condition方法参数为一个泛型类型,在使用TitanFrameWork之前,您的数据结构也许使用了DBObject而非Document的形式进行存储,Titan内部没有提供该形式的存储方式,但提供了读取该形式数据的方法,若在调用该方法之前没有调用Table方法,默认会使用该类名作为表名条件,查询表中符合条件的DBObject对象。

Condition有一个重载方法,传递两个参数,一个是String类型的key,表示查询条件key关键字,一个是Object类型的value,表示查询条件的value关键字,这个重载方法和上面的方法不同的地方在于这里使用了Document的形式读取数据,并且没有默认的表名称判断,需要用户显式调用Table指定查询的表名,框架会根据条件去查找表中符合"key":"value"的数据集合。如果value的类型为java.util.List,那么会判断为用户需要查询一键多值的情况,类似于$in查询条件。用户可以使用多个Condition来完成最终的符合条件查询。

OrderBy是一个排序方法,有两个参数类型,传递key和value,这里不再判断任何条件,用户可以根据业务需求和上面的方法组合成复杂的嵌套排序筛选出最终结果。

© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 12
码字总数 20298
作品 0
海淀
私信 提问
PHP与MongoDB:类库、框架与工具介绍

本文来自MongoDB官方,文中把PHP与MongoDB相关的类库、框架、工具做了汇总和介绍,如果你正使用PHP并在关注MongoDB,那么这篇文章可能对你有用。 架构相关 CakePHP CakePHP是一个非常受欢迎的...

kisshua
2012/08/31
0
0
Titan Framework MongoDB深入理解1

在TitanFrameWork框架中,已经集成了MongoDB的各个功能,现在我们对框架内部的一些重要类进行分析与解读。 MongoDBConverter 在Titan框架中,比较重要的一个接口就是MongoDBConverter,它是作...

云季科技
10/18
0
0
MapReduce初探之一~~基于Mongodb实现标签统计

MapReduce 是一种编程模型,是 Google 提出的一种软件架构,主要应用于分布式系统上。Google对其原始的定义是“ MapReduce is a framework for computing certain kinds of distributable pr...

zhiweiofli
2013/03/06
0
5
阿里专家视频课限时抢!精讲+实操12节课学懂MongoDB数据库!

想要学习MongoDB却不知道如何入门? 漫天的培训课程却无一讲解实战案例? 云栖社区联手阿里云大学独家出品—— 阿里云MongoDB技术负责人、MongoDB中文社区联席主席联合操刀 12期精讲+实操,全...

a独家记忆
07/12
0
0
在Windows环境下MongoDB搭建和简单操作

一,安装mongoDB 1,解压mongodb-win32-i386-1.8.2至E:MyProgrammongodb-win32-i386-1.8.2(你可以按照自己的路径来,路径中最好不要有空格,要不然麻烦) 2,新建文件夹C:DATADB,这是mongoDB...

徐文瑞
2013/05/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring应用学习——AOP

1. AOP 1. AOP:即面向切面编程,采用横向抽取机制,取代了传统的继承体系的重复代码问题,如下图所示,性能监控、日志记录等代码围绕业务逻辑代码,而这部分代码是一个高度重复的代码,也就...

江左煤郎
今天
3
0
eclipse的版本

Eclipse各版本代号一览表 Eclipse的设计思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。 Eclipse基本内核包括:图形API(SWT/Jface),Java开发环...

mdoo
今天
1
0
SpringBoot源码:启动过程分析(一)

本文主要分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 还是老套路,先把分析过程的时序图摆出来:时序图-SpringBoot2.10启动分析 二.源码分析 首...

Jacktanger
今天
4
0
小白带你认识netty(二)之netty服务端启动(上)

上一章 中的标准netty启动代码中,ServerBootstrap到底是如何启动的呢?这一章我们来瞅下。 server.group(bossGroup, workGroup);server.channel(NioServerSocketChannel.class).optio...

天空小小
今天
3
0
聊聊storm trident batch的分流与聚合

序 本文主要研究一下storm trident batch的分流与聚合 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout) .p......

go4it
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部