Spring整合- mongodb

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;
	}
}

posted on 2012-09-22 22:18  YangJin  阅读(279)  评论(0编辑  收藏  举报