利用Spring Data MongoDB持久化文档数据的方法教程
前言
本文主要给大家介绍了关于利用SpringDataMongoDB持久化文档数据的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
介绍
- NoSQL:notonlySQL,非关系型数据
- MongoDB是文档型数据,文档是独立的实体,文档数据库不适用于关联关系明显的数据
SpringDataMongoDB
1.SpringDataMongoDB提供了三种方式在Spring应用中使用MongoDB
- 通过注解实现对象-文档映射
- 使用MongoTemplate实现基于模板的数据库访问
- 自动化的运行时Repository生成功能
importjava.util.Collection;
importjava.util.LinkedHashSet;
importorg.springframework.data.annotation.Id;
importorg.springframework.data.mongodb.core.mapping.Document;
importorg.springframework.data.mongodb.core.mapping.Field;
/**
*SpringDataMongoDB注解将Java类型映射为文档
*/
@Document//这是一个文档
publicclassOrder{
@Id//指定id
privateStringid;
@Field("client")//覆盖默认的域名
privateStringcustomer;
privateStringtype;
privateCollection- items=newLinkedHashSet<>();
publicStringgetId(){
returnid;
}
publicvoidsetId(Stringid){
this.id=id;
}
publicStringgetCustomer(){
returncustomer;
}
publicvoidsetCustomer(Stringcustomer){
this.customer=customer;
}
publicStringgetType(){
returntype;
}
publicvoidsetType(Stringtype){
this.type=type;
}
publicCollection
- getItems(){
returnitems;
}
publicvoidsetItems(Collection
- items){
this.items=items;
}
}
2.启用MongoDB
- 通过@EnableJpaRepositories注解启用SpringData的自动化JPARepository生成功能
- @EnableMongoRepositories为MongoDB实现了相同的功能
第一种方式:
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
importorg.springframework.data.mongodb.MongoDbFactory;
importorg.springframework.data.mongodb.core.MongoOperations;
importorg.springframework.data.mongodb.core.MongoTemplate;
importorg.springframework.data.mongodb.core.SimpleMongoDbFactory;
importorg.springframework.data.mongodb.repository.config.EnableMongoRepositories;
importcom.mongodb.MongoClient;
/**
*
*SpringDataMongoDB的配置
*
*/
@Configuration
@EnableMongoRepositories(basePackages="com.adagio.db")//启用MongoDB的Repository功能
publicclassMongoConfig{
/**
*MongoTemplateBean
*@parammongoDbFactory
*@return
*/
@Bean
publicMongoOperationsmongoTemplate(){
returnnewMongoTemplate(mongoDbFactory());
}
/**
*MongoDbFactorybean
*@return
*/
publicMongoDbFactorymongoDbFactory(){
returnnewSimpleMongoDbFactory(mongoClient(),"com.adagio.db");
}
/**
*MongoClientbean
*@return
*/
publicMongoClientmongoClient(){
returnnewMongoClient("localhost");
}
}
第二种方式
importjava.util.Arrays;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.context.annotation.Configuration;
importorg.springframework.core.env.Environment;
importorg.springframework.data.mongodb.config.AbstractMongoConfiguration;
importorg.springframework.data.mongodb.repository.config.EnableMongoRepositories;
importcom.mongodb.Mongo;
importcom.mongodb.MongoClient;
importcom.mongodb.MongoCredential;
importcom.mongodb.ServerAddress;
/**
*
*SpringDataMongoDB的配置
*扩展AbstractMongoConfiguration
*
*/
@Configuration
@EnableMongoRepositories(basePackages="com.adagio.db")//启用MongoDB的Repository功能
publicclassMongoConfig2extendsAbstractMongoConfiguration{
@Override
protectedStringgetDatabaseName(){
return"OrdersDB";//指定数据库名
}
@Autowired
privateEnvironmentenv;
@Override
publicMongomongo()throwsException{
//returnnewMongoClient();//创建Mongo客户端
//如果MongoDB服务器运行在其他的机器上
//returnnewMongoClient("mongoServer");
//如果MongoDB服务器监听的端口不是默认端口27017
//returnnewMongoClient("mongoServer",37017);
//如果MongoDB服务器在生产配置上,启用了认证功能
MongoCredentialcredential=MongoCredential.createCredential(
env.getProperty("mongo.username"),"OrdersDB",
env.getProperty("mongo.password").toCharArray());
returnnewMongoClient(
newServerAddress("localhost",37017),
Arrays.asList(credential));
}
}
3.为模型添加注解,实现MongoDB持久化
- 用于对象-文档映射的SpringDataMongoDB注解
@Document标示映射到MongoDB文档上的领域对象类似JPA@Entity注解
@Id标示某个域为ID域
@DbRef标示某个域要引用的其它的文档,这个文档有可能位于另一个数据库中
@Field为文档域指定自定义的元数据
@Version标示某个属性用作版域 - 注意:没有添加注解的属性,也会持久化为文档中域,除非设置瞬时态(transient)
- 注意:Order.items属性,不是关联关系,会完全嵌入到Order中
4.使用MongoTemplate访问MongoDB
- 配置类中配置的MongoTemplatebean,将其注入到使用的地方
- @AutowiredMongoOperationsmongo;
- MongoOperations是MongoTemplate所实现的接口
- voidsave(ObjectobjectToSave,StringcollectionName);
- save第一个参数是新创建的对象,第二个参数是要保存的文档存储的名称
5.编写MongoDBRepository
- 使用SpringDataMongoDB来创建Repository
- 通过@EnableMongoRepositories注解启用SpringDataMongoDB的Repository功能
- 通过扩展MongoRepository接口,能够继承多个CRUD操作
6.查询方式:
- 自定义查询
- 指定查询
- 混合定义查询
//自定义查询 ListfindByCustomer(Stringcustomer); List getByCustomer(Stringcustomer); List readByCustomer(Stringcustomer); intcountByCustomer(Stringcustomer); List findByCustomerLike(Stringcustomer); List findByCustomerAndType(Stringcustomer,Stringtype); List getByType(Stringtype); //指定查询 @Query("{customer:'ChuckWagon'}") List findChucksOrders();
混合自定义的功能
1.首先,定义中间接口
importjava.util.List;
publicinterfaceOrderOperations{
ListfindOrderByType(Stringt);
}
2.编写混合实现
importjava.util.List;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.data.mongodb.core.MongoOperations;
importorg.springframework.data.mongodb.core.query.Criteria;
importorg.springframework.data.mongodb.core.query.Query;
publicclassOrderOperationsimplimplementsOrderOperations{
@Autowired
privateMongoOperationsmongo;//注入MongoOperations
@Override
publicListfindOrderByType(Stringt){
Stringtype=t.equals("NET")?"WEB":t;
//创建查询
Criteriawhere=Criteria.where("type").is(type);
Queryquery=Query.query(where);
//执行查询
returnmongo.find(query,Order.class);
}
}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。