spring整合- mongodb
1.環境
Jdk:1.6.0_10-rc2
Spring3.1.2 下載
依賴jar文件:
</blockquote>
2.相關配置
①.Spring配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="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 ;<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></pre>
②.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=";
@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); } }</pre>
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=";
@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) {
} Query query = new Query(); if (criteriaUser.getId() != null) {criteriaUser = new User();
} if (criteriaUser.getAge() > 0) {Criteria criteria = Criteria.where("id").is(criteriaUser.getId()); query.addCriteria(criteria);
} if (criteriaUser.getName() != null) {Criteria criteria = Criteria.where("age").gt(criteriaUser.getAge()); query.addCriteria(criteria);
} return query; } }</pre>Criteria criteria = Criteria.where("name").regex("^" + criteriaUser.getName()); query.addCriteria(criteria);
package com.x.mongodb.dao;import java.util.List;
import com.x.mongodb.entity.User;
/**
- @author <a href=";
@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); }</pre>
package com.x.mongodb.entity;import java.io.Serializable; import java.util.HashMap; import java.util.Map;
/**
- @author <a href=";
@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(); } }</pre>
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=";
@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; } }</pre>來自: http://blog.csdn.net/java2000_wl/article/details/7983547