文档章节

Spring整合- mongodb

明舞
 明舞
发布于 2014/12/29 17:10
字数 1477
阅读 62
收藏 0

1.环境

     Jdk:1.6.0_10-rc2

     Spring3.1.2  下载

     依赖jar文件:

  

2.相关配置

①.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: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/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">
	
	<mongo:mongo id="mongo"  host="127.0.0.1" port="27017"	/>
	
	<bean id="userCredentials" class="org.springframework.data.authentication.UserCredentials">
		<constructor-arg name="username"  value="userName"/>
		<constructor-arg name="password"  value="password"/>
	</bean>
	
	<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
		<constructor-arg ref="mongo" />
		<constructor-arg value="test-mongo" />
		<constructor-arg ref="userCredentials" />
	</bean>
	
	<bean id="userDao" class="com.x.mongodb.dao.impl.UserDao" />
</beans>

②.MongoTemplate  Api

package com.x.mongodb.dao.support;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.data.mongodb.core.MongoTemplate;

/**
 * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a>
 * @version <b>1.0</b>
 */
public abstract class AbstractBaseMongoTemplete implements ApplicationContextAware {
	
	protected MongoTemplate mongoTemplate;

	/**
	 * 设置mongoTemplate
	 * @param mongoTemplate the mongoTemplate to set
	 */
	public void setMongoTemplate(MongoTemplate mongoTemplate) {
		this.mongoTemplate = mongoTemplate;
	}
	
	public void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException {
		MongoTemplate mongoTemplate = applicationContext.getBean("mongoTemplate", MongoTemplate.class);
		setMongoTemplate(mongoTemplate);
	}
}

package com.x.mongodb.dao.impl;

import java.util.List;

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 com.x.mongodb.dao.IUserDao;
import com.x.mongodb.dao.support.AbstractBaseMongoTemplete;
import com.x.mongodb.entity.User;

/**
 * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a>
 * @version <b>1.0</b>
 */
public class UserDao extends AbstractBaseMongoTemplete implements IUserDao {

	/**
	 * 新增
	 * <br>------------------------------<br>
	 * @param user
	 */
	public void insert(User user) {
		mongoTemplate.insert(user);
	}
	
	/**
	 * 批量新增
	 * <br>------------------------------<br>
	 * @param users
	 */
	public void insertAll(List<User> users) {
		mongoTemplate.insertAll(users);
	}
	
	/**
	 * 删除,按主键id, 如果主键的值为null,删除会失败
	 * <br>------------------------------<br>
	 * @param id
	 */
	public void deleteById(String id) {
		User user = new User(id, null, 0);
		mongoTemplate.remove(user);
	}
	
	/**
	 * 按条件删除
	 * <br>------------------------------<br>
	 * @param criteriaUser
	 */
	public void delete(User criteriaUser) {
		Criteria criteria = Criteria.where("age").gt(criteriaUser.getAge());;
		Query query = new Query(criteria);
		mongoTemplate.remove(query, User.class);
	}
	
	/**
	 * 删除全部
	 * <br>------------------------------<br>
	 */
	public void deleteAll() {
		mongoTemplate.dropCollection(User.class);
	}
	
	/**
	 * 按主键修改,
	 * 如果文档中没有相关key 会新增 使用$set修改器
	 * <br>------------------------------<br>
	 * @param user
	 */
	public void updateById(User user) {
		Criteria criteria = Criteria.where("id").is(user.getId());
		Query query = new Query(criteria);
		Update update = Update.update("age", user.getAge()).set("name", user.getName());
		mongoTemplate.updateFirst(query, update, User.class);
	}
	
	/**
	 * 修改多条
	 * <br>------------------------------<br>
	 * @param criteriaUser
	 * @param user
	 */
	public void update(User criteriaUser, User user) {
		Criteria criteria = Criteria.where("age").gt(criteriaUser.getAge());;
		Query query = new Query(criteria);
		Update update = Update.update("name", user.getName()).set("age", user.getAge());
		mongoTemplate.updateMulti(query, update, User.class);
	}
	
	/**
	 * 根据主键查询
	 * <br>------------------------------<br>
	 * @param id
	 * @return
	 */
	public User findById(String id) {
		return mongoTemplate.findById(id, User.class);
	}
	
	/**
	 * 查询全部
	 * <br>------------------------------<br>
	 * @return
	 */
	public List<User> findAll() {
		return mongoTemplate.findAll(User.class);
	}
	
