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

前言

本文主要给大家介绍了关于利用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.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);
 }

}

总结

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

(0)

相关推荐

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

    前言 本文主要给大家介绍了关于利用Spring Data MongoDB持久化文档数据的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 介绍 NoSQL:not only SQL,非关系型数据 MongoDB是文档型数据,文档是独立的实体,文档数据库不适用于关联关系明显的数据 Spring Data MongoDB 1.Spring Data MongoDB提供了三种方式在Spring应用中使用MongoDB 通过注解实现对象-文档映射 使用MongoTemplate

  • Spring Data MongoDB中实现自定义级联的方法详解

    前言 Spring Data MongoDB 项目提供与MongoDB文档数据库的集成,Spring与Hibernate集成时,Spring提供了org.springframework.orm.hibernate3.HibernateTemplate实现了对数据的CRUD操作, Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,包括对集成的对象映射文件和POJO之间的

  • php删除txt文件指定行及按行读取txt文档数据的方法

    本文实例讲述了php删除txt文件指定行及按行读取txt文档数据的方法.分享给大家供大家参考,具体如下: 向txt文件循环写入值: $keys = range(1,999); $file = fopen('key_11010000.txt',"w"); foreach($keys as $key){ fwrite($file,"$key\r\n"); } fclose($file); $f1 = fopen('key_11010000.txt','r'); whil

  • JS实现兼容各浏览器解析XML文档数据的方法

    本文实例讲述了JS实现兼容各浏览器解析XML文档数据的方法.分享给大家供大家参考.具体分析如下: 网站上很多用JS解析XML文档的资料或多或少都有点问题, 以下是自己总结的代码,用来解析XML文档,兼容各个浏览器. parseXMLDOM.js代码: /* * 纯JS解析XML文档(兼容各个浏览器) */ function parseXMLDOM(){ var _browserType = ""; var _xmlFile = ""; var _XmlDom = n

  • .NET Core利用swagger进行API接口文档管理的方法详解

    一.问题背景 随着技术的发展,现在的开发模式已经更多的转向了前后端分离的模式,在前后端开发的过程中,联系的方式也变成了API接口,但是目前项目中对于API的管理很多时候还是通过手工编写文档,每次的需求变更只要涉及到接口的变更,文档都需要进行额外的维护,如果有哪个小伙伴忘记维护,很多时候就会造成一连续的问题,那如何可以更方便的解决API的沟通问题?Swagger给我们提供了一个方式,由于目前主要我是投入在.NET Core项目的开发中,所以以.NET Core作为示例 二.什么是Swagger S

  • Python实现复制文档数据

    目录 前言 环境使用 模块使用 基本思路流程 一. 分析数据来源 二. 代码实现步骤 代码展示 前言 我们百度搜索一些东西得时候,经常找到文档里面 然后就会发现需要充值才能复制!怎么可以不花钱也保存呢? 今天就分享给大家一个python获取文档数据得方法 环境使用 python 3.8 pycharm 模块使用 requests >>> 数据请求模块 pip install requests docx >>> 文档保存 pip install python-docx r

  • MongoDB快速入门笔记(四)之MongoDB查询文档操作实例代码

    MongoDB简介 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 下面给大家介绍MongoDB查询文档操作的实例 先把student删除,再重新插入数据 > db.student.drop() true > db.student.insert([{ "_id" : 1, "

  • MongoDB快速入门笔记(三)之MongoDB插入文档操作

    MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 本文给大家介绍MongoDB的插入文档的方法,一起看看吧 1.文档的数据存储格式为BSON,类似于JSON.MongoDB插入数据时会检验数据中是否有"_id",如果没有会自动生成. shell操作有insert和save两种方法.当插入一条数据有

  • MongoDB数据库文档操作方法(必看篇)

    前面的话 本文将详细介绍MongoDB数据库关于文档的增删改查 如果数据库中不存在集合,则MongoDB将创建此集合,然后将文档插入到该集合中 要在单个查询中插入多个文档,可以在insert()命令中传递文档数组 可以使用js语法,插入多个文档 [save()] 插入文档也可以使用db.post.save(document). 如果不在文档中指定_id,那么save()方法将与insert()方法一样自动分配ID的值.如果指定_id,则将以save()方法的形式替换包含_id的文档的全部数据.

  • java后台利用Apache poi 生成excel文档提供前台下载示例

    之前在项目中会用到在Java在后台把数据填入Word文档的模板来提供前台下载,为了自己能随时查看当时的实现方案及方便他人学习我写了这篇博客,访问量已经是我写的博客里第一了.于是乎我在学会用Java在后台利用Apache poi 生成excel文档提供前台下载之后就想着来写一篇姊妹篇啦. 在生成Excel文档的时候我采用了和生成Word时的不同方法,Apache poi.它是用Java编写的免费开源的跨平台的 Java API,提供API给Java程式对Microsoft Office格式档案读和

随机推荐