Mongodb使用联合查询的重点需要添加@DBref  这样的话不会将整个文档保存,只会保存关联集合的id

package com.java.web;

import java.util.List;

import org.mongodb.framework.pojo.GeneralBean;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document; @Document
public class Clazzes extends GeneralBean { /**
*
*/
private static final long serialVersionUID = -1151165767494158740L;
private String classRoom;
private String classTeacher;
@DBRef
private List<Student> student;
public String getClassRoom() {
return this.classRoom;
}
public void setClassRoom(String classRoom) {
this.classRoom = classRoom;
}
public String getClassTeacher() {
return this.classTeacher;
}
public void setClassTeacher(String classTeacher) {
this.classTeacher = classTeacher;
}
public List<Student> getStudent() {
return this.student;
}
public void setStudent(List<Student> student) {
this.student = student;
} }
package com.java.web;

import org.mongodb.framework.dao.GeneralDao;

public interface ClazzesDao  extends GeneralDao<Clazzes>{

}
package com.java.web;

import org.mongodb.framework.dao.GeneralDaoImpl;
import org.springframework.stereotype.Repository; @Repository
public class ClazzesDaoImpl extends GeneralDaoImpl<Clazzes> implements ClazzesDao{ @Override
protected Class<Clazzes> getEntityClass() {
// TODO Auto-generated method stub
return Clazzes.class;
} }
package com.java.web;

import org.mongodb.framework.service.GeneralServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import com.java.manage.pojo.User; @Service
public class ClazzesService extends GeneralServiceImpl<Clazzes> { @Autowired
private ClazzesDao clazzDao; /**
* 根据用户id查询用户
*
* @param id
* @return
* @throws Exception
*/
public Clazzes findClazzById(String id) throws Exception {
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(id));
// User user= this.userDao.findOneById(id);
Clazzes clazz = this.clazzDao.findOneByQuery(query);
if (clazz != null)
return clazz;
else
return null;
} }
package com.java.web;

import org.mongodb.framework.pojo.GeneralBean;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document; @Document
public class Student extends GeneralBean { /**
*
*/
private static final long serialVersionUID = 5697238875408915428L;
/**
*
*/
private String name;
private int age;
private String enterYear;
@DBRef
private Clazzes clazzes;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public String getEnterYear() {
return this.enterYear;
}
public void setEnterYear(String enterYear) {
this.enterYear = enterYear;
}
public Clazzes getClazzes() {
return this.clazzes;
}
public void setClazzes(Clazzes clazzes) {
this.clazzes = clazzes;
} }
package com.java.web;

import org.mongodb.framework.dao.GeneralDao;

public interface StudentDao  extends GeneralDao<Student>{

}
package com.java.web;

import org.mongodb.framework.dao.GeneralDaoImpl;
import org.springframework.stereotype.Repository;
@Repository
public class StudentDaoImpl extends GeneralDaoImpl<Student> implements StudentDao{ @Override
protected Class<Student> getEntityClass() {
// TODO Auto-generated method stub
return Student.class;
} }
package com.java.web;

import org.mongodb.framework.dao.GeneralDaoImpl;
import org.springframework.stereotype.Repository;
@Repository
public class StudentDaoImpl extends GeneralDaoImpl<Student> implements StudentDao{ @Override
protected Class<Student> getEntityClass() {
// TODO Auto-generated method stub
return Student.class;
} }

上面贴的都是基本的代码,下面进行junit测试

package org.java.test;

import java.util.ArrayList;
import java.util.List; import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.transaction.annotation.Transactional; import com.java.web.Clazzes;
import com.java.web.ClazzesService;
import com.java.web.Student;
import com.java.web.StudentDao;
import com.java.web.StudentService; public class TestInertStudentClass { ApplicationContext ac=null; @Before
public void befort(){
ac=new ClassPathXmlApplicationContext(new String[]{"application-config.xml","dispatcher-servlet.xml","dispatcher-shiro.xml"});
} /**
* 添加学生并且绑定班级
* @throws Exception
*/
@Test
public void InsertStudent() throws Exception {
StudentDao studentdao=(StudentDao) ac.getBean("studentDaoImpl");
List<Student> studentList = new ArrayList<Student>();
ClazzesService clazzService = (ClazzesService)ac.getBean("clazzesService");
Clazzes clazz =clazzService.findClazzById("59658fd4d724ccce5ee5cc5b");
if(clazz!=null){
for(int i=0;i<10;i++){
Student student = new Student();
student.setAge(11);
student.setClazzes(clazz);
student.setEnterYear("2015");
student.setName("学生"+i);
studentdao.insert(student);
studentList.add(student);
}
clazz.setStudent(studentList);
clazzService.save(clazz);
}
} /**
* 初始化一个班级
* @throws Exception
*/
@Test
public void InsertClazz() throws Exception{
ClazzesService clazzService = (ClazzesService)ac.getBean("clazzesService");
Clazzes c = new Clazzes();
c.setClassRoom("2014年1班");
c.setClassTeacher("Mrs zhang");
c.setStudent(new ArrayList());
clazzService.insert(c); } /**
* 通过联合查询获取班级下的所有学生信息
* @throws Exception
*/
@Test
public void getAllClazz() throws Exception{
ClazzesService clazzService = (ClazzesService)ac.getBean("clazzesService");
Clazzes c = clazzService.findClazzById("59658fd4d724ccce5ee5cc5b");
for(Student s :c.getStudent()){
System.out.println("联合查询学生姓名:"+s.getName());
} } /*
* 通过学生的id获取学生的班级
*/
@Test
public void findAllStudent() throws Exception{
StudentService s = (StudentService)ac.getBean("studentService");
Student ss = s.findUserById("59658831d724a1cb751c3ef8");
//通过联合查询获取班级信息
System.out.println(ss.getClazzes().getClassRoom());
} /**
* 删除学生的时候执行联合删除班级中的学生
* @throws Exception
*/
@Test
public void deleteStudent() throws Exception{
StudentService s = (StudentService)ac.getBean("studentService");
ClazzesService clazzService = (ClazzesService)ac.getBean("clazzesService");
Student ss = s.findUserById("596591e1d7241f4590bddef5");
List<Student> list= ss.getClazzes().getStudent();
List<Student> listnew = new ArrayList<Student>();
for(Student stu:list){
if(!stu.getId().equals("596591e1d7241f4590bddef5")){
listnew.add(stu);
}
} Clazzes c = ss.getClazzes();
c.setStudent(listnew);
clazzService.save(c);
s.remove(ss); } }

