最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年08月14日 11:33:32   作者:poseidon_ocean  
這篇文章主要給大家介紹了關(guān)于利用Spring Data MongoDB持久化文檔數(shù)據(jù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。

前言

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

介紹

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

Spring Data MongoDB

1.Spring Data MongoDB提供了三種方式在Spring應(yīng)用中使用MongoDB

  • 通過(guò)注解實(shí)現(xiàn)對(duì)象-文檔映射
  • 使用MongoTemplate實(shí)現(xiàn)基于模板的數(shù)據(jù)庫(kù)訪問(wèn)
  • 自動(dòng)化的運(yùn)行時(shí)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類(lèi)型映射為文檔
 */
@Document  //這是一個(gè)文檔
public class Order {

 @Id  //指定id
 private String id;
 
 @Field("client")  //覆蓋默認(rèn)的域名
 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

  • 通過(guò)@EnableJpaRepositories注解啟用Spring Data的自動(dòng)化JPA Repository生成功能
  • @EnableMongoRepositories為MongoDB實(shí)現(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ù)庫(kù)名
 }

 @Autowired
 private Environment env;
 
 @Override
 public Mongo mongo() throws Exception {
//  return new MongoClient();  //創(chuàng)建Mongo客戶端
  
  //如果MongoDB服務(wù)器運(yùn)行在其他的機(jī)器上
//  return new MongoClient("mongoServer");
  
  //如果MongoDB服務(wù)器監(jiān)聽(tīng)的端口不是默認(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));
 }

 
}

3.為模型添加注解,實(shí)現(xiàn)MongoDB持久化

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

4.使用MongoTemplate訪問(wèn)MongoDB

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

5.編寫(xiě)MongoDB Repository

  • 使用Spring Data MongoDB來(lái)創(chuàng)建Repository
  • 通過(guò)@EnableMongoRepositories注解啟用Spring Data MongoDB的Repository功能
  • 通過(guò)擴(kuò)展MongoRepository接口,能夠繼承多個(gè)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ě)混合實(shí)現(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);
 }

}

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • mybatis?collection和association的區(qū)別解析

    mybatis?collection和association的區(qū)別解析

    這篇文章主要介紹了mybatis?collection解析以及和association的區(qū)別,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • mybatis的mapper.xml中resultMap標(biāo)簽的使用詳解

    mybatis的mapper.xml中resultMap標(biāo)簽的使用詳解

    這篇文章主要介紹了mybatis的mapper.xml中resultMap標(biāo)簽的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Java Mybatis框架增刪查改與核心配置詳解流程與用法

    Java Mybatis框架增刪查改與核心配置詳解流程與用法

    MyBatis 是一款優(yōu)秀的持久層框架,它支持自定義 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作。MyBatis 可以通過(guò)簡(jiǎn)單的 XML 或注解來(lái)配置和映射原始類(lèi)型、接口和 Java POJO為數(shù)據(jù)庫(kù)中的記錄
    2021-10-10
  • java如何實(shí)現(xiàn)多線程的順序執(zhí)行

    java如何實(shí)現(xiàn)多線程的順序執(zhí)行

    多線程是java的一種重要技術(shù),但是多線程的運(yùn)行是沒(méi)有絕對(duì)的順序的,那么java如何實(shí)現(xiàn)多線程的順序執(zhí)行,下面就一起來(lái)了解一下
    2021-05-05
  • Java 判斷字符串a(chǎn)和b是否互為旋轉(zhuǎn)詞

    Java 判斷字符串a(chǎn)和b是否互為旋轉(zhuǎn)詞

    本篇文章主要介紹了判斷字符串a(chǎn)和b是否互為旋轉(zhuǎn)詞的相關(guān)知識(shí),具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-05-05
  • Java中字符串常見(jiàn)的拼接方式小結(jié)

    Java中字符串常見(jiàn)的拼接方式小結(jié)

    在Java中,字符串拼接是開(kāi)發(fā)過(guò)程中非常常見(jiàn)的操作,根據(jù)不同的需求和性能考慮,有多種方式可以實(shí)現(xiàn)字符串的拼接,本文給大家介紹了五種拼接方式,并通過(guò)代碼講解的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • 如何獲取所有spring管理的bean

    如何獲取所有spring管理的bean

    這篇文章主要介紹了如何獲取所有spring管理的bean,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java實(shí)體對(duì)象與Map之間的轉(zhuǎn)換工具類(lèi)代碼實(shí)例

    java實(shí)體對(duì)象與Map之間的轉(zhuǎn)換工具類(lèi)代碼實(shí)例

    這篇文章主要介紹了java實(shí)體對(duì)象與Map之間的轉(zhuǎn)換工具類(lèi)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • mybatis類(lèi)型轉(zhuǎn)換器如何實(shí)現(xiàn)數(shù)據(jù)加解密

    mybatis類(lèi)型轉(zhuǎn)換器如何實(shí)現(xiàn)數(shù)據(jù)加解密

    這篇文章主要介紹了mybatis類(lèi)型轉(zhuǎn)換器如何實(shí)現(xiàn)數(shù)據(jù)加解密,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java如何利用NIO壓縮文件或文件夾

    java如何利用NIO壓縮文件或文件夾

    這篇文章主要介紹了java如何利用NIO壓縮文件或文件夾問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評(píng)論

伊川县| 鹤峰县| 临清市| 望江县| 昌图县| 石泉县| 启东市| 久治县| 清丰县| 旌德县| 玛纳斯县| 涞源县| 义马市| 梁河县| 伽师县| 广西| 平舆县| 绿春县| 外汇| 泰来县| 山阳县| 晋宁县| 巴彦淖尔市| 东海县| 布拖县| 天柱县| 柘荣县| 巴林右旗| 瓦房店市| 花垣县| 库伦旗| 汉中市| 孝昌县| 普兰店市| 阿拉尔市| 唐海县| 新野县| 丰顺县| 叶城县| 沐川县| 特克斯县|