gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章利用Spring Data MongoDB持久化文档数据的方法教程由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

前言 。

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

介绍 。

  • NoSQL:not only SQL,非关系型数据
  • MongoDB是文档型数据,文档是独立的实体,文档数据库不适用于关联关系明显的数据

Spring Data MongoDB 。

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

  • 通过注解实现对象-文档映射
  • 使用MongoTemplate实现基于模板的数据库访问
  • 自动化的运行时Repository生成功能
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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<Item> 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<Item> getItems() {
   return items;
  }
 
  public void setItems(Collection<Item> items) {
   this .items = items;
  }
 
 
 
}

2.启用MongoDB 。

  • 通过@EnableJpaRepositories注解启用Spring Data的自动化JPA Repository生成功能
  • @EnableMongoRepositories为MongoDB实现了相同的功能

第一种方式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import 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" );
  }
 
}

第二种方式 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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访问MongoDB 。

  • 配置类中配置的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.查询方式:

  • 自定义查询
  • 指定查询
  • 混合定义查询
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//自定义查询
  List<Order> findByCustomer(String customer);
  List<Order> getByCustomer(String customer);
  List<Order> readByCustomer(String customer);
 
  int countByCustomer(String customer);
 
  List<Order> findByCustomerLike(String customer);
 
  List<Order> findByCustomerAndType(String customer, String type);
 
  List<Order> getByType(String type);
  
  //指定查询
  @Query ( "{customer:'Chuck Wagon'}" )
  List<Order> findChucksOrders();

混合自定义的功能 。

1.首先,定义中间接口 。

?
1
2
3
4
5
6
import java.util.List;
 
public interface OrderOperations {
 
  List<Order> findOrderByType(String t);
}

2.编写混合实现 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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<Order> 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 );
  }
 
}

总结 。

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

原文链接:https://segmentfault.com/a/1190000010520535 。

最后此篇关于利用Spring Data MongoDB持久化文档数据的方法教程的文章就讲到这里了,如果你想了解更多关于利用Spring Data MongoDB持久化文档数据的方法教程的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com