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

MongoDB学习笔记之 第4章 MongoDB整合Spring

 
阅读更多

 第4章 MongoDB整合Spring

(黎明你好原创作品,转载请注明)

4.1 创建maven项目

4.1.1 repositories

创建maven项目,其中repositories使用spring的maven库:

 

<repositories>
	<repository>
		<id>central</id>
		<name>Maven Central</name>
		<url>http://repo1.maven.org/maven2/</url>
	</repository>
	<repository>
		<id>spring-release</id>
		<name>Spring Maven Release Repository</name>
		<url>http://repo.springsource.org/libs-release</url>
	</repository>
	<repository>
		<id>atlassian-m2-repository</id>
		<url>https://m2proxy.atlassian.com/repository/public</url>
	</repository>
</repositories>

 

4.1.2 Dependencies

使用到的jar包:

 

<dependencies>
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>servlet-api</artifactId>
		<version>2.5</version>
		<type>jar</type>
		<scope>provided</scope>
	</dependency>
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-api</artifactId>
		<version>1.6.1</version>
		<type>jar</type>
		<scope>compile</scope>
	</dependency>
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-log4j12</artifactId>
		<version>1.7.5</version>
		<type>jar</type>
		<scope>runtime</scope>
	</dependency>
	<dependency>
		<groupId>org.mongodb</groupId>
		<artifactId>mongo-java-driver</artifactId>
		<version>2.10.1</version>
		<type>jar</type>
		<scope>compile</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework.data</groupId>
		<artifactId>spring-data-mongodb</artifactId>
		<version>1.2.1.RELEASE</version>
		<type>jar</type>
		<scope>compile</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework.data</groupId>
		<artifactId>spring-data-mongodb-cross-store</artifactId>
		<version>1.2.1.RELEASE</version>
		<type>jar</type>
		<scope>compile</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework.data</groupId>
		<artifactId>spring-data-mongodb-log4j</artifactId>
		<version>1.2.1.RELEASE</version>
		<type>jar</type>
		<scope>compile</scope>
	</dependency>
</dependencies>

 

 

4.2 添加spring配置文件

spring的配置文件applicationContext.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/beans
        http://www.springframework.org/schema/beans/spring-beans-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/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<context:component-scan base-package="liming.mongodb.example" />

	<mongo:mongo host="127.0.0.1" port="27017" />

	<!-- mongo的工厂,通过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动创建 -->
	<mongo:db-factory dbname="student" mongo-ref="mongo" />

	<!-- mongodb的主要操作对象,所有对mongodb的增删改查的操作都是通过它完成 -->
	<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
		<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
	</bean>

	<!-- 映射转换器,扫描back-package目录下的文件,根据注释,把它们作为mongodb的一个collection的映射 -->
	<mongo:mapping-converter base-package="climing.mongodb.example.data.model" />

	<!-- mongodb bean的仓库目录,会自动扫描扩展了MongoRepository接口的接口进行注入 -->
	<mongo:repositories base-package="liming.mongodb.example.data.impl" />

	<context:annotation-config />

</beans>

 

 

 

4.3 增删改查

Userl实现的增删改查:

4.3.1UserEntity

 

package liming.mongodb.example.data.model;

import java.util.Date;

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

@Document(collection = "user")
public class UserEntity {

	@Id
	private String id;
	private NameEntity name;
	private int age;
	private int works;
	private Date birth;
	private String password;
	private String regionName;
	private String[] special;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public NameEntity getName() {
		return name;
	}

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

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getWorks() {
		return works;
	}

	public void setWorks(int works) {
		this.works = works;
	}

	public Date getBirth() {
		return birth;
	}

	public void setBirth(Date birth) {
		this.birth = birth;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getRegionName() {
		return regionName;
	}

	public void setRegionName(String regionName) {
		this.regionName = regionName;
	}

	public String[] getSpecial() {
		return special;
	}

	public void setSpecial(String[] special) {
		this.special = special;
	}

}

 

 

4.3.2 NameEntity

 

package liming.mongodb.example.data.model;

public class NameEntity {

	private String username;

	private String nickname;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getNickname() {
		return nickname;
	}

	public void setNickname(String nickname) {
		this.nickname = nickname;
	}

}

 

 

4.3.3 UserDao

 

package liming.mongodb.example.data;

import java.util.List;

import liming.mongodb.example.data.model.UserEntity;

import org.springframework.transaction.annotation.Transactional;

@Transactional
public interface UserDao {