	/**
	 * 按条件查询, 分页
	 * <br>------------------------------<br>
	 * @param criteriaUser
	 * @param skip
	 * @param limit
	 * @return
	 */
	public List<User> find(User criteriaUser, int skip, int limit) {
		Query query = getQuery(criteriaUser);
		query.skip(skip);
		query.limit(limit);
		return mongoTemplate.find(query, User.class);
	}
	
	/**
	 * 根据条件查询出来后 再去修改
	 * <br>------------------------------<br>
	 * @param criteriaUser  查询条件
	 * @param updateUser    修改的值对象
	 * @return
	 */
	public User findAndModify(User criteriaUser, User updateUser) {
		Query query = getQuery(criteriaUser);
		Update update = Update.update("age", updateUser.getAge()).set("name", updateUser.getName());
		return mongoTemplate.findAndModify(query, update, User.class);
	}
	
	/**
	 * 查询出来后 删除
	 * <br>------------------------------<br>
	 * @param criteriaUser
	 * @return
	 */
	public User findAndRemove(User criteriaUser) {
		Query query = getQuery(criteriaUser);
		return mongoTemplate.findAndRemove(query, User.class);
	}
	
	/**
	 * count
	 * <br>------------------------------<br>
	 * @param criteriaUser
	 * @return
	 */
	public long count(User criteriaUser) {
		Query query = getQuery(criteriaUser);
		return mongoTemplate.count(query, User.class);
	}

	/**
	 *
	 * <br>------------------------------<br>
	 * @param criteriaUser
	 * @return
	 */
	private Query getQuery(User criteriaUser) {
		if (criteriaUser == null) {
			criteriaUser = new User();
		}
		Query query = new Query();
		if (criteriaUser.getId() != null) {
			Criteria criteria = Criteria.where("id").is(criteriaUser.getId());
			query.addCriteria(criteria);
		}
		if (criteriaUser.getAge() > 0) {
			Criteria criteria = Criteria.where("age").gt(criteriaUser.getAge());
			query.addCriteria(criteria);
		}
		if (criteriaUser.getName() != null) {
			Criteria criteria = Criteria.where("name").regex("^" + criteriaUser.getName());
			query.addCriteria(criteria);
		}
		return query;
	}
}

package com.x.mongodb.dao;

import java.util.List;

import com.x.mongodb.entity.User;

/**
 * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a>
 * @version <b>1.0</b>
 */
public interface IUserDao {
	
	/**
	 * 新增
	 * <br>------------------------------<br>
	 * @param user
	 */
	void insert(User user);
	
	/**
	 * 新增
	 * <br>------------------------------<br>
	 * @param users
	 */
	void insertAll(List<User> users);
	
	/**
	 * 删除,主键id, 如果主键的值为null,删除会失败
	 * <br>------------------------------<br>
	 * @param id
	 */
	void deleteById(String id);
	
	/**
	 * 按条件删除
	 * <br>------------------------------<br>
	 * @param criteriaUser
	 */
	void delete(User criteriaUser);
	
	/**
	 * 删除全部
	 * <br>------------------------------<br>
	 */
	void deleteAll();
	
	/**
	 * 修改
	 * <br>------------------------------<br>
	 * @param user
	 */
	void updateById(User user);
	
	/**
	 * 更新多条
	 * <br>------------------------------<br>
	 * @param criteriaUser
	 * @param user
	 */
	void update(User criteriaUser, User user);
	
	/**
	 * 根据主键查询
	 * <br>------------------------------<br>
	 * @param id
	 * @return
	 */
	User findById(String id);
	
	/**
	 * 查询全部
	 * <br>------------------------------<br>
	 * @return
	 */
	List<User> findAll();
	
	/**
	 * 按条件查询
	 * <br>------------------------------<br>
	 * @param criteriaUser
	 * @param skip
	 * @param limit
	 * @return
	 */
	List<User> find(User criteriaUser, int skip, int limit);
	
	/**
	 * 根据条件查询出来后 在去修改
	 * <br>------------------------------<br>
	 * @param criteriaUser  查询条件
	 * @param updateUser    修改的值对象
	 * @return
	 */
	User findAndModify(User criteriaUser, User updateUser);
	
	/**
	 * 查询出来后 删除
	 * <br>------------------------------<br>
	 * @param criteriaUser
	 * @return
	 */
	User findAndRemove(User criteriaUser);
	
	/**
	 * count
	 * <br>------------------------------<br>
	 * @param criteriaUser
	 * @return
	 */
	long count(User criteriaUser);
}

