`
zjnbshifox
  • 浏览: 312551 次
  • 性别: 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目录
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics