利用Spring Data MongoDB持久化文档数据的方法教程

网友投稿 680 2023-04-20


利用Spring Data MongoDB持久化文档数据的方法教程

前言

本文主要给大家介绍了关于利用Spring Data MongoDB持久化文档数据的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

介绍

NoSQL:not only SQL,非关系型数据

MongoDB是文档型数据,文档是独立的实体,文档数据库不适用于关联关系明显的数据

Spring Data MongoDB

1.Spring Data MongoDB提供了三种方式在Spring应用中使用MongoDB

通过注解实现对象-文档映射

使用MongoTemplate实现基于模板的数据库访问

自动化的运行时Repository生成功能

import java.util.Collection;

import java.util.LinkedHashSet;

import org.springframework.data.annotation.Id;

import org.springframework.data.mongodb.core.mapping.Document;

import org.springframework.data.mongodb.core.mapping.Field;

/**

* Spring Data MongoDB注解将Java类型映射为文档

*/

@Document //这是一个文档

public class Order {

@Id //指定id

private String id;

@Field("client") //覆盖默认的域名

private String customer;

private String type;

private Collection items = new LinkedHashSet<>();

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getCustomer() {

return customer;

}

public void setCustomer(String customer) {

this.customer = customer;

}

public String getType() {

return type;

}

public void setType(String type) {

this.type = type;

}

public Collection getItems() {

rhttp://eturn items;

}

public void setItems(Collection items) {

this.items = items;

}

}

2.启用MongoDB

通过@EnableJpaRepositories注解启用Spring Data的自动化JPA Repository生成功能

@EnableMongoRepositories为MongoDB实现了相同的功能

第一种方式:

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

importbDdxMMlfFz org.springframework.data.mongodb.MongoDbFactory;

import org.springframework.data.mongodb.core.MongoOperations;

import org.springframework.data.mongodb.core.MongoTemplate;

import org.springframework.data.mongodb.core.SimpleMongoDbFactory;

import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;

import com.mongodb.MongoClient;

/**

*

* Spring Data MongoDB的配置

*

*/

@Configuration

@EnableMongoRepositories(basePackages="com.adagio.db") //启用MongoDB的Repository功能

public class MongoConfig {

/**

* MongoTemplate Bean

* @param mongoDbFactory

* @return

*/

@Bean

public MongoOperations mongoTemplate(){

return new MongoTemplate(mongoDbFactory());

}

/**

* MongoDbFactory bean

* @return

*/

public MongoDbFactory mongoDbFactory(){

return new SimpleMongoDbFactory(mongoClient(), "com.adagio.db");

}

/**

* MongoClient bean

* @return

*/

public MongoClient mongoClient(){

return new MongoClient("localhost");

}

}

第二种方式

import java.util.Arrays;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Configuration;

import org.springframework.core.env.Environment;

import org.springframework.data.mongodb.config.AbstractMongoConfiguration;

import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;

import com.mongodb.Mongo;

import com.mongodb.MongoClient;

import com.mongodb.MongoCredential;

import com.mongodb.ServerAddress;

/**

*

* Spring Data MongoDB的配置

* 扩展AbstractMongoConfiguration

*

*/

@Configuration

@EnableMongoRepositories(basePackages="com.adagio.db") //启用MongoDB的Repository功能

public class MongoConfig2 extends AbstractMongoConfiguration {

@Override

protected String getDatabaseName() {

return "OrdersDB"; //指定数据库名

}

@Autowired

private Environment env;

@Override

public Mongo mongo() throws Exception {

// return new MongoClient(); //创建Mongo客户端

//如果MongoDB服务器运行在其他的机器上

// return new MongoClient("mongoServer");

//如果MongoDB服务器监听的端口不是默认端口27017

// return new MongoClient("mongoServer", 37017);

//如果MongoDB服务器在生产配置上,启用了认证功能

MongoCredential credential = MongoCredential.createCredential(

env.getProperty("mongo.username") , "OrdersDB",

env.getProperty("mongo.password").toCharArray());

return new MongoClient(

new ServerAddress("localhost", 37017),

Arrays.asList(credential));

}

}

3.为模型添加注解,实现MongoDB持久化

用于对象-文档映射的Spring Data MongoDB注解

     @Document 标示映射到MongoDB文档上的领域对象 类似JPA @Entity注解

     @Id 标示某个域为ID域

     @DbRef 标示某个域要引用的其它的文档,这个文档有可能位于另一个数据库中

     @Field 为文档域指定自定义的元数据

     @Version 标示某个属性用作版域

注意:没有添加注解的属性,也会持久化为文档中域,除非设置瞬时态(transient)

注意:Order.items属性,不是 关联关系,会完全嵌入到Order中

4.使用MongoTemplate访问MbDdxMMlfFzongoDB

配置类中配置的MongoTemplate bean,将其注入到使用的地方

@Autowired MongoOperations mongo;

MongoOperations是MongoTemplate所实现的接口

void save(Object objectToSave, String collectionName);

save第一个参数是新创建的对象,第二个参数是要保存的文档存储的名称

5.编写MongoDB Repository

使用Spring Data MongoDB来创建Repository

通过@EnableMongoRepositories注解启用Spring Data MongoDB的Repository功能

通过扩展MongoRepository接口,能够继承多个CRUD操作

6.查询方式:

自定义查询

指定查询

混合定义查询

//自定义查询

List findByCustomer(String customer);

List getByCustomer(String customer);

List readByCustomer(String customer);

int countByCustomer(String customer);

List findByCustomerLike(String customer);

List findByCustomerAndType(String customer, String type);

List getByType(String type);

//指定查询

@Query("{customer:'Chuck Wagon'}")

List findChucksOrders();

混合自定义的功能

1.首先,定义中间接口

import java.util.List;

public interface OrderOperations {

List findOrderByType(String t);

}

2.编写混合实现

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.mongodb.core.MongoOperations;

import org.springframework.data.mongodb.core.query.Criteria;

import org.springframework.data.mongodb.core.query.Query;

public class OrderOperationsimpl implements OrderOperations {

@Autowired

private MongoOperations mongo; //注入MongoOperations

@Override

public List findOrderByType(String t) {

String type = t.equals("NET") ? "WEB" : t;

//创建查询

Criteria where = Criteria.where("type").is(type);

Query query = Query.query(where);

//执行查询

return mongo.find(query, Order.class);

}

}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用yeoman构建angular应用的方法
下一篇:自动化接口测试设计(接口自动化测试计划)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~