摘要:介紹非關(guān)系型數(shù)據(jù)是文檔型數(shù)據(jù),文檔是獨立的實體,文檔數(shù)據(jù)庫不適用于關(guān)聯(lián)關(guān)系明顯的數(shù)據(jù)提供了三種方式在應(yīng)用中使用通過注解實現(xiàn)對象文檔映射使用實現(xiàn)基于模板的數(shù)據(jù)庫訪問自動化的運行時生成功能注解將類型映射為文檔這是一個文檔指定覆蓋默認(rèn)的域名啟用
介紹
NoSQL:not only SQL,非關(guān)系型數(shù)據(jù)
MongoDB是文檔型數(shù)據(jù),文檔是獨立的實體,文檔數(shù)據(jù)庫不適用于關(guān)聯(lián)關(guān)系明顯的數(shù)據(jù)
Spring Data MongoDB
Spring Data MongoDB提供了三種方式在Spring應(yīng)用中使用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") //覆蓋默認(rèn)的域名 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() { return items; } public void setItems(Collection
- items) { this.items = items; } }
啟用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的配置 * 擴(kuò)展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服務(wù)器運行在其他的機(jī)器上 // return new MongoClient("mongoServer"); //如果MongoDB服務(wù)器監(jiān)聽的端口不是默認(rèn)端口27017 // return new MongoClient("mongoServer", 37017); //如果MongoDB服務(wù)器在生產(chǎn)配置上,啟用了認(rè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)); } }
為模型添加注解,實現(xiàn)MongoDB持久化
用于對象-文檔映射的Spring Data MongoDB注解
@Document 標(biāo)示映射到MongoDB文檔上的領(lǐng)域?qū)ο? 類似JPA @Entity注解
@Id 標(biāo)示某個域為ID域
@DbRef 標(biāo)示某個域要引用的其它的文檔,這個文檔有可能位于另一個數(shù)據(jù)庫中
@Field 為文檔域指定自定義的元數(shù)據(jù)
@Version 標(biāo)示某個屬性用作版域
注意:沒有添加注解的屬性,也會持久化為文檔中域,除非設(shè)置瞬時態(tài)(transient)
注意:Order.items屬性,不是 關(guān)聯(lián)關(guān)系,會完全嵌入到Order中
使用MongoTemplate訪問MongoDB
配置類中配置的MongoTemplate bean,將其注入到使用的地方
@Autowired MongoOperations mongo;
MongoOperations是MongoTemplate所實現(xiàn)的接口
void save(Object objectToSave, String collectionName);
save第一個參數(shù)是新創(chuàng)建的對象,第二個參數(shù)是要保存的文檔存儲的名稱
編寫MongoDB Repository
使用Spring Data MongoDB來創(chuàng)建Repository
通過@EnableMongoRepositories注解啟用Spring Data MongoDB的Repository功能
通過擴(kuò)展MongoRepository接口,能夠繼承多個CRUD操作
查詢方式:
自定義查詢
指定查詢
混合定義查詢
//自定義查詢 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();
首先,定義中間接口
import java.util.List; public interface OrderOperations { ListfindOrderByType(String t); }
編寫混合實現(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 ListfindOrderByType(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); } }
引用:《Spring In Action 4》第十二章
越想快一點的時候,越慢
越想要的,越難以得到
抓到越緊,越是徒勞
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/19063.html
摘要:介紹非關(guān)系型數(shù)據(jù)是文檔型數(shù)據(jù),文檔是獨立的實體,文檔數(shù)據(jù)庫不適用于關(guān)聯(lián)關(guān)系明顯的數(shù)據(jù)提供了三種方式在應(yīng)用中使用通過注解實現(xiàn)對象文檔映射使用實現(xiàn)基于模板的數(shù)據(jù)庫訪問自動化的運行時生成功能注解將類型映射為文檔這是一個文檔指定覆蓋默認(rèn)的域名啟用 介紹 NoSQL:not only SQL,非關(guān)系型數(shù)據(jù) MongoDB是文檔型數(shù)據(jù),文檔是獨立的實體,文檔數(shù)據(jù)庫不適用于關(guān)聯(lián)關(guān)系明顯的數(shù)據(jù) S...
摘要:開公眾號差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來越多時,大家搜索起來就很不方便,因此做了一個索引幫助大家快速找到需要的文章系列處理登錄請求前后端分離一使用完美處理權(quán)限問題前后端分離二使用完美處理權(quán)限問題前后端分離三中密碼加鹽與中異常統(tǒng)一處理 開公眾號差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來越多時,大家搜索起來就很不方便,因此做了一個索引幫助大家快速找到需要的文章! Spring Boo...
摘要:指南無論你正在構(gòu)建什么,這些指南都旨在讓你盡快提高工作效率使用團(tuán)隊推薦的最新項目版本和技術(shù)。使用進(jìn)行消息傳遞了解如何將用作消息代理。安全架構(gòu)的主題指南,這些位如何組合以及它們?nèi)绾闻c交互。使用的主題指南以及如何為應(yīng)用程序創(chuàng)建容器鏡像。 Spring 指南 無論你正在構(gòu)建什么,這些指南都旨在讓你盡快提高工作效率 — 使用Spring團(tuán)隊推薦的最新Spring項目版本和技術(shù)。 入門指南 這些...
摘要:每個條件必須引用一個屬性,并且還可以指定一種比較操作。如果省略比較操作符的話,那么這暗指是一種相等比較操作。 Spring-data對MongoDB進(jìn)行了很好的支持,接下來就講解一下關(guān)于Spring對MongoDB的配置和一些正常的使用 我下面的工程使用的是Spring的Java配置的方式和Maven構(gòu)建 具體的工程代碼大家可以訪問我的Github地址:https://github.c...
閱讀 1514·2021-10-11 10:59
閱讀 1887·2021-09-09 11:36
閱讀 1402·2019-08-30 15:55
閱讀 1332·2019-08-29 11:20
閱讀 3067·2019-08-26 13:39
閱讀 1472·2019-08-26 13:37
閱讀 1966·2019-08-26 12:11
閱讀 1328·2019-08-23 14:28