Mongodb联合查询的更多相关文章

  1. MongoDB联合查询 -摘自网络

    1.简单手工关联 首先将结果查询出来放到一个变量里面,然后再查询 u = db.user.findOne({author:"wangwenlong"}); for(var p = ...

  2. Spring DATA MongoDB @DBref查询,or和and联合查询

    @DBref文档关联,在按该类型查询的时候,在字段名后加上关联表的字段名即可,如: Criteria.where("bloggroup.$id"), $id代表关联表的oid字段. ...

  3. mongodb中查询返回指定字段

    mongodb中查询返回指定字段   在写vue项目调用接口获取数据的时候,比如新闻列表页我只需要显示新闻标题和发表时间,点击每条新闻进入详情页的时候才会需要摘要.新闻内容等关于此条新闻的所有字段.  ...

  4. TODO:MongoDB的查询更新删除总结

    TODO:MongoDB的查询更新删除总结 常用查询,条件操作符查询,< .<=.>.>=.!= 对应 MongoDB的查询操作符是$lt.$lte.$gt.$gte.$ne ...

  5. SQL联合查询:子表任一记录与主表联合查询

    今天有网友群里提了这样一个关于SQL联合查询的需求: 一.有热心网友的方案: 二.我的方案: select * from ( select a.*,(select top 1 Id from B as ...

  6. SQL 语句与性能之联合查询和联合分类查询

    select * from t1 left join t2 on t2.sysno =t1.ASysNo left join t3 on t3.sysno =t2.ASysNo left join t ...

  7. myBatis中 collection 或 association 联合查询 中column 传入多个参数值

    下面是一个树形结构表自连接 联合查询 Demo <resultMap id="BaseResultMap"  type="com.maidan.daas.entit ...

  8. EF联合查询,如何设置条件过滤从表数据

    最近在使用EF进行联合查询过程中,遇到了一件不开心的事情. 已禁用懒加载 var post = await _repository.GetMyPostById(blogId, postId).AsNo ...

  9. 【转】Mysql联合查询union和union all的使用介绍

    Mysql的联合查询命令UNION和UNION ALL,总结了使用语法和注意事项,以及学习例子和项目例子,需要的朋友可以参考下 一.UNION和UNION ALL的作用和语法 UNION 用于合... ...

随机推荐

  1. C的函数指针与指针函数

    1.函数指针 指向函数的指针.本质是一个指针. 指针变量可以指向变量的地址.数组.字符串.动态分配地址,同时也可指向一个函数,每个函数在编译的时候,系统会分配给该函数一个入口地址,函数名表示这个入口地 ...

  2. ArrayList , Vector 数组集合

    ArrayList 的一些认识: 非线程安全的动态数组(Array升级版),支持动态扩容 实现 List 接口.底层使用数组保存所有元素,其操作基本上是对数组的操作,允许null值 实现了 Randm ...

  3. Saturday SQL Server 2016 初体验

    最近在开发一个有关数据库的项目,我想用SQLite,但是SQLite的设计器不是特别友好,然后据说VS有一个集成的SQLite设计器,但是我用的VS2017亲测并没有,用户体验不佳,所以安装一个SQL ...

  4. web应用程序 前段部分调优

    1. 使用瀑布图初步诊断网站性能瓶颈 一般来说,打开一个网页的速度会受到以下几项的影响: 1) 服务器花了太长的时间将.aspx页面的内容转化为html. 2) .aspx页面花了太长的时间从服务器端 ...

  5. Python系列之反射、面向对象

    一.反射 说反射之前先介绍一下__import__方法,这个和import导入模块的另一种方式 1. import commons 2. __import__('commons') 如果是多层导入: ...

  6. Java高新技术 JDK1.5之新特性

      Java高新技术  JDK1.5的新特性 知识概要:                 (1)静态导入 (2)可变参数 (3)增强for循环 (4)基本数据类型的自动拆箱和装箱 静态导入     ...

  7. HTML与标记属性

    网站部分:UI:AI.PS 前端:html.css.js 网站:是一个存放在网络服务器上的完整信息的集合体.由域名.空间服务器.网站程序.数据库等组成.由多个网页以一定的方式连接在一起,成为一个整体. ...

  8. NOIP初赛 之 哈夫曼树

    哈夫曼树 种根据我已刷的初赛题中基本每套的倒数第五或第六个不定项选择题就有一个关于哈夫曼树及其各种应用的题,占:0-1.5分:然而我针对这个类型的题也多次不会做,so,今晚好好研究下哈夫曼树: 概念: ...

  9. CoreData归纳使用

    1.CoreData简介 2.CoreData数据模型 3.CoreData的主要对象 4.使用CoreData实现数据存储 一.CoreData简介 CoreData用做数据持久化,是数据持久化的最 ...

  10. win10 UWP 获取系统信息

    获取系统信息 Windows.System.Profile.AnalyticsVersionInfo analyticsVersion = Windows.System.Profile.Analyti ...