项目:SpringMVC+Mongodb数据库+Maven构建+Junit
Mongodb数据库安装:http://blog.csdn.net/xiaohulunb/article/details/27242123
Mongodb数据库命令端常用操作:http://blog.csdn.net/xiaohulunb/article/details/27836729
项目源码:https://github.com/xiaohulu/springmvc_mongodb
JavaBean说明: 学生信息-学生个人详细信息
/**
* Created by lw on 14-5-30.
* 学生信息bean
*/
public class Student {
private String name;
private int score;
private User user;
/**
* Created by lw on 14-5-30.
* 个人详细信息bean
*/
public class User {
private String name;
private String sex;
private int age;
private int[] phone;
private Map<String, String> address;
数据库中存储Student格式:
入门篇(2014年05月31日)
入门篇源码:
点击打开链接
package com.springapp.mvc.repository;
import com.springapp.mvc.annotation.MethodInfo;
import com.springapp.mvc.po.Student;
import org.springframework.data.domain.Sort;
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.Component;
import javax.annotation.Resource;
import java.util.List;
/**
* Created by lw on 14-5-30.
* <p/>
* 入门级
*/
@Component
public class StudentRepository2MongoSQL2EntryLevel {
@Resource
public MongoTemplate mongoTemplate;
/**查询操作**/
/**
* 获取名字是name的所有学生(is)
*
* @param name
* @return
*/
@MethodInfo(Value = "")
public List<Student> getStudentsByIs(String name) {
Query query = Query.query(Criteria.where("name").is(name));
return mongoTemplate.find(query, Student.class, "student");
}
/**
* 获取名字是name的所有学生
* 分页操作skip(first).limit(end)
*
* @param name
* @return
*/
@MethodInfo(Value = "")
public List<Student> getStudentsByName(String name, int first, int end) {
Query query = Query.query(Criteria.where("name").is(name));
Sort sort = new Sort("user.age");
return mongoTemplate.find(query.skip(first).limit(end), Student.class, "student");
}
/**
* 查询成绩在mixScore-maxScore之间的学生(gte,lte)
*
* @param mixScore
* @param maxScore
* @return
*/
public List<Student> getStudentsByScore(int mixScore, int maxScore) {
Query query = Query.query(Criteria.where("score").gte(mixScore).lte(maxScore));
return mongoTemplate.find(query, Student.class, "student");
}
/**
* 查询成绩在mixScore-maxScore之间,年龄在mixAge-maxAge之间的学生
*
* @param mixAge
* @param maxAge
* @return
*/
public List<Student> getStudentsByAgeAndScore(int mixAge, int maxAge, int mixScore, int maxScore) {
Query query = Query.query(Criteria.where("user.age").gte(mixAge).lte(maxAge).and("score").gte(mixScore).lte(maxScore));
return mongoTemplate.find(query, Student.class, "student");
}
/**
* 查询年龄在mixAge-maxAge之间的学生,并且电话中含有98的学生(all)
*
* @param mixAge
* @param maxAge
* @return
*/
public List<Student> getStudentsByAgeAndPhone(int mixAge, int maxAge, int phone) {
Query query = Query.query(Criteria.where("user.age").gte(mixAge).lte(maxAge).and("user.phone").all(phone));
return mongoTemplate.find(query, Student.class, "student");
}
/**
* 查询地址是addressType-addressName中值键对应的学生(is)
*
* @param addressType
* @param addressName
* @return
*/
public List<Student> getStudentsByAddress(String addressType, String addressName) {
Query query = Query.query(Criteria.where("user.address." + addressType).is(addressName));
return mongoTemplate.find(query, Student.class, "student");
}
/**
* 查询名字中是有names的学生,and 电话号码中不含186(in)
* notin类似
*
* @param names
* @return
*/
public List<Student> getStudentsByIn(List<String> names) {
Query query = Query.query(Criteria.where("user.name").in(names).and("user.phone").nin(186));
return mongoTemplate.find(query, Student.class, "student");
}
/**数组操作**/
/**
* 查询电话号码中包含某值的学生(all)
*
* @return
*/
public List<Student> getStudentsByAll() {
Query query = Query.query(Criteria.where("user.phone").all(186, 10));
return mongoTemplate.find(query, Student.class, "student");
}
/**
* 查询电话号码中包含num个的学生(size)
*
* @param size
* @return
*/
public List<Student> getStudentsBySize(int size) {
Query query = Query.query(Criteria.where("user.phone").size(size));
return mongoTemplate.find(query, Student.class, "student");
}
/**
* 获取名字是name的所有学生的总数(count)
*
* @param name
* @return
*/
public int getStudentsCountByName(String name) {
Query query = Query.query(Criteria.where("name").is(name));
return (int) mongoTemplate.count(query, "student");
}
/**更新操作**/
/**
* 插入学生信息(inset)
*
* @param students
* @return
*/
public void saveStudent(List<Student> students) {
mongoTemplate.insert(students, "student");
}
/**
* 增加一个字段-值(upsert)
* 条件是用户年龄 70<x<100
* <p/>
* 为什么是每次只更新其中一条数据?????Q
*
* @param FiledName
* @param filedValue
* @return
*/
public void updateSyudentAndFiled(String FiledName, String filedValue) {
Update update = Update.update(FiledName, filedValue);
Query query = Query.query(Criteria.where("user.age").gt(70).lt(100));
mongoTemplate.upsert(query, update, "student");
}
/**
* 删除一个字段(updateMulti)
* 条件是用户年龄 70<x<100
*
* @return
*/
public void updateSyudentAndUnset() {
Update update = new Update();
update.unset("test_1");
Query query = Query.query(Criteria.where("user.age").gt(70).lt(100));
mongoTemplate.updateMulti(query, update, "student");
}
/**
* 修改某学生的名字,并且年龄全部+2(inc-数字字段field增加value)
* 条件是用户年龄 >50
*
* @param name
* @param remName
* @return
*/
public void updateSyudentByName(String name, String remName) {
Update update = Update.update(name, remName).set("user." + name, remName).inc("user.age", 2);
Query query = Query.query(Criteria.where("user.age").gte(50));
mongoTemplate.updateMulti(query, update, "student");
}
/**数组操作**/
/**
* 追加一个电话号码(push)
* 条件是用户年龄 >50
*
* @return
*/
public void updateSyudentByPush() {
Update update = new Update();
update.push("user.phone", 186);
Query query = Query.query(Criteria.where("user.age").gte(50));
mongoTemplate.updateMulti(query, update, "student");
}
/**
* 追加一组电话号码(pushAll)
* 条件是用户年龄 <30
*
* @return
*/
public void updateSyudentByPushAll() {
Update update = new Update();
update.pushAll("user.phone", new Object[]{186, 137});
Query query = Query.query(Criteria.where("user.age").lte(30));
mongoTemplate.updateMulti(query, update, "student");
}
/**
* 追加一个电话号码,只在该号码不存在时候增加(addToAll)
* 条件是用户年龄 <30
*
* @return
*/
public void updateSyudentByAddToSet(int num) {
Update update = new Update();
update.addToSet("user.phone", num);
Query query = Query.query(Criteria.where("user.age").lte(30));
mongoTemplate.updateMulti(query, update, "student");
}
/**
* 删除(第一)最后一个电话号码(pop)
* 仅 FIRST / LAST
* 条件是用户年龄 <30
*
* @return
*/
public void updateSyudentBypop() {
Update update = new Update();
update.pop("user.phone", Update.Position.LAST);
Query query = Query.query(Criteria.where("user.age").lte(30));
mongoTemplate.updateMulti(query, update, "student");
}
/**
* 删除一个电话号码(pull)
* 条件是用户年龄 <30
*
* @return
*/
public void updateSyudentByPull(int num) {
Update update = new Update();
update.pull("user.phone", num);
Query query = Query.query(Criteria.where("user.age").lte(30));
mongoTemplate.updateMulti(query, update, "student");
}
/**
* 删除一组电话号码(pull)
* 条件是用户年龄 <30
*
* @return
*/
public void updateSyudentByPullAll(Object[] nums) {
Update update = new Update();
update.pullAll("user.phone", nums);
Query query = Query.query(Criteria.where("user.age").lte(30));
mongoTemplate.updateMulti(query, update, "student");
}
/**
* 删除某学生的信息(remove)
*
* @param name
* @return
*/
public void deleteStudentByName(String name) {
Query query = Query.query(Criteria.where("name").is(name));
mongoTemplate.remove(query, "student");
}
}