在前两篇文章中,咱们介绍了操做Mongo数据库的类型Curd和Finder,下面要理解的是框架内mongoDB操做的条件类型——MongoDBQueryCondition。java
MongoDBQueryCondition是一个接口,规定了一些实现类需求方法,这个类有惟一的实现类MongoDBQueryConditionImpl,在实现类中,包含几个关键属性,分别是:数据库
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)。ui
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,这里再也不判断任何条件,用户能够根据业务需求和上面的方法组合成复杂的嵌套排序筛选出最终结果。get