package com.x.mongodb.entity;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a>
 * @version <b>1.0</b>
 */
public class User implements Serializable {

	private static final long serialVersionUID = -5785857960597910259L;
	
	private String id;
	
	private String name;
	
	private int age;
	
	/**
	 * <br>------------------------------<br>
	 */
	public User() {
	}

	/**
	 * 
	 * <br>------------------------------<br>
	 * @param id
	 * @param name
	 * @param age
	 */
	public User(String id, String name, int age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}

	/**
	 * 获得id
	 * @return the id
	 */
	public String getId() {
		return id;
	}

	/**
	 * 设置id
	 * @param id the id to set
	 */
	public void setId(String id) {
		this.id = id;
	}

	/**
	 * 获得name
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * 设置name
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * 获得age
	 * @return the age
	 */
	public int getAge() {
		return age;
	}

	/**
	 * 设置age
	 * @param age the age to set
	 */
	public void setAge(int age) {
		this.age = age;
	}
	
	/**
	 * toString
	 */
	public String toString() {
		Map<String, String> map = new HashMap<String, String>();
		map.put("id", id);
		map.put("name", name);
		map.put("age", String.valueOf(age));
		return map.toString();
	}
}

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.x.mongodb.dao.IUserDao;
import com.x.mongodb.entity.User;

/**
 * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a>
 * @version <b>1.0</b>
 */
public class UserDaoTest {
	
	/**
	 * 新增 
	 * <br>------------------------------<br>
	 */
	@Test
	public void testInsert() {
		getUserDao().insert(new User(null, "testUser", 21));
	}
	
	/**
	 * 批量新增 
	 * <br>------------------------------<br>
	 */
	@Test
	public void testInsertAll() {
		List<User> list = new ArrayList<User>();
		for (int i = 0; i < 10; i++) {
			list.add(new User(null, "testUser" + i, 21 + i));
		}
		getUserDao().insertAll(list);
	}
	
	/**
	 * 根据主键删除 
	 * <br>------------------------------<br>
	 */
	@Test
	public void testDeleteById() {
		String id = "5058184ec85607e42c4bfad8";
		getUserDao().deleteById(id);
	}
	
	/**
	 * 条件删除 
	 * <br>------------------------------<br>
	 */
	@Test
	public void testDelete() {
		//删除年龄大于25的
		getUserDao().delete(new User(null, null, 25));
	}
	
	/**
	 * 删除全部
	 * <br>------------------------------<br>
	 */
	@Test
	public void testDeleteAll() {
		getUserDao().deleteAll();
	}
	
	/**
	 * 修改  根据id修改
	 * <br>------------------------------<br>
	 */
	@Test
	public void testUpdateById() {
		getUserDao().updateById(new User("50581c08c856346f02e9842c", "张三", 100));
	}
	
	/**
	 * 修改多个
	 * <br>------------------------------<br>
	 */
	@Test
	public void update() {
		//修改年龄大于29岁的 姓名为“王五“
		User criteriaUser = new User(null, null, 29);
		User user = new User(null, "王五", 39);
		getUserDao().update(criteriaUser, user);
	}
	
	/**
	 * 按主键查询, 如果不存在 返回null
	 * <br>------------------------------<br>
	 */
	@Test
	public void testFindById() {
		User user = getUserDao().findById("50581c08c856346f02e98425");
		print(user);
	}
	
	/**
	 * 查询全部
	 * <br>------------------------------<br>
	 */
	@Test
	public void testFindAll() {
		List<User> list = getUserDao().findAll();
		print(list);
	}
	
	/**
	 * 按条件查询
	 * <br>------------------------------<br>
	 */
	@Test
	public void testFind() {
		//查询25岁以上的, 分页
		User criteriaUser = new User(null, null, 20);
		List<User> list = getUserDao().find(criteriaUser, 1, 10);
		print(list);
	}
	
	/**
	 * 查询出来后  修改
	 * <br>------------------------------<br>
	 */
	@Test
	public void testFindAndModify() {
		User criteriaUser = new User("50581c08c856346f02e9842d", null, 0);
		User updateUser = new User(null, "张三", 100);
		updateUser = getUserDao().findAndModify(criteriaUser, updateUser);
		print(updateUser);
	}
	