	public abstract void _test();

	public abstract void createCollection();

	public abstract List<UserEntity> findList(int skip, int limit);

	public abstract List<UserEntity> findListByAge(int age);

	public abstract UserEntity findOne(String id);

	public abstract UserEntity findOneByUsername(String username);

	public abstract void insert(UserEntity entity);

	public abstract void update(UserEntity entity);

}

 

 

4.3.4 UserDaoImpl

 

package liming.mongodb.example.data.impl;

import java.util.List;
import java.util.Set;

import liming.mongodb.example.data.UserDao;
import liming.mongodb.example.data.model.UserEntity;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.domain.Sort.Order;
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 org.springframework.stereotype.Repository;

import com.mongodb.DB;

@Repository
public class UserDaoImpl implements UserDao {

	public static final Logger logger = LoggerFactory.getLogger(UserDaoImpl.class);

	@Autowired
	private MongoTemplate mongoTemplate;

	@Override
	public void _test() {
		Set<String> colls = this.mongoTemplate.getCollectionNames();
		for (String coll : colls) {
			logger.info("CollectionName=" + coll);
		}
		DB db = this.mongoTemplate.getDb();
		logger.info("db=" + db.toString());
	}

	@Override
	public void createCollection() {
		if (!this.mongoTemplate.collectionExists(UserEntity.class)) {
			this.mongoTemplate.createCollection(UserEntity.class);
		}
	}

	@Override
	public List<UserEntity> findList(int skip, int limit) {
		Query query = new Query();
		query.with(new Sort(new Order(Direction.ASC, "_id")));
		query.skip(skip).limit(limit);
		return this.mongoTemplate.find(query, UserEntity.class);
	}

	@Override
	public List<UserEntity> findListByAge(int age) {
		Query query = new Query();
		query.addCriteria(new Criteria("age").is(age));
		return this.mongoTemplate.find(query, UserEntity.class);
	}

	@Override
	public UserEntity findOne(String id) {
		Query query = new Query();
		query.addCriteria(new Criteria("_id").is(id));
		return this.mongoTemplate.findOne(query, UserEntity.class);
	}

	@Override
	public UserEntity findOneByUsername(String username) {
		Query query = new Query();
		query.addCriteria(new Criteria("name.username").is(username));
		return this.mongoTemplate.findOne(query, UserEntity.class);
	}

	@Override
	public void insert(UserEntity entity) {
		this.mongoTemplate.insert(entity);

	}

	@Override
	public void update(UserEntity entity) {
		Query query = new Query();
		query.addCriteria(new Criteria("_id").is(entity.getId()));
		Update update = new Update();
		update.set("age", entity.getAge());
		update.set("password", entity.getPassword());
		update.set("regionName", entity.getRegionName());
		update.set("special", entity.getSpecial());
		update.set("works", entity.getWorks());
		update.set("name", entity.getName());
		this.mongoTemplate.updateFirst(query, update, UserEntity.class);

	}

}

 

 

4.3.5 测试代码

 

package liming.mongodb.example;

import java.util.Arrays;
import java.util.Date;
import java.util.List;

import liming.mongodb.example.data.UserDao;
import liming.mongodb.example.data.impl.UserDaoImpl;
import liming.mongodb.example.data.model.UserEntity;

import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ApplicationSpring {

	public static void main(String[] args) {

		System.out.println("Bootstrapping HelloMongo");

		ConfigurableApplicationContext context = null;
		context = new ClassPathXmlApplicationContext("applicationContext.xml");

		UserDao userDao = context.getBean(UserDaoImpl.class);
	        userDao._test();
		UserEntity entity1 = new UserEntity();
		entity1.setId("5");
		entity1.setAge(1);
		entity1.setBirth(new Date());
		entity1.setPassword("asdfasdf");
		entity1.setRegionName("北京");
		entity1.setWorks(1);
		userDao.insert(entity1);
		userDao.update(entity1);
		userDao.createCollection();
	
		List<UserEntity> list = userDao.findList(0, 10);
		for (UserEntity e : list) {
			System.out.println("all - id=" + e.getId() + ", age=" + e.getAge() + ", password=" + e.getPassword() + ", regionName=" + e.getRegionName() + ", special=" + Arrays.toString(e.getSpecial())
					+ ", name=" + e.getName().getUsername() + "-" + e.getName().getNickname() + ", birth=" + e.getBirth());
		}

		list = userDao.findListByAge(1);
		for (UserEntity e : list) {
			System.out.println("age=1 - id=" + e.getId() + ", age=" + e.getAge() + ", password=" + e.getPassword() + ", regionName=" + e.getRegionName() + ", special="
					+ Arrays.toString(e.getSpecial()) + ", name=" + e.getName().getUsername() + "-" + e.getName().getNickname() + ", birth=" + e.getBirth());
		}

		UserEntity e = userDao.findOne("1");
		System.out.println("id=1 - id=" + e.getId() + ", age=" + e.getAge() + ", password=" + e.getPassword() + ", regionName=" + e.getRegionName() + ", special=" + Arrays.toString(e.getSpecial())
				+ ", name=" + e.getName().getUsername() + "-" + e.getName().getNickname() + ", birth=" + e.getBirth());

		e = userDao.findOneByUsername("limingnihao");
		System.out.println("username=limingnihao - id=" + e.getId() + ", age=" + e.getAge() + ", password=" + e.getPassword() + ", regionName=" + e.getRegionName() + ", special="
				+ Arrays.toString(e.getSpecial()) + ", name=" + e.getName().getUsername() + "-" + e.getName().getNickname() + ", birth=" + e.getBirth());

		
		System.out.println("DONE!");
	}

}

 

 

  • 大小: 9.1 KB
分享到:
评论
4 楼 Mir_Jason 2015-04-12  
你好,我想问问这些架包,对于程序滴运行具体是什么作用?
[size=xx-small]
引用
[/size]
3 楼 accphc 2015-02-12  
The Mongo object instance actually represents a pool of connections to the database; you will only need one object of class Mongo even with multiple threads.  See the concurrency doc page for more information.

The Mongo class is designed to be thread safe and shared among threads. Typically you create only 1 instance for a given DB cluster and use it across your app. If for some reason you decide to create many mongo intances, note that:

all resource usage limits (max connections, etc) apply per mongo instance
to dispose of an instance, make sure you call mongo.close() to clean up resources
2 楼 s33ker 2014-02-21  
s33ker 写道
applicationContext.xml里面 这个地方
<mongo:mongo host="127.0.0.1" port="27017"></mongo:mongo>
报错:Error occured processing XML 'org/springframework/data/mongodb/core/MongoFactoryBean'. See Error Log for more details
是什么情况


解决了 缺spring-tx包
1 楼 s33ker 2014-02-21  
applicationContext.xml里面 这个地方
<mongo:mongo host="127.0.0.1" port="27017"></mongo:mongo>
报错:Error occured processing XML 'org/springframework/data/mongodb/core/MongoFactoryBean'. See Error Log for more details
是什么情况

相关推荐

    Spring学习笔记.zip

    根据提供的压缩包文件名,我们可以推测这是一个逐步学习Spring的系列笔记。从"Spring_day1"开始,可能涵盖了Spring的基础概念、环境搭建和基本配置。"Spring_day2"可能涉及了依赖注入和AOP的深入讲解。"Spring_day3...

    spring5学习笔记

    本学习笔记将深入探讨Spring 5的各个方面,包括基本概念、配置、核心组件以及最新特性。 首先,我们来了解一下Spring框架的核心概念。Spring的核心是IoC(Inversion of Control)容器,它负责管理对象的生命周期和...

    mongodb一些笔记

    MongoDB是一种流行的开源文档数据库系统,属于...这些笔记和教程涵盖了MongoDB的基础知识到高级用法,对于学习和理解MongoDB的操作和特性非常有帮助。通过阅读提供的文档,可以深入学习MongoDB的使用技巧和最佳实践。

    Spring5笔记与代码.zip

    《Spring5笔记与代码》是针对Spring框架第五个主要版本的学习资源,包含了理论知识和实践代码,旨在帮助用户深入理解并掌握Spring5的核心概念和技术。本文将详细解析这些知识点,并结合提供的文件进行深入探讨。 ...

    java框架学习笔记spring笔记

