赞
踩
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.12.10</version>
</dependency>
package com.detail.util; import java.util.ArrayList; import java.util.List; import org.bson.Document; import org.bson.conversions.Bson; import com.mongodb.MongoClient; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Filters; //mongodb 连接数据库工具类 public class MongoDBUtil { //不通过认证获取连接数据库对象 public static MongoDatabase getConnect(){ //连接到 mongodb 服务 MongoClient mongoClient = new MongoClient("服务器ip", 27017); //连接到数据库 MongoDatabase mongoDatabase = mongoClient.getDatabase("test"); //返回连接数据库对象 return mongoDatabase; } //需要密码认证方式连接 public static MongoDatabase getAuthConnect(){ List<ServerAddress> adds = new ArrayList<>(); //ServerAddress()两个参数分别为 服务器地址 和 端口 ServerAddress serverAddress = new ServerAddress("服务器ip", 27017); adds.add(serverAddress); List<MongoCredential> credentials = new ArrayList<>(); //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码 MongoCredential mongoCredential = MongoCredential.createScramSha1Credential("root", "test", "root".toCharArray()); credentials.add(mongoCredential); //通过连接认证获取MongoDB连接 MongoClient mongoClient = new MongoClient(adds, credentials); //连接到数据库 MongoDatabase mongoDatabase = mongoClient.getDatabase("test"); //返回连接数据库对象 return mongoDatabase; } //插入一个文档 public void insertOneTest(){ //获取数据库连接对象 MongoDatabase mongoDatabase = MongoDBUtil.getConnect(); //获取集合 MongoCollection<Document> collection = mongoDatabase.getCollection("user"); //要插入的数据 Document document = new Document("name","张三") .append("sex", "男") .append("age", 18); //插入一个文档 collection.insertOne(document); } //插入多个文档 public void insertManyTest(){ //获取数据库连接对象 MongoDatabase mongoDatabase = MongoDBUtil.getConnect(); //获取集合 MongoCollection<Document> collection = mongoDatabase.getCollection("user"); //要插入的数据 List<Document> list = new ArrayList<>(); for(int i = 1; i <= 3; i++) { Document document = new Document("name", "张三") .append("sex", "男") .append("age", 18); list.add(document); } //插入多个文档 collection.insertMany(list); } //删除与筛选器匹配的单个文档 public void deleteOneTest(){ //获取数据库连接对象 MongoDatabase mongoDatabase = MongoDBUtil.getConnect(); //获取集合 MongoCollection<Document> collection = mongoDatabase.getCollection("user"); //申明删除条件 Bson filter = Filters.eq("age",18); //删除与筛选器匹配的单个文档 collection.deleteOne(filter); } //删除与筛选器匹配的所有文档 public void deleteManyTest(){ //获取数据库连接对象 MongoDatabase mongoDatabase = MongoDBUtil.getConnect(); //获取集合 MongoCollection<Document> collection = mongoDatabase.getCollection("user"); //申明删除条件 Bson filter = Filters.eq("age",18); //删除与筛选器匹配的所有文档 collection.deleteMany(filter); } //修改单个文档 public void updateOneTest(){ //获取数据库连接对象 MongoDatabase mongoDatabase = MongoDBUtil.getConnect(); //获取集合 MongoCollection<Document> collection = mongoDatabase.getCollection("user"); //修改过滤器 Bson filter = Filters.eq("name", "张三"); //指定修改的更新文档 Document document = new Document("$set", new Document("age", 100)); //修改单个文档 collection.updateOne(filter, document); } //修改多个文档 public void updateManyTest(){ //获取数据库连接对象 MongoDatabase mongoDatabase = MongoDBUtil.getConnect(); //获取集合 MongoCollection<Document> collection = mongoDatabase.getCollection("user"); //修改过滤器 Bson filter = Filters.eq("name", "张三"); //指定修改的更新文档 Document document = new Document("$set", new Document("age", 100)); //修改多个文档 collection.updateMany(filter, document); } //查找集合中的所有文档 public void findTest(){ //获取数据库连接对象 // MongoDatabase mongoDatabase = MongoDBUtil.getAuthConnect(); MongoDatabase mongoDatabase = MongoDBUtil.getConnect(); //获取集合 MongoCollection<Document> collection = mongoDatabase.getCollection("customer"); //查找集合中的所有文档 FindIterable findIterable = collection.find(); MongoCursor cursor = findIterable.iterator(); while (cursor.hasNext()) { System.out.println(cursor.next()); } } //指定查询过滤器查询 public void FilterfindTest(){ //获取数据库连接对象 MongoDatabase mongoDatabase = MongoDBUtil.getConnect(); //获取集合 MongoCollection<Document> collection = mongoDatabase.getCollection("user"); //指定查询过滤器 Bson filter = Filters.eq("name", "张三"); //指定查询过滤器查询 FindIterable findIterable = collection.find(filter); MongoCursor cursor = findIterable.iterator(); while (cursor.hasNext()) { System.out.println(cursor.next()); } } //取出查询到的第一个文档 public void findFirstTest(){ //获取数据库连接对象 MongoDatabase mongoDatabase = MongoDBUtil.getConnect(); //获取集合 MongoCollection<Document> collection = mongoDatabase.getCollection("user"); //查找集合中的所有文档 FindIterable findIterable = collection.find(); //取出查询到的第一个文档 Document document = (Document) findIterable.first(); //打印输出 System.out.println(document); } public static void main(String[] args) { MongoDBUtil mongodb = new MongoDBUtil(); mongodb.findTest(); } }
懒得搭建,需要的话进扣扣裙索要,783092701
package com.yhzq.dao.repository; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Component; import com.yhzq.dao.entity.Customer; import java.util.List; /** * <p>Title: 客户数据访问服务</p> * <p>Description:抽象出接口层,目的是为了自定义规范; * 并且未声明的,使用时,父类的也能直接使用 </p> * @author wangmoumo * @myblog www.681vip.com * @date 2022年10月18日 */ public interface BaseRepository extends MongoRepository<Customer, String> { Customer findByFirstName(String firstName); List<Customer> findByLastName(String lastName); }
package com.yhzq.service; import org.springframework.data.domain.Example; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import com.yhzq.dao.entity.Customer; import com.yhzq.dao.repository.BaseRepository; import javax.annotation.Resource; import java.util.List; /** * <p>Title: CustomerService.java</p> * <p>Description: service操作mongodb</p> * @author wangmoumo * @myblog www.681vip.com * @date 2022年10月18日 */ @Service public class CustomerService{ @Resource private BaseRepository repository; /** * 保存客户 * @param customer 客户 * 第一种使用save的方式修改,一般这种只能修改单个。 * 这种修改的方式是通过id去修改,如果id不存在就新增一个, * 存在就修改为新传入的数据 */ public List<Customer> saveAll(Iterable<Customer> iterable) { return repository.saveAll(iterable); } /** * 保存客户 * @param customer 客户 */ public Customer save(Customer customer) { Customer save = repository.save(customer); return save; } /** * 删除所有的客户 */ public void deleteAll() { repository.deleteAll(); } /** * 删除所有的客户 */ public void deleteAll(Customer customer) { repository.delete(customer); } /** * 删除所有的客户 */ public void deleteAll(Iterable<? extends Customer> entities) { repository.deleteAll(entities); } /** * 删除所有的客户 */ public void deleteById(String id) { repository.deleteById(id); } /** * 查询所有客户列表 * @return 客户列表 */ public List<Customer> findAll() { return repository.findAll(); } /** * 查询所有客户列表 * @return 客户列表 */ public Iterable<Customer> findAll(Sort sort) { return repository.findAll(sort); } /** * 查询所有客户列表 * @return 客户列表 */ public Iterable<Customer> findAll(Example<Customer> example) { return repository.findAll(example); } /** * 查询所有客户列表 * @return 客户列表 */ public Iterable<Customer> findAllById(Iterable<String> ids) { return repository.findAllById(ids); } /** * 通过名查找某个客户 * @param firstName * @return */ public Customer findByFirstName(String firstName) { return repository.findByFirstName(firstName); } /** * 通过姓查找客户列表 * @param lastName * @return */ public List<Customer> findByLastName(String lastName) { return repository.findByLastName(lastName); } }
package com.yhzq.controller; import java.util.List; import javax.annotation.Resource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.yhzq.dao.entity.Customer; import com.yhzq.service.CustomerService; @RestController public class CustomerController{ private static final Logger log = LoggerFactory.getLogger(CustomerController.class); @Resource private CustomerService service; @RequestMapping("/customer") public Customer save(){ Customer customer = new Customer("wang","baoluo"); Customer save = service.save(customer); log.info("save:"+save); return save; } @RequestMapping("/list") public List<Customer> findAll() { List<Customer> findAll = service.findAll(); log.info("findAll:"+findAll); return findAll; } }
懒得搭建,需要的话进扣扣裙索要,783092701
package com.example.dao; import com.example.entity.MongodbTest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Component; /** * create by wbl * 2023/02/08 */ @Component public class MongodbTestDao { @Autowired private MongoTemplate mongoTemplate; /** * 创建对象 * @param test */ public void save(MongodbTest test) { mongoTemplate.insert(test); } /** * 根据名字去查询对象 * @param name * @return */ public MongodbTest findOne(String name) { Query query = new Query(Criteria.where("name").is(name)); MongodbTest mgt = mongoTemplate.findOne(query,MongodbTest.class); return mgt; } /** * 修改对象 * @param test */ public void updateMongoDb(MongodbTest test) { Query query = new Query(Criteria.where("id").is(test.getId())); Update update = new Update().set("age",test.getAge()).set("name",test.getName()); mongoTemplate.updateFirst(query,update,MongodbTest.class); } /** * 删除对象 * @param id */ public void removeMongodb(String id) { Query query = new Query(Criteria.where("id").is(id)); mongoTemplate.remove(query,MongodbTest.class); } }
package com.example.service; import com.example.dao.MongodbTestDao; import com.example.entity.MongodbTest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * create by wbl * 2023/02/08 */ @Service public class MongodbTestService { @Autowired private MongodbTestDao mongodbTestDao; /** * 增加的方法 */ public void save(){ MongodbTest mongodbTest = new MongodbTest(); mongodbTest.setId(1); mongodbTest.setAge(19); mongodbTest.setName("招投标"); mongodbTestDao.save(mongodbTest); } /** * 修改的方法 */ public void update() { MongodbTest mongodbTest = new MongodbTest(); mongodbTest.setId(1); mongodbTest.setAge(20); mongodbTest.setName("国网商城"); mongodbTestDao.updateMongoDb(mongodbTest); } }
package com.example.controller; import com.example.service.MongodbTestService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * create by wsh * 2019/10/30 */ @RestController public class MongodbTestController { @Autowired private MongodbTestService mongodbTestService; /** * 增加对象 */ @GetMapping("/save") public void save() { mongodbTestService.save(); } @GetMapping("/update") public void update() { mongodbTestService.update(); } @GetMapping("/delete") public void update2() { mongodbTestService.update(); } }
/** *Query query = new Query(); * query.addCriteria(Criteria.where("name").is(name)); * @param key * @return */ //把多个条件组合在一起 public static Criteria where(String key) { return new Criteria(key); } //封装查询条件 /**例如: * *创建匹配器,即如何使用查询条件 * ExampleMatcher matcher = ExampleMatcher.matching() //构建对象 * .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询 * .withIgnoreCase(true) //改变默认大小写忽略方式:忽略大小写 * .withMatcher("name", ExampleMatcher.GenericPropertyMatchers.contains()) //标题采用“包含匹配”的方式查询 * .withIgnorePaths("pageNum", "pageSize"); //忽略属性,不参与查询 *创建实例 *Example<Student> example = Example.of(student, matcher); *Query query = new Query(Criteria.byExample(example)); **/ public static Criteria byExample(Object example) { return byExample(Example.of(example)); } //封装查询条件 public static Criteria byExample(Example<?> example) { return (new Criteria()).alike(example); } //匹配文档 public static Criteria matchingDocumentStructure(MongoJsonSchema schema) { return (new Criteria()).andDocumentStructureMatches(schema); } //并且 public Criteria and(String key) { return new Criteria(this.criteriaChain, key); } //是 public Criteria is(@Nullable Object o) { if (!this.isValue.equals(NOT_SET)) { throw new InvalidMongoDbApiUsageException("Multiple 'is' values declared. You need to use 'and' with multiple criteria"); } else if (this.lastOperatorWasNot()) { throw new InvalidMongoDbApiUsageException("Invalid query: 'not' can't be used with 'is' - use 'ne' instead."); } else { this.isValue = o; return this; } } //用于匹配正则表达式 private boolean lastOperatorWasNot() { return !this.criteria.isEmpty() && "$not".equals(this.criteria.keySet().toArray()[this.criteria.size() - 1]); } //不等于 public Criteria ne(@Nullable Object o) { this.criteria.put("$ne", o); return this; } //小于 public Criteria lt(Object o) { this.criteria.put("$lt", o); return this; } //小于等于 public Criteria lte(Object o) { this.criteria.put("$lte", o); return this; } //大于 public Criteria gt(Object o) { this.criteria.put("$gt", o); return this; } //大于等于 public Criteria gte(Object o) { this.criteria.put("$gte", o); return this; } //包含 public Criteria in(Object... o) { if (o.length > 1 && o[1] instanceof Collection) { throw new InvalidMongoDbApiUsageException("You can only pass in one argument of type " + o[1].getClass().getName()); } else { this.criteria.put("$in", Arrays.asList(o)); return this; } } //包含 public Criteria in(Collection<?> c) { this.criteria.put("$in", c); return this; } //与in相反 public Criteria nin(Object... o) { return this.nin((Collection)Arrays.asList(o)); } //与in相反 public Criteria nin(Collection<?> o) { this.criteria.put("$nin", o); return this; } //取模(求余)运算 ,即:key对应的值%value==remainder(求余是否等于remainder) public Criteria mod(Number value, Number remainder) { List<Object> l = new ArrayList(); l.add(value); l.add(remainder); this.criteria.put("$mod", l); return this; } //key键对应的集合包含col(all是包含关系,in是被包含关系) public Criteria all(Object... o) { return this.all((Collection)Arrays.asList(o)); } public Criteria all(Collection<?> o) { this.criteria.put("$all", o); return this; } //匹配key所对应的集合的元素的指定数量(!!!不能进行像<5之类的范围匹配) public Criteria size(int s) { this.criteria.put("$size", s); return this; } //查询字段是否存在(true:存在,false:不存在) public Criteria exists(boolean b) { this.criteria.put("$exists", b); return this; } //基于 bson type来匹配一个元素的类型,像是按照类型ID来匹配 public Criteria type(int t) { this.criteria.put("$type", t); return this; } public Criteria type(Type... types) { Assert.notNull(types, "Types must not be null!"); Assert.noNullElements(types, "Types must not contain null."); this.criteria.put("$type", Arrays.asList(types).stream().map(Type::value).collect(Collectors.toList())); return this; } //取反 public Criteria not() { return this.not((Object)null); } private Criteria not(@Nullable Object value) { this.criteria.put("$not", value); return this; } //模糊查询用 public Criteria regex(String re) { return this.regex(re, (String)null); } public Criteria regex(String re, @Nullable String options) { return this.regex(this.toPattern(re, options)); } public Criteria regex(Pattern pattern) { Assert.notNull(pattern, "Pattern must not be null!"); if (this.lastOperatorWasNot()) { return this.not(pattern); } else { this.isValue = pattern; return this; } } public Criteria regex(BsonRegularExpression regex) { if (this.lastOperatorWasNot()) { return this.not(regex); } else { this.isValue = regex; return this; } } // private Pattern toPattern(String regex, @Nullable String options) { Assert.notNull(regex, "Regex string must not be null!"); return Pattern.compile(regex, options == null ? 0 : BSON.regexFlags(options)); } public Criteria withinSphere(Circle circle) { Assert.notNull(circle, "Circle must not be null!"); this.criteria.put("$geoWithin", new GeoCommand(new Sphere(circle))); return this; } public Criteria within(Shape shape) { Assert.notNull(shape, "Shape must not be null!"); this.criteria.put("$geoWithin", new GeoCommand(shape)); return this; } //输出接近某一地理位置的有序文档 public Criteria near(Point point) { Assert.notNull(point, "Point must not be null!"); this.criteria.put("$near", point); return this; } //指定地理空间查询从最近到最远返回文档的点。 MongoDB 使用球面几何计算$nearSphere的距离 public Criteria nearSphere(Point point) { Assert.notNull(point, "Point must not be null!"); this.criteria.put("$nearSphere", point); return this; } // public Criteria intersects(GeoJson geoJson) { Assert.notNull(geoJson, "GeoJson must not be null!"); this.criteria.put("$geoIntersects", geoJson); return this; } //创建一个地理空间标准,与nearSphere一起使用 public Criteria maxDistance(double maxDistance) { if (!this.createNearCriteriaForCommand("$near", "$maxDistance", maxDistance) && !this.createNearCriteriaForCommand("$nearSphere", "$maxDistance", maxDistance)) { this.criteria.put("$maxDistance", maxDistance); return this; } else { return this; } } //mongodb地理空间计算逻辑 public Criteria minDistance(double minDistance) { if (!this.createNearCriteriaForCommand("$near", "$minDistance", minDistance) && !this.createNearCriteriaForCommand("$nearSphere", "$minDistance", minDistance)) { this.criteria.put("$minDistance", minDistance); return this; } else { return this; } } //匹配查询 public Criteria elemMatch(Criteria c) { this.criteria.put("$elemMatch", c.getCriteriaObject()); return this; } //使用给定对象作为模式创建条件 public Criteria alike(Example<?> sample) { this.criteria.put("$example", sample); this.criteriaChain.add(this); return this; } //创建一个criteria ($jsonSchema),根据MongoJsonSchema定义的给定结构匹配文档 public Criteria andDocumentStructureMatches(MongoJsonSchema schema) { Assert.notNull(schema, "Schema must not be null!"); Criteria schemaCriteria = new Criteria(); schemaCriteria.criteria.putAll(schema.toDocument()); return this.registerCriteriaChainElement(schemaCriteria); } public Criteria.BitwiseCriteriaOperators bits() { return new Criteria.BitwiseCriteriaOperatorsImpl(this); } //或者 /** * Aggregation agg = Aggregation.newAggregation( * Aggregation.match(new Criteria() * .andOperator(Criteria.where("onlineTime").gt(new Date())) * .orOperator( Criteria.where("offlineTime").gt(new Date()) * ,Criteria.where("offlineTime").exists(false) )) * @param criteria * @return */ public Criteria orOperator(Criteria... criteria) { BasicDBList bsonList = this.createCriteriaList(criteria); return this.registerCriteriaChainElement((new Criteria("$or")).is(bsonList)); } //非或者 public Criteria norOperator(Criteria... criteria) { BasicDBList bsonList = this.createCriteriaList(criteria); return this.registerCriteriaChainElement((new Criteria("$nor")).is(bsonList)); } //并且 public Criteria andOperator(Criteria... criteria) { BasicDBList bsonList = this.createCriteriaList(criteria); return this.registerCriteriaChainElement((new Criteria("$and")).is(bsonList)); } private Criteria registerCriteriaChainElement(Criteria criteria) { if (this.lastOperatorWasNot()) { throw new IllegalArgumentException("operator $not is not allowed around criteria chain element: " + criteria.getCriteriaObject()); } else { this.criteriaChain.add(criteria); return this; } } @Nullable public String getKey() { return this.key; } public Document getCriteriaObject() { if (this.criteriaChain.size() == 1) { return ((Criteria)this.criteriaChain.get(0)).getSingleCriteriaObject(); } else if (CollectionUtils.isEmpty(this.criteriaChain) && !CollectionUtils.isEmpty(this.criteria)) { return this.getSingleCriteriaObject(); } else { Document criteriaObject = new Document(); Iterator var2 = this.criteriaChain.iterator(); while(var2.hasNext()) { Criteria c = (Criteria)var2.next(); Document document = c.getSingleCriteriaObject(); Iterator var5 = document.keySet().iterator(); while(var5.hasNext()) { String k = (String)var5.next(); this.setValue(criteriaObject, k, document.get(k)); } } return criteriaObject; } } protected Document getSingleCriteriaObject() { Document document = new Document(); boolean not = false; Iterator var3 = this.criteria.entrySet().iterator(); while(true) { while(var3.hasNext()) { Entry<String, Object> entry = (Entry)var3.next(); String key = (String)entry.getKey(); Object value = entry.getValue(); if (requiresGeoJsonFormat(value)) { value = new Document("$geometry", value); } if (not) { Document notDocument = new Document(); notDocument.put(key, value); document.put("$not", notDocument); not = false; } else if ("$not".equals(key) && value == null) { not = true; } else { document.put(key, value); } } if (!StringUtils.hasText(this.key)) { if (not) { return new Document("$not", document); } return document; } Document queryCriteria = new Document(); if (!NOT_SET.equals(this.isValue)) { queryCriteria.put(this.key, this.isValue); queryCriteria.putAll(document); } else { queryCriteria.put(this.key, document); } return queryCriteria; } } private BasicDBList createCriteriaList(Criteria[] criteria) { BasicDBList bsonList = new BasicDBList(); Criteria[] var3 = criteria; int var4 = criteria.length; for(int var5 = 0; var5 < var4; ++var5) { Criteria c = var3[var5]; bsonList.add(c.getCriteriaObject()); } return bsonList; } private void setValue(Document document, String key, Object value) { Object existing = document.get(key); if (existing == null) { document.put(key, value); } else { throw new InvalidMongoDbApiUsageException("Due to limitations of the com.mongodb.BasicDocument, you can't add a second '" + key + "' expression specified as '" + key + " : " + value + "'. Criteria already contains '" + key + " : " + existing + "'."); } } private boolean createNearCriteriaForCommand(String command, String operation, double maxDistance) { if (!this.criteria.containsKey(command)) { return false; } else { Object existingNearOperationValue = this.criteria.get(command); if (existingNearOperationValue instanceof Document) { ((Document)existingNearOperationValue).put(operation, maxDistance); return true; } else if (existingNearOperationValue instanceof GeoJson) { Document dbo = (new Document("$geometry", existingNearOperationValue)).append(operation, maxDistance); this.criteria.put(command, dbo); return true; } else { return false; } } } public boolean equals(Object obj) { if (this == obj) { return true; } else if (obj != null && this.getClass().equals(obj.getClass())) { Criteria that = (Criteria)obj; if (this.criteriaChain.size() != that.criteriaChain.size()) { return false; } else { for(int i = 0; i < this.criteriaChain.size(); ++i) { Criteria left = (Criteria)this.criteriaChain.get(i); Criteria right = (Criteria)that.criteriaChain.get(i); if (!this.simpleCriteriaEquals(left, right)) { return false; } } return true; } } else { return false; } } private boolean simpleCriteriaEquals(Criteria left, Criteria right) { boolean keyEqual = left.key == null ? right.key == null : left.key.equals(right.key); boolean criteriaEqual = left.criteria.equals(right.criteria); boolean valueEqual = this.isEqual(left.isValue, right.isValue); return keyEqual && criteriaEqual && valueEqual; } //判断是否相等 private boolean isEqual(Object left, Object right) { if (left == null) { return right == null; } else if (Pattern.class.isInstance(left)) { if (!Pattern.class.isInstance(right)) { return false; } else { Pattern leftPattern = (Pattern)left; Pattern rightPattern = (Pattern)right; return leftPattern.pattern().equals(rightPattern.pattern()) && leftPattern.flags() == rightPattern.flags(); } } else { return ObjectUtils.nullSafeEquals(left, right); } } public int hashCode() { int result = 17; int result = result + ObjectUtils.nullSafeHashCode(this.key); result += this.criteria.hashCode(); result += ObjectUtils.nullSafeHashCode(this.isValue); return result; } private static boolean requiresGeoJsonFormat(Object value) { return value instanceof GeoJson || value instanceof GeoCommand && ((GeoCommand)value).getShape() instanceof GeoJson; } private static class BitwiseCriteriaOperatorsImpl implements Criteria.BitwiseCriteriaOperators { private final Criteria target; BitwiseCriteriaOperatorsImpl(Criteria target) { this.target = target; } public Criteria allClear(int numericBitmask) { return this.numericBitmask("$bitsAllClear", numericBitmask); } public Criteria allClear(String bitmask) { return this.stringBitmask("$bitsAllClear", bitmask); } public Criteria allClear(List<Integer> positions) { return this.positions("$bitsAllClear", positions); } public Criteria allSet(int numericBitmask) { return this.numericBitmask("$bitsAllSet", numericBitmask); } public Criteria allSet(String bitmask) { return this.stringBitmask("$bitsAllSet", bitmask); } public Criteria allSet(List<Integer> positions) { return this.positions("$bitsAllSet", positions); } public Criteria anyClear(int numericBitmask) { return this.numericBitmask("$bitsAnyClear", numericBitmask); } public Criteria anyClear(String bitmask) { return this.stringBitmask("$bitsAnyClear", bitmask); } public Criteria anyClear(List<Integer> positions) { return this.positions("$bitsAnyClear", positions); } public Criteria anySet(int numericBitmask) { return this.numericBitmask("$bitsAnySet", numericBitmask); } public Criteria anySet(String bitmask) { return this.stringBitmask("$bitsAnySet", bitmask); } public Criteria anySet(List<Integer> positions) { return this.positions("$bitsAnySet", positions); } private Criteria positions(String operator, List<Integer> positions) { Assert.notNull(positions, "Positions must not be null!"); Assert.noNullElements(positions.toArray(), "Positions must not contain null values."); this.target.criteria.put(operator, positions); return this.target; } private Criteria stringBitmask(String operator, String bitmask) { Assert.hasText(bitmask, "Bitmask must not be null!"); this.target.criteria.put(operator, new Binary(Base64Utils.decodeFromString(bitmask))); return this.target; } private Criteria numericBitmask(String operator, int bitmask) { this.target.criteria.put(operator, bitmask); return this.target; } } public interface BitwiseCriteriaOperators { Criteria allClear(int var1); Criteria allClear(String var1); Criteria allClear(List<Integer> var1); Criteria allSet(int var1); Criteria allSet(String var1); Criteria allSet(List<Integer> var1); Criteria anyClear(int var1); Criteria anyClear(String var1); Criteria anyClear(List<Integer> var1); Criteria anySet(int var1); Criteria anySet(String var1); Criteria anySet(List<Integer> var1); } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。