	/**
	 * 查询出来后 删除
	 * <br>------------------------------<br>
	 */
	@Test
	public void testFindAndRemove() {
		User criteriaUser = new User("50581c08c856346f02e9842d", null, 0);
		criteriaUser = getUserDao().findAndRemove(criteriaUser);
		print(criteriaUser);
	}
	
	/**
	 * count
	 * <br>------------------------------<br>
	 */
	@Test
	public void testCount() {
		User criteriaUser = new User(null, "test", 0);
		long count = getUserDao().count(criteriaUser);
		print(count);
	}
	
	public void print(Object object) {
		if (object == null || !(object instanceof Collection)) {
			System.out.println(object);
			return;
		}
		List<?> list = (List<?>) object;
		for (Object obj : list) {
			System.out.println(obj);
		}
	}
	
	public IUserDao getUserDao() {
		String configLocations = "applicationContext.xml";
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(configLocations);
		IUserDao userDao = applicationContext.getBean("userDao", IUserDao.class);
		return userDao;
	}
}

© 著作权归作者所有

明舞
粉丝 229
博文 424
码字总数 516555
作品 0
程序员
私信 提问
spring MVC 整合mongodb

Spring Mongodb 目录 1 SPRING整合MONGODB 1 1.1 环境准备 1 1.2 包依赖 1 1.3 配置 2 2 案列 5 2.1 SPRING MVC整合MONGODB代码案例 5 1 Spring整合Mongodb 1.1 环境准备 1. mongodb官网 ht...

浅夏
2014/03/13
31.7K
0
spring项目整合mongodb进行开发

spring项目整合mongodb进行开发: MongoDB的性能指标: 100个并发,插入550万条记录的平均吞吐量:大约4100条/秒 MONGODB实际上是一个内存数据库,先将数据保存到内存,然后再写入磁盘中 1....

xiejunbo
2015/08/18
177
1
使用MongoDB和Spring Data创建一个简单的Java 的CRUD应用

MongoDB 是一个可扩展的、高性能的、开源的NoSQL数据库,跟传统的数据库不一样,MongoDB并不是将数据存储在表中,他将数据结构化为一个类似于JSON的文档中。这篇文章就是展示如何使用Java基于...

王振威
2012/07/21
8.5K
8
MongoDB的使用学习之(七)MongoDB的聚合查询(两种方式)附项目源码

MongoDB的使用学习之(七)MongoDB的聚合查询(两种方式)附项目源码 先来张在路上…… 铛铛铛……项目源码下载地址:http://files.cnblogs.com/ontheroadlee/MongoDBDemo.rar 此项目是用Mav...

Airship
2018/10/22
109
0
通过spring-data-mongodb 操作mongodb

一、前言 其实,以前项目组也使用过mongodb,只是那时候是作为主数据库来使用,所以在框架方面会更加复杂,比如使用jpa,如果只是把mongodb作为附数据库使用的话,个人认为通过spring-data-m...

漂泊者及其影子
2014/11/19
9.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

Redis集群搭建

服务器资源 ip 账号 配置 操作系统 xxx.70 root/xxx 磁盘50G(/)+150G(/home)、内存16G、CPU 16core CentOS Linux release 7.2.1511 (Core) xxx.74 root/xxx 磁盘50G(/)+150G(/home)、......

jxlgzwh
5分钟前
1
0
avro

一、 ```我们已经接触过很多序列化框架(或者集成系统),比如protobuf、hessian、thrift等,它们各有优缺点以及各自的实用场景,Avro也是一个序列化框架,它的设计思想、编程模式都和thi...

hexiaoming123
7分钟前
1
0
QML TextInput的字体超出控件范围

本文链接:https://blog.csdn.net/chyuanrufeng/article/details/54691998 问题描述 :QML TextInput输入内容超过TextInput的大小 当输入过多的字符串时,会出现内容超过TextInput的大小,字...

shzwork
8分钟前
1
0
《Java 8 in Action》Chapter 10:用Optional取代null

1965年,英国一位名为Tony Hoare的计算机科学家在设计ALGOL W语言时提出了null引用的想法。ALGOL W是第一批在堆上分配记录的类型语言之一。Hoare选择null引用这种方式,“只是因为这种方法实...

HelloDeveloper
9分钟前
1
0
进击的 Java ,云原生时代的蜕变

作者| 易立 阿里云资深技术专家<br /> <br />导读:云原生时代的来临,与Java 开发者到底有什么联系?有人说,云原生压根不是为了 Java 存在的。然而,本文的作者却认为云原生时代,Java 依然...

阿里巴巴云原生
11分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部