`
zjnbshifox
  • 浏览: 316082 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

Spring data MongoDB DSL

阅读更多
这两天自己配置了一个通过Spring Data来连接Mongodb的测试项目,并采用dsl来进行查询和分页,首先是pom
<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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.nbrc</groupId>
	<artifactId>sample</artifactId>
	<packaging>jar</packaging>
	<version>1.0-SNAPSHOT</version>
	<name>sample mongodb</name>

	<properties>
		<spring.version>3.2.1.RELEASE</spring.version>
		<spring.data.mongo.version>1.1.1.RELEASE</spring.data.mongo.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>

		<!-- Spring 3 dependencies -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>

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

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</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-aop</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-mongodb</artifactId>
			<version>${spring.data.mongo.version}</version>
		</dependency>

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

		<!-- MongoDB Java Driver -->
		<dependency>
			<groupId>org.mongodb</groupId>
			<artifactId>mongo-java-driver</artifactId>
			<version>2.7.1</version>
		</dependency>

		<dependency>
			<groupId>cglib</groupId>
			<artifactId>cglib</artifactId>
			<version>2.2</version>
		</dependency>
		<dependency>
			<groupId>com.mysema.querydsl</groupId>
			<artifactId>querydsl-core</artifactId>
			<version>2.9.0</version>
		</dependency>
		<dependency>
			<groupId>com.mysema.querydsl</groupId>
			<artifactId>querydsl-apt</artifactId>
			<version>2.9.0</version>
		</dependency>

		<dependency>
			<groupId>com.mysema.querydsl</groupId>
			<artifactId>querydsl-mongodb</artifactId>
			<version>2.9.0</version>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.10</version>
			<scope>test</scope>
		</dependency>


	</dependencies>

	<build>
		<plugins>

			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.0.2</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>

			<plugin>
				<groupId>com.mysema.maven</groupId>
				<artifactId>apt-maven-plugin</artifactId>
				<version>1.0.6</version>
				<executions>
					<execution>
						<phase>generate-sources</phase>
                        <goals>
                            <goal>process</goal>
                        </goals>
						<configuration>
							<outputDirectory>target/generated-sources/java</outputDirectory>
							<processor>org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor</processor>
							<logOnlyOnError>true</logOnlyOnError>
						</configuration>
					</execution>
				</executions>
			</plugin>

		</plugins>
		
	</build>

	<repositories>

		<repository>
			<id>spring-maven-release</id>
			<name>Spring Maven Release Repository</name>
			<url>http://maven.springframework.org/release</url>
		</repository>

		<repository>
			<id>querydsl-releases</id>
			<name>Query DSL</name>
			<url>http://source.mysema.com/maven2/releases</url>
		</repository>

	</repositories>


</project>


然后是spring的配置文件
<?xml version="1.0"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mongo="http://www.springframework.org/schema/data/mongo"
	xmlns:tx="http://www.springframework.org/schema/tx"

	xsi:schemaLocation="
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/data/mongo
        http://www.springframework.org/schema/data/mongo/spring-mongo.xsd        
        ">

	<!-- Connection to MongoDB server -->
	<mongo:db-factory host="localhost" port="27017"
		dbname="mytest" />
	<!-- MongoDB Template -->
	<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
		<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
	</bean>

	<!-- Package w/ automagic repositories -->
	<mongo:repositories base-package="com.nbrc.sample.repository" />

	<context:annotation-config />

	<context:component-scan base-package="com.nbrc">
		<context:exclude-filter type="annotation"
			expression="org.springframework.stereotype.Controller" />
	</context:component-scan>

</beans>

Document的映射
package com.nbrc.sample.mapping;

import java.util.HashSet;
import java.util.Set;

import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

@Document
public class Customer extends AbstractDocument {
	private String firstname, lastname;
	@Field("email")
	private EmailAddress emailAddress;
	private Set<Address> addresses = new HashSet<Address>();

	public Customer(String firstname, String lastname) {
		this.firstname = firstname;
		this.lastname = lastname;
	}
     //getter and setter

}


Repository
package com.nbrc.sample.repository;

import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

import com.nbrc.sample.mapping.Customer;
@Repository
public interface CustomerRepository 
	extends CrudRepository<Customer, ObjectId> ,QueryDslPredicateExecutor<Customer>{
	
}


测试代码如下:
package com.nbrc.sample;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;

import com.nbrc.sample.mapping.Customer;
import com.nbrc.sample.mapping.EmailAddress;
import com.nbrc.sample.mapping.QCustomer;
import com.nbrc.sample.repository.CustomerRepository;

@ContextConfiguration(locations={"classpath:mongodb/mongotest-context.xml"})
public class TestMongo extends AbstractJUnit4SpringContextTests {
	@Autowired
	CustomerRepository repo;
	@Before
	public void setup(){
		for(int i=0;i<=10;i++){
			Customer c = new Customer("fox" + i , "red" + i);
			//c.setEmailAddress(new EmailAddress("zjnb" + i + "@163.com"));
			repo.save(c);
		}		
	}
	
	@Test
	public void testpage(){
		QCustomer query = QCustomer.customer;
		PageRequest pr = new PageRequest(1, 3);
		
		Page<Customer> pg = repo.findAll(query.firstname.like("%f%"), pr);
		
		Assert.assertNotNull(pg);
		Assert.assertTrue(pg.getSize()==3);
		
		Customer c = pg.getContent().get(0);
		System.out.println(c.getId());
		Assert.assertEquals("fox3", c.getFirstname());

	}
	
	@After
	public void clear(){
		repo.deleteAll();
	}
	
}

这里有一个问题,在eclipse里面,似乎不会自动生成QCustomer这些查询类,需要按Ctrl+F11打开Maven的任务列表运行Generate source,才会在target目录下生成QCustomer,还需要复制到src/main/java下才可以,对maven插件不熟,不知道有什么插件可以自动将那个目录加为src目录
分享到:
评论

相关推荐

    springdata mongodb api文档

    当需要扩展SpringData的功能时,SpringData MongoDB也提供了一定的扩展机制,例如使用Query DSL扩展进行复杂查询,或者使用Web支持来构建基于SpringData MongoDB的Web应用。 对于那些希望了解如何使用SpringData ...

    spring-boot-reference.pdf

    Spring Data MongoDB Repositories 30.2.4. Embedded Mongo 30.3. Neo4j 30.3.1. Connecting to a Neo4j Database 30.3.2. Using the Embedded Mode 30.3.3. Neo4jSession 30.3.4. Spring Data Neo4j Repositories ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    9.4.5 Spring Integration Java DSL 400 9.4.6 实战 400 第10 章 Spring Boot 开发部署与测试 407 10.1 开发的热部署 407 10.1.1 模板热部署 407 10.1.2 Spring Loaded 407 10.1.3 JRebel 409 10.1.4 spring-boot-...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    9.4.5 Spring Integration Java DSL 400 9.4.6 实战 400 第10 章 Spring Boot 开发部署与测试 407 10.1 开发的热部署 407 10.1.1 模板热部署 407 10.1.2 Spring Loaded 407 10.1.3 JRebel 409 10.1.4 spring-boot-...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    9.4.5 Spring Integration Java DSL 400 9.4.6 实战 400 第10 章 Spring Boot 开发部署与测试 407 10.1 开发的热部署 407 10.1.1 模板热部署 407 10.1.2 Spring Loaded 407 10.1.3 JRebel 409 10.1.4 spring-boot-...

    spring4.0 包

    Spring Data项目在4.0中继续发展,对JPA、MongoDB等数据访问技术的集成更加强大,提供了更多的查询方法和便捷的Repository接口。 10. **异步方法调用**: Spring 4.0允许使用`@Async`注解标记方法以实现异步执行...

    springboot参考指南

    Spring Data MongoDB仓库 iii. 29.3. Gemfire iv. 29.4. Solr i. 29.4.1. 连接Solr ii. 29.4.2. Spring Data Solr仓库 v. 29.5. Elasticsearch i. 29.5.1. 连接Elasticsearch ii. 29.5.2. Spring Data Elasticseach...

    java-spring-base:JavaSpring Base项目供其他项目使用

    Spring Data是一个用于简化数据访问层开发的模块,它支持JPA、JDBC、MongoDB等多种数据存储方式。Spring Data提供了自动化的Repository接口实现,使得数据库操作更加简单。 6. **Spring Security** Spring ...

    spring-mastering-5.x

    Spring Data项目在5.x版本中也有所更新,支持更多数据存储技术,如MongoDB、Cassandra等,并且增强了对JPA(Java Persistence API)的集成,提供更强大的查询功能。 5. **JDBC和JPA改进** Spring 5.x对JDBC和JPA...

    Java与微服务架构.pptx

    在数据库访问方面,Java支持JDBC的内嵌数据库如h2database,以及NoSQL数据库如Redis、MongoDB和Solr,可以通过Spring Data框架进行集成。 总的来说,Java在微服务架构中扮演着重要角色,其丰富的生态系统提供了多种...

    基于springboot的医院信息管理系统源码.zip

    例如,引入了Spring Data JPA依赖后,SpringBoot会自动配置数据源、事务管理器以及JPA的相关配置。 3. **Web开发**:SpringBoot内置了Spring MVC,用于构建RESTful API。在医院信息管理系统中,Web接口通常用于医生...

    基于springboot的知识图谱的中文症状问答系统.zip

    1. **环境搭建**:首先,需要安装JDK和设置环境变量,然后通过Spring Initializr初始化项目,选择所需的依赖项,如Spring Web、Data JPA、Thymeleaf等。 2. **数据库连接**:SpringBoot可以方便地与各种数据库集成,...

    apache-camel-2.3.0.zip

    3. **数据转换**:Camel内置了数据转换工具,如Simple语言用于表达式和条件语句,以及DataFormat组件用于数据的序列化和反序列化。 4. **错误处理和事务管理**:Camel提供了强大的错误处理机制,包括异常处理、重试...

    安装教程总结_Elasticsearch

    这里展示了基于Spring Data Elasticsearch Query的接口测试: #### 4.1 测试数据 创建相关的索引和文档,如城市信息,包含名称和描述等字段。 #### 4.2 测试结果 测试代码执行后,会返回查询结果。例如,当搜索...

    SEF_Project

    如果项目使用Spring,那么了解IoC容器、Spring Boot、Spring MVC和Spring Data等相关概念将很有帮助。 4. **JUnit测试**:Java项目通常包含测试代码,以确保功能的正确性。JUnit是Java最常用的单元测试框架,项目中...

    camel-manual-2.0

    - **MongoDB**: For working with MongoDB databases. - **Mail**: For sending and receiving emails. #### Conclusion Apache Camel 2.0 is a powerful integration framework that simplifies the ...

    querydsl

    9. **灵活性**:Querydsl 可以用于任何提供 JPA-like API 的库,如 Spring Data JPA,也可以用于非关系型数据库如 MongoDB,甚至是 Lucene 等全文搜索引擎。 10. **性能优化**:由于 Querydsl 的查询表达式是在编译...

Global site tag (gtag.js) - Google Analytics