`
bit1129
  • 浏览: 1069848 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[Spring Data Mongo一]Spring Mongo Template操作MongoDB

 
阅读更多

什么是Spring Data Mongo

Spring Data MongoDB项目对访问MongoDB的Java客户端API进行了封装,这种封装类似于Spring封装Hibernate和JDBC而提供的HibernateTemplate和JDBCTemplate,主要能力包括

1. 封装客户端跟MongoDB的链接管理

2. 文档-对象映射,通过注解:@Document(collection="collectionName")

3.对模版式的代码,进行了封装,类似于JDBCTemplate和HibernateTemplate

 

Spring Data Mongo在Spring中的基本配置

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mongo="http://www.springframework.org/schema/data/mongo"
       xsi:schemaLocation="http://www.springframework.org/schema/data/mongo
          http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
          http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    <mongo:mongo replica-set="localhost:27018,localhost:27017,localhost:27019">
        <mongo:options connections-per-host="200"
                       threads-allowed-to-block-for-connection-multiplier="100"
                       connect-timeout="1000"
                       max-wait-time="1500"
                       auto-connect-retry="true"
                       socket-keep-alive="true"
                       socket-timeout="1500"
                       slave-ok="true"
                       write-number="1"
                       write-timeout="0"
                       write-fsync="true"/>
    </mongo:mongo>
    <mongo:db-factory dbname="foolbar" username="" password="" mongo-ref="mongo"/>
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
    </bean>
</beans>

 说明:

1.其中的mongoTemplate是客户端操作MongoDB的主要类,它包含了增删改查功能以及其它一些操作,这些操作在以后的篇幅中会讲到

2.replica-set是副本集集群的MongoDB服务器的链接地址,以逗号分开,如果仅有一台服务器,使用host="localhost:27017”或者replica-set="localhost:27017"都可以,

3.mongo:options定义了链接属性和读写相关属性,以后再来完善这部分

 

Document和Collection注解

 

package com.tom.user.model;

import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "users")
public class User {
    @Id
    private ObjectId userId;
    private String name;
    private String passwd;

    public ObjectId getUserId() {
        return userId;
    }

    public void setUserId(ObjectId userId) {
        this.userId = userId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPasswd() {
        return passwd;
    }

    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }
}

 上面的代码定义了一个类似于Hibernate实体Bean的POJO,在Hibernate它可以和数据库的一个表建立映射关系,但是在MongoDB中,一个集合中的文档的Field是任意的,因此POJO必须映射到文档一级(@Document),同时注解中指明这个文档属于哪个集合(一个文档只能属于一个集合)。当使用MongoDBTemplate对POJO进行操作时,可以根据POJO的类型得到它要往那个集合中写文档

 

 MongoDBTemplate简单CRUD操作

 

package com.tom.user.storage;

import com.tom.user.model.User;
import org.junit.Assert;
import org.junit.Before;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

import java.util.List;

/*
http://www.tuicool.com/articles/EFnyye
http://www.mkyong.com/mongodb/spring-data-mongodb-hello-world-example/

 */
public class UserMongoDBStorageServiceTest2 {

    private ApplicationContext cxt  = null;

    @Before
    public void setup() {
        cxt = new ClassPathXmlApplicationContext("applicationContext.xml");

    }

    private void create() {
        drop();
        MongoTemplate template = cxt.getBean("mongoTemplate", MongoTemplate.class);
        User user = new User();
        user.setName("abc");
        user.setPasswd("def");
        template.insert(user);
    }

    public void query() {
        Query query = new Query(new Criteria("name").is("abc"));
        MongoTemplate template = cxt.getBean("mongoTemplate", MongoTemplate.class);
        List<User> users = template.find(query, User.class);
        Assert.assertEquals(1, users.size());
        User user = users.get(0);
        Assert.assertEquals("abc", user.getName());
        Assert.assertEquals("def", user.getPasswd());
    }

    public void update() {
        Query query = new Query(new Criteria("name").is("abc"));
        MongoTemplate template = cxt.getBean("mongoTemplate", MongoTemplate.class);
        List<User> users = template.find(query, User.class);
        Assert.assertEquals(1, users.size());
        User user = users.get(0);
        user.setPasswd("def-updated");
        Update update = new Update();
        update.set("passwd",user.getPasswd());
        template.updateFirst(query, update, User.class);

        Assert.assertEquals("abc", user.getName());
    }

    public void queryUpdate() {
        MongoTemplate template = cxt.getBean("mongoTemplate", MongoTemplate.class);
        List<User> users = template.findAll(User.class);
        Assert.assertEquals(1, users.size());
        User user = users.get(0);
        Assert.assertEquals("abc", user.getName());
        Assert.assertEquals("def-updated",user.getPasswd());
    }

    public void drop() {
        MongoTemplate template = cxt.getBean("mongoTemplate", MongoTemplate.class);
        template.dropCollection(User.class);
    }

    @org.junit.Test
    public void testCRUD() {
        create();
        query();
        update();
        queryUpdate();
        drop();
    }
}

 

 

只对Update操作做下说明:

 

 

    public void update() {
        Query query = new Query(new Criteria("name").is("abc"));
        MongoTemplate template = cxt.getBean("mongoTemplate", MongoTemplate.class);
        List<User> users = template.find(query, User.class);
        Assert.assertEquals(1, users.size());
        User user = users.get(0);
        user.setPasswd("def-updated");
        Update update = new Update();
        update.set("passwd",user.getPasswd());
        template.updateFirst(query, update, User.class);

        Assert.assertEquals("abc", user.getName());
    }

 

 

User两个字段name和passwd,Update中只通过Update.set方法对passwd进行了更改,那么name这个属性在更新操作完成后是从文档中被删除了还是保留下来了?答案是保留下来了,并且值保持不变,这就为更新操作提供了很大的便利性,要改什么就在Update中指定什么,

 

Spring Data Mongo连接MongoDB服务器的参数

 

分享到:
评论

相关推荐

    spring-data使用mongodbTemplate对MongoDB进行读写操作

    Spring Data MongoDB是一个强大的Java库,它为开发人员提供了一种简单的方式来访问和操作MongoDB数据库。这个库是Spring Data框架的一部分,旨在简化数据访问层的实现,尤其在使用NoSQL数据库如MongoDB时。MongoDB...

    Spring Data MongoDB中文文档

    - **MongoTemplate** 是 **Spring Data MongoDB** 提供的一个核心类,用于执行 MongoDB 的 CRUD 操作。 - 它提供了很多方便的方法来执行数据库操作,例如:`insert()`, `save()`, `findOne()`, `remove()`, `find()`...

    springdata mongodb api文档

    文档中提到的MongoTemplate是SpringData MongoDB中的另一个重要组成部分。这是一个用于MongoDB操作的类,它封装了对MongoDB的基本CRUD(创建、读取、更新、删除)操作,并且提供了一个更加面向对象的接口,使得...

    springMongodb参考文档中文版

    - **MongoTemplate**:作为Spring Data MongoDB的核心类,提供了丰富的操作MongoDB的方法。 - **文档操作**:涵盖了保存、更新、删除文档等操作。 - **查询文档**:包括查询集合中的文档、地理空间查询、全文查询等...

    Spring-Data-MongoDB3.2

    Spring Data MongoDB提供了与MongoDB数据库交互的一系列抽象,包括MongoTemplate和Repository接口。通过这些接口,开发人员无需直接编写MongoDB的Java驱动程序代码,就能实现CRUD(创建、读取、更新和删除)操作,...

    基于spring data mongo封装的API,让开发人员不用知道mongo

    Spring Data MongoDB则是Spring Data框架的一个子项目,它为MongoDB提供了全面的支持,使得Java开发者能够轻松地进行数据操作,而无需深入理解MongoDB的底层细节。本项目基于Spring Data MongoDB封装了一套API,旨在...

    spring-data-mongodb-1.8.0.RELEASE(含源码)

    - **MongoTemplate**:这是 Spring Data MongoDB 的核心类,提供了一组丰富的操作方法,用于执行 CRUD(创建、读取、更新、删除)操作,以及查询和聚合操作。 - **Repository**:Spring Data 提供了基于接口的 ...

    spring data mongodb代码参考

    Spring Data MongoDB 是一个用于简化MongoDB数据库操作的框架,它为Spring应用提供了强大的支持,使得开发者可以更加方便地集成和操作非关系型数据库。在这个"spring data mongodb代码参考"中,我们将深入探讨如何...

    spring-data-mongo配置成功

    Spring Data MongoDB则是Spring生态中的一环,它为MongoDB提供了一套完整的数据访问层,简化了与MongoDB的交互。 配置Spring Data MongoDB主要涉及以下几个步骤: 1. **添加依赖**: 在项目中引入Spring Data ...

    Spring-data + MongoDb源码

    7. **数据迁移和版本控制**: Spring Data MongoDB可以通过`MongoTemplate`进行更底层的操作,如数据迁移。我们也可以利用`@Version`注解实现乐观锁,确保并发更新时的数据一致性。 8. **事件监听**: Spring Data ...

    spring-data-mongodb-1.2.0.RELEASE

    在 Spring Data MongoDB 中,数据以 Java 对象的形式表示,通过 MongoDBTemplate 或 MongoRepository 进行操作。 三、Spring Data MongoDB 1.2.0.RELEASE 新特性 1. 改进的查询构造器:1.2.0.RELEASE 版本增强了...

    spring data mongodb

    1. **Repository接口**:Spring Data MongoDB通过Repository接口提供了一种声明式的方式来定义数据库操作。例如,你可以定义一个继承自`MongoRepository`的接口,其中包含CRUD(创建、读取、更新、删除)操作的方法...

    mongoTemplate实现统计和分组

    但是,在使用 spring-data-mongodb-1.9.5.RELEASE 版本时,我们可能会遇到一些问题,例如在调用 mongoTemplate 类型的 aggregate 聚合框架时,需要提供 'cursor' 选项,否则将抛出异常。为了避免这些问题,我们可以...

    Spring-data-mongo应用

    Spring Data MongoDB 是 Spring Data 项目的一部分,它提供了一套统一的数据访问抽象层,使得开发人员能够更加容易地进行数据库操作,而无需关注底层的具体实现细节。本案例主要介绍了如何在 Spring 4.1.3.RELEASE ...

    Spring3+Spring-data-mongodb1.5.6示例

    6. **MongoTemplate**: 这是Spring Data MongoDB的核心组件,提供了低级别的操作接口,如增删查改。你可以通过MongoTemplate执行自定义的查询或者操作。 7. **Repository接口**: Spring Data MongoDB的Repository...

    MongoDB初探(二)----使用spring-data配置mongodb

    在本篇“MongoDB初探(二)----使用spring-data配置mongodb”中,我们将深入探讨如何利用Spring Data框架来集成和操作MongoDB数据库。Spring Data是Spring生态系统的一个重要组成部分,它提供了与各种数据存储系统...

    spring-data-mongodb1.2.0

    2. **MongoTemplate**:这是一个核心组件,提供了直接操作MongoDB的底层功能。你可以用它来执行更细粒度的数据库操作,如读写文档、管理集合或执行聚合框架。 3. **对象映射**:Spring Data MongoDB提供了对象-文档...

    spring-data-mongodb api

    - **MongoTemplate**:这是Spring Data MongoDB的主要操作接口,它提供了大量的方法来执行CRUD操作,如保存、查找、删除和更新文档。 - **MongoRepository**:这是一个接口,定义了通用的查询方法,如查找、删除和...

    spring mongodb 中文文档

    MongoTemplate 是Spring Data MongoDB 提供的核心类,用于执行CRUD(创建、读取、更新、删除)操作。它提供了丰富的API,可以执行复杂查询和操作。 5. **Repository 接口** Spring Data MongoDB 提供了Repository...

    jastar-wang-demo-springdata-mongo-master.zip

    首先,"jastar-wang-demo-springdata-mongo-master.zip"是一个基于Spring Boot的示例项目,它集成了Spring Data MongoDB,旨在演示如何实现对MongoDB数据库的基本操作。该项目包含了完整的配置和代码,可以直接运行...

Global site tag (gtag.js) - Google Analytics