    Spring 框架是 Java 开发中的核心框架之一,它为构建企业级应用程序提供了一个全面的编程和配置模型。Spring 的设计理念是“依赖注入”(Dependency Injection,简称 DI)和面向切面编程(Aspect-Oriented ...

    spring 学习笔记

    下面将根据“spring 学习笔记”的主题,对Spring框架进行深入的探讨。 一、依赖注入(DI) 依赖注入是Spring的核心功能,它允许对象之间的依赖关系在运行时动态地管理和配置,而不是在代码中硬编码。这样可以提高...

    spring第一次课笔记

    本笔记将详细解析Spring框架的基础知识,帮助你更好地理解并掌握Spring的核心概念。 首先,我们需要了解Spring框架的主要模块: 1. **核心容器**:这是Spring框架的基础,包括BeanFactory和ApplicationContext。...

    达内,tarena,spring笔记,springPPT课件,达内spring笔记

    达内教育(Tarena)作为知名的IT培训机构,提供了这套Spring的学习资料,包括笔记和PPT课件,旨在帮助学员全面掌握Spring的核心概念和技术。 Spring笔记可能涵盖了以下内容: 1. **IoC(Inversion of Control)容器...

    spring笔记 spring开发教程

    这个"spring笔记"涵盖了上述所有内容,并且非常完整,对于初学者和有经验的开发者都是极好的学习资源。通过深入学习和实践,你将能够充分利用Spring框架的强大功能,提升你的开发效率和应用质量。

    Spring学习笔记

    这份“Spring学习笔记”涵盖了Spring框架的核心概念和技术,旨在帮助初学者和经验丰富的开发者深入理解并掌握Spring。以下是对笔记内容的详细概述: 一、Spring框架概述 Spring是一个开源的企业级Java应用框架,它...

    spring框架学习笔记

    面向抽象编程是Spring框架的基础理念之一,它鼓励开发者在设计和实现时更多地考虑接口和抽象类,而不是具体的实现。这样可以降低模块间的耦合度,提高代码的可扩展性和可维护性。在Spring中,通过定义接口并配置...

    spring学习笔记

    这份"Spring学习笔记"包含了对这个强大框架的深入理解和实践指导,对于初学者来说是一份宝贵的资源。 1. **Spring框架简介** - Spring是一个开源的Java平台,主要为了解决企业应用开发的复杂性而设计。 - 它提供...

    spring Data笔记和代码

    通过学习和应用Spring Data,开发者可以更专注于业务逻辑,而不是数据访问层的实现细节,从而提高开发效率和代码质量。无论是使用关系型数据库还是NoSQL数据库,Spring Data都能提供一致的编程模型和强大的查询能力...

    spring-data的学习笔记

    ### SpringData知识点详解 #### SpringData简介 SpringData是Spring框架下的一个重要子项目,它的主要目标是为开发者提供一种统一的方式来访问不同的数据存储系统。通过SpringData,开发者能够以一致的方式处理不同...

    Spring 学习笔记

    依赖注入是 Spring 的核心功能之一,它允许组件之间的依赖关系在运行时由外部容器进行管理,而不是由组件自身负责查找和创建依赖对象。这提高了代码的可测试性、可维护性和解耦性。 **面向切面编程(AOP)** AOP ...

    狂神Spring5视频MD笔记+源码.7z

    而"Spring学习笔记.md"和"Spring学习目录.md"则可能是作者观看视频后的学习记录,其中可能包含了对Spring关键概念、API使用方法的详细解释和示例,是学习Spring的宝贵资源。 "img"文件夹可能包含了一些图表或示意图...

    Spring-data-jpa 学习笔记.docx

    ### Spring-data-jpa 学习笔记 #### 一、spring-data-jpa的简单介绍 Spring Data JPA 是 Spring Data 的一部分,它简化了基于 Java Persistence API (JPA) 的数据访问层开发工作。Spring Data 旨在减少数据访问层...

    spring入门笔记源码

    这份"Spring 入门笔记源码"旨在帮助初学者快速掌握 Spring 的基本概念和使用方法。 首先,我们从"readme"开始,通常这是一个介绍性文档,可能包含了源码的结构、使用方法、注意事项等关键信息。在学习源码前,阅读 ...

    Spring Boot 笔记.rar

    尚硅谷的 Spring Boot 笔记提供了全面的学习资源,帮助学习者深入理解并掌握这个强大的框架。 1. **起步依赖(Starters)** Spring Boot 的核心特性之一是起步依赖,它们是一系列预先配置好的 Maven 或 Gradle ...

Global site tag (gtag.js) - Google Analytics