andOperator方法
它的机制是:新建一个criteria对象放到当前criteria对象的criteriaChain属性中。
关于这个新建的criteria对象:
它的key属性是”$and”,
它的isValue值比较特别,是一个list集合,集合中是dbObject对象。
dbObject对象由来:
此方法会传进来一个(或多个)criteria对象,首先会遍历这个对象的criteriaChain属性,这样就可以得到它的全部的criteria对象,即关于多个属性的条件,关于每一个属性的条件,都会生成一个dbObjce对象,多个属性就会得到多个dbObject对象,这个对象相当于一个map集合,它的键值就是属性名,也就是criteria对象的key值,它的值是一个dbObject对象。这个对象的结构是:key-value、map或者是key--map,
(个人认为前一种情况中的map应该为空,也就是说要么是key--value或者是key--map,因为key--value代表key是什么,而key--map表示key的约束,比如取值范围3<key<4,这样的形式存到map中就是两组值,一个表示大于3,一个表示小于4)
也就是说对应于多个属性的约束条件,会生成多个dbObject 对象,对象的值就是key--value或者key--map。然后又有一个新的dbObject对象把这些dbObject对象整合到一起,这个总的dbObject对象就是方法参数中的那个criteria对象对应生成的,如果传入的是多个criteria对象,那么就会产生多个dbObject,然后把这些dbObject放到list集合中,这个list就是那个isValue的值。
PS:
1.此对象中的criteriachain属性中可能包含着好几个属性的约束条件,对应于每一个属性,都会有一个criteria对象,criteria对象的属性:key,isValue,
map集合都是描述当前某个条件的,它的criteriaChain属性就是把好多个属性封装到一起.
2.封装key--value或者key--map的那个dbObject对象中应该只有一组数据,因为key不能重复,一个criteria对应一个dbObject,dbObject中的键值就是criteria的key值,而criteria只有一个key值。
3.DBObject是一个接口,这个接口的实现类basicDBObject实现了map接口,虽然它不是一个map,但它里面定义了一些针对map集合的操作。
概述过程是:
一个criteria对象,它的key是”$and”,它的isValue是一个list集合,
List集合中放的是dbObject对象,dbObject对象中有一个map集合,集合的每一个键名对应一个属性名(实体类的属性,如age属性),它的值就是criteria对象的map或者isValue的值。
其他的如:orOperator和notOperator是一样的。