网站建设有哪些问题,精美网站源码下载,北京seo技术,网站建设相关MongoDB支持包含一系列功能#xff1a;Spring配置支持基于Java的configuration类或Mongo驱动程序实例和副本集的XML命名空间。MongoTemplate帮助类#xff0c;在执行常见的Mongo操作时提高生产力。包括文档和POJO之间的集成对象映射。将异常转换为Spring的可移植数据访问异常…MongoDB支持包含一系列功能Spring配置支持基于Java的configuration类或Mongo驱动程序实例和副本集的XML命名空间。MongoTemplate帮助类在执行常见的Mongo操作时提高生产力。包括文档和POJO之间的集成对象映射。将异常转换为Spring的可移植数据访问异常层次结构。与Spring的转换服务集成的功能丰富的对象映射。基于注释的映射元数据可扩展以支持其他元数据格式。持久性和映射生命周期事件。基于Java的查询、标准和更新DSL。存储库接口的自动实现包括对自定义查找器方法的支持。QueryDSL集成以支持类型安全查询。对JPA实体的跨存储持久性支持其字段透明地持久化并使用MongoDB检索已弃用-将在不替换的情况下删除。地理空间整合。对于大多数任务您应该使用MongoTemplate或Repository支持这两者都利用了丰富的映射功能。MongoTemplate是寻找访问功能的地方例如递增计数器或特别的CRUD操作。MongoTemplate还提供了回调方法这样您就可以很容易地获得底层API工件如com.mongodb.client.mongodb以便与mongodb直接通信。各种API工件的命名约定的目标是将它们复制到基础MongoDB Java驱动程序中这样您就可以轻松地将现有知识映射到Spring API上。一、版本依赖关系Spring Data Release TrainSpring Data MongoDBDriver VersionServer Version2022.04.0.x4.7.x6.0.x2021.23.4.x4.6.x5.0.x2021.13.3.x4.4.x5.0.x2021.03.2.x4.1.x4.4.x2020.03.1.x4.1.x4.4.xNeumann3.0.x4.0.x4.4.xMoore2.2.x3.11.x/Reactive Streams 1.12.x4.2.xLovelace2.1.x3.8.x/Reactive Streams 1.9.x4.0.x二、入门1、引入依赖pom.xmldependencies!-- other dependency elements omitted --dependencygroupIdorg.springframework.data/groupIdartifactIdspring-data-mongodb/artifactIdversion4.0.3/version/dependency/dependencies2、您可能还想将日志记录级别设置为DEBUG以查看一些附加信息。为此请编辑log4j.properties文件以包含以下内容log4j.category.org.springframework.data.mongodbDEBUG
log4j.appender.stdout.layout.ConversionPattern%d{ABSOLUTE} %5p %40.40c:%4L - %m%n
3、然后您可以创建一个Person类来持久化package org.spring.mongodb.example;public class Person {private String id;private String name;private int age;public Person(String name, int age) {this.name name;this.age age;}public String getId() {return id;}public String getName() {return name;}public int getAge() {return age;}Overridepublic String toString() {return Person [id id , name name , age age ];}
}4、定义连接配置类Configuration
public class AppConfig {/** Use the standard Mongo driver API to create a com.mongodb.client.MongoClient instance.*/public Bean MongoClient mongoClient() {return MongoClients.create(mongodb://localhost:27017);}
}5、您还需要一个主应用程序来运行package org.spring.mongodb.example;import static org.springframework.data.mongodb.core.query.Criteria.where;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;import com.mongodb.client.MongoClients;public class MongoApp {private static final Log log LogFactory.getLog(MongoApp.class);public static void main(String[] args) throws Exception {MongoOperations mongoOps new MongoTemplate(MongoClients.create(), database);mongoOps.insert(new Person(Joe, 34));log.info(mongoOps.findOne(new Query(where(name).is(Joe)), Person.class));mongoOps.dropCollection(person);}
}6、运行主程序10:01:32,062 DEBUG apping.MongoPersistentEntityIndexCreator: 80 - Analyzing class class org.spring.example.Person for index information.
10:01:32,265 DEBUG ramework.data.mongodb.core.MongoTemplate: 631 - insert Document containing fields: [_class, age, name] in collection: Person
10:01:32,765 DEBUG ramework.data.mongodb.core.MongoTemplate:1243 - findOne using query: { name : Joe} in db.collection: database.Person
10:01:32,953 INFO org.spring.mongodb.example.MongoApp: 25 - Person [id4ddbba3c0be56b7e1b210166, nameJoe, age34]
10:01:32,984 DEBUG ramework.data.mongodb.core.MongoTemplate: 375 - Dropped collection [database.person]
二、保存、更新和删除文档MongoTemplate允许您保存、更新和删除域对象并将这些对象映射到存储在 MongoDB 中的文档。请考虑以下类public class Person {private String id;private String name;private int age;public Person(String name, int age) {this.name name;this.age age;}public String getId() {return id;}public String getName() {return name;}public int getAge() {return age;}Overridepublic String toString() {return Person [id id , name name , age age ];}}给定上例中的Person类您可以保存、更新和删除对象如下例所示package org.spring.example;import static org.springframework.data.mongodb.core.query.Criteria.where;
import static org.springframework.data.mongodb.core.query.Update.update;
import static org.springframework.data.mongodb.core.query.Query.query;import java.util.List;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDbFactory;import com.mongodb.client.MongoClients;public class MongoApp {private static final Log log LogFactory.getLog(MongoApp.class);public static void main(String[] args) {MongoOperations mongoOps new MongoTemplate(new SimpleMongoClientDbFactory(MongoClients.create(), database));Person p new Person(Joe, 34);// Insert is used to initially store the object into the database.mongoOps.insert(p);log.info(Insert: p);// Findp mongoOps.findById(p.getId(), Person.class);log.info(Found: p);// UpdatemongoOps.updateFirst(query(where(name).is(Joe)), update(age, 35), Person.class);p mongoOps.findOne(query(where(name).is(Joe)), Person.class);log.info(Updated: p);// DeletemongoOps.remove(p);// Check that deletion workedListPerson people mongoOps.findAll(Person.class);log.info(Number of people : people.size());mongoOps.dropCollection(Person.class);}
}前面的示例将生成以下日志输出包括来自MongoTemplate的调试消息DEBUG apping.MongoPersistentEntityIndexCreator: 80 - Analyzing class class org.spring.example.Person for index information.
DEBUG work.data.mongodb.core.MongoTemplate: 632 - insert Document containing fields: [_class, age, name] in collection: person
INFO org.spring.example.MongoApp: 30 - Insert: Person [id4ddc6e784ce5b1eba3ceaf5c, nameJoe, age34]
DEBUG work.data.mongodb.core.MongoTemplate:1246 - findOne using query: { _id : { $oid : 4ddc6e784ce5b1eba3ceaf5c}} in db.collection: database.person
INFO org.spring.example.MongoApp: 34 - Found: Person [id4ddc6e784ce5b1eba3ceaf5c, nameJoe, age34]
DEBUG work.data.mongodb.core.MongoTemplate: 778 - calling update using query: { name : Joe} and update: { $set : { age : 35}} in collection: person
DEBUG work.data.mongodb.core.MongoTemplate:1246 - findOne using query: { name : Joe} in db.collection: database.person
INFO org.spring.example.MongoApp: 39 - Updated: Person [id4ddc6e784ce5b1eba3ceaf5c, nameJoe, age35]
DEBUG work.data.mongodb.core.MongoTemplate: 823 - remove using query: { id : 4ddc6e784ce5b1eba3ceaf5c} in collection: person
INFO org.spring.example.MongoApp: 46 - Number of people : 0
DEBUG work.data.mongodb.core.MongoTemplate: 376 - Dropped collection [database.person]
MongoConverter通过识别通过约定Id属性名称导致存储在数据库中的String和ObjectId之间的隐式转换。1、如何在映射层中处理_id字段MongoDB要求所有文档都有一个_id字段。如果不提供则驱动程序会为ObjectId分配一个生成的值。使用MappingMongoConverter时某些规则控制Java类中的财产如何映射到此_id字段用Idorg.springframework.data.annotation.Id注释的属性或字段映射到_Id字段。没有注释但命名为id的属性或字段映射到_id字段。以下概述了在使用MappingMongoConverterMongoTemplate的默认值时对映射到_id文档字段的属性进行的类型转换如果有的话。如果可能Java类中声明为String的id属性或字段将通过使用Spring ConverterStringObjectId转换为ObjectId并存储为ObjectId。有效的转换规则被委托给MongoDB Java驱动程序。如果无法将其转换为ObjectId则该值将作为字符串存储在数据库中。Java类中声明为BigInteger的id属性或字段通过使用Spring ConverterBigIntegerObjectId转换为ObjectId并存储为ObjectId。如果Java类中不存在先前规则集中指定的字段或属性则驱动程序会生成一个隐式_id文件但不会映射到Java类的属性或字段。在查询和更新时MongoTemplate使用与前面保存文档的规则相对应的转换器以便查询中使用的字段名和类型可以与域类中的字段名称和类型相匹配。一些环境需要一种定制的方法来映射Id值例如存储在MongoDB中的数据这些数据没有通过Spring data映射层运行。文档可以包含_id值这些值可以表示为ObjectId或String。将文档从存储区读取回域类型就可以了。由于隐含的ObjectId转换通过文档id查询文档可能会很麻烦。因此无法通过这种方式检索文档。对于这些情况MongoId提供了对实际id映射尝试的更多控制。public class PlainStringId {MongoId String id; (1)
}public class PlainObjectId {MongoId ObjectId id; (2)
}public class StringToObjectId {MongoId(FieldType.OBJECT_ID) String id; (3)
}