首页 > 开发 > Java > 正文

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

2024-07-13 10:10:57
字体:
来源:转载
供稿:网友

前言

本文主要给大家介绍了关于利用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/274316.html">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实现了相同的功能

第一种方式:

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"); } }

第二种方式

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.查询方式:

  • 自定义查询
  • 指定查询
  • 混合定义查询
//自定义查询 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.首先,定义中间接口

import java.util.List;public interface OrderOperations { List<Order> 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<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); }}

总结

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

 

注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表