mongodb--与spring整合

一、spring-data-mongodb

  Spring Data是Spring专门用来数据处理的一个子项目,Spring Data除了spring-data-mongodb之外还包括spring-data-jp、spring-data-redis等项目。spring-data-mongodb就是针对mongodb的一个项目。通过它我们可以对nongodb进行操作。spring-data-mongodb的项目地址为:http://projects.spring.io/spring-data-mongodb/ 。

二、实例

  例子使用maven构建并使用spring-test运行。

  pom.xml 内容如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.yichun.test</groupId>
    <artifactId>test_yichun</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>test_yichun</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <junit.version>4.11</junit.version>
        <spring.version>4.1.1.RELEASE</spring.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>2.12.4</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>1.6.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

    </dependencies>
</project>

  spring-config-mongodb.xml 配置文件如下:

<?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:context="http://www.springframework.org/schema/context"
    xmlns:mongo="http://www.springframework.org/schema/data/mongo"
    xsi:schemaLocation="
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    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 host="127.0.0.1" port="27017" />
    <mongo:db-factory dbname="mongotest" mongo-ref="mongo" />

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
    </bean>
</beans>

  Person.java 对应于保存的文档  

package com.yichun.test.test_yichun;

public class Person {

    private String id;
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person(String id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
    }

}

  MongoTest 主运行类

  1 package com.yichun.test.test_yichun;
  2
  3 import java.util.ArrayList;
  4 import java.util.List;
  5
  6 import javax.annotation.Resource;
  7
  8 import org.junit.Test;
  9 import org.junit.runner.RunWith;
 10 import org.springframework.data.domain.Sort;
 11 import org.springframework.data.domain.Sort.Direction;
 12 import org.springframework.data.mongodb.core.FindAndModifyOptions;
 13 import org.springframework.data.mongodb.core.MongoTemplate;
 14 import org.springframework.data.mongodb.core.query.Criteria;
 15 import org.springframework.data.mongodb.core.query.Query;
 16 import org.springframework.data.mongodb.core.query.Update;
 17 import org.springframework.test.context.ContextConfiguration;
 18 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
 19 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 20
 21 import com.mongodb.WriteResult;
 22
 23 @RunWith(SpringJUnit4ClassRunner.class)
 24 @ContextConfiguration(locations = "classpath:spring-config-mongodb.xml")
 25 public class MongoTest extends AbstractJUnit4SpringContextTests {
 26
 27     @Resource
 28     private MongoTemplate mongoTemplate;
 29
 30     @Test
 31     public void testAddDoc() {
 32         Person p = new Person("Joe", 34);
 33         Person p2 = new Person("1001", "Joe", 34);
 34         Person p11 = new Person("1011", "zhangsan", 20);
 35         Person p12 = new Person("1012", "zhangsan2", 21);
 36         Person p13 = new Person("1013", "zhangsan3", 23);
 37         List<Person> list = new ArrayList<Person>();
 38         list.add(p11);
 39         list.add(p12);
 40         list.add(p13);
 41         this.mongoTemplate.insert(p);// 默认保存在person集合中(与类名称一致)
 42         this.mongoTemplate.insert(p2, "person2");// 指定保存在person2集合中
 43         this.mongoTemplate.insertAll(list);// 默认保存在person集合中(与类名称一致)
 44         // mongoTemplate.insert(list, collectionName);//指定保存的集合
 45         // mongoTemplate.insert(list, Person.class);// 默认保存在person集合中(与类名称一致)
 46     }
 47
 48     @Test
 49     public  void testFindDoc() {
 50         // 根据id查询,此id为mongo生成的id
 51         Person person = this.mongoTemplate.findById("1011", Person.class);
 52         System.out.println(person);
 53
 54         // 使用query对象查询
 55         Query query = new Query(Criteria.where("age").is(34));
 56         person = this.mongoTemplate.findOne(query, Person.class);
 57         System.out.println(person);
 58
 59         // 使用query对象查询列表
 60         query = new Query(Criteria.where("age").lt(30)).// age小于30
 61                 with(new Sort(Direction.ASC, "age"));// age 升序
 62         // query.with(Pageable );//可分页查询
 63
 64         List<Person> list = this.mongoTemplate.find(query.with(new Sort(Direction.ASC, "age")), Person.class);
 65         System.out.println(list);
 66     }
 67
 68     @Test
 69     public void testUpdateDoc() {
 70         // age为34的person,age加1
 71         Query query = new Query(Criteria.where("id").is(1011));
 72         Update update = new Update().inc("age", 1);
 73         Person p = this.mongoTemplate.findAndModify(query, update, Person.class);
 74         System.out.println(p);
 75
 76         p = this.mongoTemplate.findAndModify(query, update, new FindAndModifyOptions().returnNew(true), Person.class);// returnNew(true)将更新后的对象返回
 77         System.out.println(p);
 78
 79         // 将age为21的name改成zhangsan22,如果有多个age为21的,则只改变第一个
 80         query = new Query(Criteria.where("age").is(21));
 81         update = new Update().set("name", "zhangsan22");
 82         WriteResult result = this.mongoTemplate.updateFirst(query, update, Person.class);
 83         System.out.println(result);
 84
 85         // 将age为21的name改成zhangsan22,如果有多个age为21的,全部更新
 86         result = mongoTemplate.upsert(query, update, Person.class);
 87         System.out.println(result);
 88     }
 89
 90
 91     @Test
 92     public void testRemoveDoc(){
 93         Query query = new Query(Criteria.where("age").is(35));
 94         // mongoTemplate.findAndRemove(query, Person.class);//删除文档
 95         // mongoTemplate.findAndRemove(query, Person.class,
 96         // collectionName)//删除指定集合内的文档
 97         Person person = this.mongoTemplate.findOne(query, Person.class);
 98         WriteResult result = this.mongoTemplate.remove(person);
 99         System.out.println(result);
100         this.mongoTemplate.remove(query, Person.class);// 根据query对象删除文档
101
102         // mongoTemplate.remove(person, collection);//从指定的集合中删除文档
103         // mongoTemplate.remove(query, collectionName);//从指定的集合中根据query对象删除文档
104         // mongoTemplate.remove(query, entityClass, collectionName)//从指定的集合中根据query对象和class类型删除文档
105
106     }
107
108 }
时间: 2024-10-13 06:28:25

