利用SpringDataMongoDB持久化文檔數(shù)據(jù)的方法教程

前言

創(chuàng)新互聯(lián)公司于2013年創(chuàng)立,先為珠海等服務建站,珠海等地企業(yè),進行企業(yè)商務咨詢服務。為珠海企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。

本文主要給大家介紹了關于利用Spring Data MongoDB持久化文檔數(shù)據(jù)的相關內(nèi)容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

介紹

  • NOSQL:not only SQL,非關系型數(shù)據(jù)
  • MongoDB是文檔型數(shù)據(jù),文檔是獨立的實體,文檔數(shù)據(jù)庫不適用于關聯(lián)關系明顯的數(shù)據(jù)

Spring Data MongoDB

1.Spring Data MongoDB提供了三種方式在Spring應用中使用MongoDB

  • 通過注解實現(xiàn)對象-文檔映射
  • 使用MongoTemplate實現(xiàn)基于模板的數(shù)據(jù)庫訪問
  • 自動化的運行時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<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實現(xiàn)了相同的功能

第一種方式:

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";  //指定數(shù)據(jù)庫名
 }

 @Autowired
 private Environment env;
 
 @Override
 public Mongo mongo() throws Exception {
//  return new MongoClient();  //創(chuàng)建Mongo客戶端
  
  //如果MongoDB服務器運行在其他的機器上
//  return new MongoClient("mongoServer");
  
  //如果MongoDB服務器監(jiān)聽的端口不是默認端口27017
//  return new MongoClient("mongoServer", 37017);
  
  //如果MongoDB服務器在生產(chǎn)配置上,啟用了認證功能
  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.為模型添加注解,實現(xiàn)MongoDB持久化

  • 用于對象-文檔映射的Spring Data MongoDB注解
         @Document 標示映射到MongoDB文檔上的領域?qū)ο?類似JPA @Entity注解
         @Id 標示某個域為ID域
         @DbRef 標示某個域要引用的其它的文檔,這個文檔有可能位于另一個數(shù)據(jù)庫中
         @Field 為文檔域指定自定義的元數(shù)據(jù)
         @Version 標示某個屬性用作版域
  • 注意:沒有添加注解的屬性,也會持久化為文檔中域,除非設置瞬時態(tài)(transient)
  • 注意:Order.items屬性,不是 關聯(lián)關系,會完全嵌入到Order中

4.使用MongoTemplate訪問MongoDB

  • 配置類中配置的MongoTemplate bean,將其注入到使用的地方
  • @Autowired MongoOperations mongo;
  • MongoOperations是MongoTemplate所實現(xiàn)的接口
  • void save(Object objectToSave, String collectionName);
  • save第一個參數(shù)是新創(chuàng)建的對象,第二個參數(shù)是要保存的文檔存儲的名稱

5.編寫MongoDB Repository

  • 使用Spring Data MongoDB來創(chuàng)建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.編寫混合實現(xiàn)

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;
  
  //創(chuàng)建查詢
  Criteria where = Criteria.where("type").is(type);
  Query query = Query.query(where);
  
  //執(zhí)行查詢
  return mongo.find(query, Order.class);
 }

}

總結

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對創(chuàng)新互聯(lián)的支持。

網(wǎng)站欄目:利用SpringDataMongoDB持久化文檔數(shù)據(jù)的方法教程
本文網(wǎng)址:http://bm7419.com/article0/jcidio.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供建站公司、網(wǎng)站設計、外貿(mào)建站Google、網(wǎng)站內(nèi)鏈網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營