mongodb--与spring整合的相关文章

像我这样优雅地进行Spring整合MongoDB

本文重点是要将mongodb与spring整合到项目中去,在实践中发现问题,追踪问题,然后解决问题. 一.准备 Maven.Spring(spring-data-mongodb) spring Data for MongoDB是Spring Data的一个子模块. 目标是为mongodb提供一个相近的一致的基于Spring的编程模型. Spring Data for MongoDB核心功能是映射POJO到Mongo的DBCollection中的文档,并且提供Repository 风格数据访问层.

MongoDB与SpringBoot整合(支持事务)

1.创建SpringBoot工程,选择 Web.MonogDB 依赖,pom如下: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> <!-- loo

springMVC+MyBatis+Spring 整合(3)

spring mvc 与mybatis 的整合. 加入配置文件: spring-mybaits.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xm

Spring整合Struts2

Spring整合Struts21整合目的:让Spring的IOC容器去管理Struts2的Action, 2Struts2是web开源框架,Spring要整合Struts2,也就是说要在web应用使用Spring①. 需要额外加入的 jar 包:spring-web-4.0.0.RELEASE.jarspring-webmvc-4.0.0.RELEASE.jar ②. Spring 的配置文件, 和非 WEB 环境没有什么不同 ③. 需要在 web.xml 文件中加入如下配置: <!-- 配置

Spring整合hibernate4:事务管理

Spring和Hibernate整合后,通过Hibernate API进行数据库操作时发现每次都要opensession,close,beginTransaction,commit,这些都是重复的工作,我们可以把事务管理部分交给spring框架完成. 配置事务(xml方式) 使用spring管理事务后在dao中不再需要调用beginTransaction和commit,也不需要调用session.close(),使用API  sessionFactory.getCurrentSession()来

springMVC+MyBatis+Spring 整合(4) ---解决Spring MVC 对AOP不起作用的问题

解决Spring MVC 对AOP不起作用的问题 分类: SpringMVC3x+Spring3x+MyBatis3x myibaits spring J2EE2013-11-21 11:22 640人阅读 评论(1) 收藏 举报 用的是 SSM3的框架 Spring MVC 3.1 + Spring 3.1 + Mybatis3.1第一种情况:Spring MVC 和 Spring 整合的时候,SpringMVC的springmvc.xml文件中 配置扫描包,不要包含 service的注解,S

Spring整合MyBatis

首先下载jar包  mybatis-spring.jar 原因spring3.0出来的早,MyBatis3.0晚,意味着Spring不愿意去在一个没有做出发布版本的MyBatis上做过多的设置.所以,最终jar包提供者第三方. <!--Mybatis+Spring整合--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId&g

JMS 之 Active MQ 的spring整合

一.与spring整合实现ptp的同步接收消息 pom.xml: <!-- https://mvnrepository.com/artifact/org.springframework/spring-jms --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>4.3.7.RE

8 -- 深入使用Spring -- 7...2 MVC框架与Spring整合的思考

8.7.2 MVC 框架与Spring整合的思考 对于一个基于B/S架构的JAVA EE 应用而言,用户请求总是向MVC框架的控制器请求,而当控制器拦截到用户请求后,必须调用业务逻辑组件来处理用户请求.此时有一个问题:控制器应该如何获得业务逻辑组件? 最容易想到的策略是,直接通过new 关键字创建业务逻辑组件,然后调用业务逻辑组件的方法,根据业务逻辑方法的返回值确定结果. 在实际的应用中,很少见到采用上面的访问策略,因为这是一种非常差的策略.不这样做至少有如下三个原因: ⊙ 控制器直接创建业务逻

Spring整合strus2简单应用总结

本身strus2没接触过,所以这块学的一知半解,正常不整合的还没学(接着学) step: 1.创建web工程 2.在/WEB-INF/lib引入jar包 asm-3.3.jarasm-commons-3.3.jarasm-tree-3.3.jarcom.springsource.net.sf.cglib-2.2.0.jarcom.springsource.org.aopalliance-1.0.0.jarcom.springsource.org.aspectj.weaver-1.6.8.RELE