Mongodb联合查询

摘要:
Mongodb使用联合查询的关键点是添加@DBref。在这种情况下,不会保存整个文档,只保存idpackagecom.java。将保存关联集合的网页;导入java.util。列表importorg.mongodb.framework.pojo。GeneralBean;importorg.springframework.data.mongodb.core.mapping。DBRef;进口,进口

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联合查询》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇转:WaitForSingleObject()函数、WaitForMultipleObject()函数haproxy测试下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【mysql】 mybatis实现 主从表 left join 1:n 一对多 分页查询 主表从表都有查询条件 【mybatis】count 统计+JSON查询

mybatis实现 主从表 left join  1:n 一对多 分页查询   主表从表都有查询条件+count 需求: ======================================== 1.主从表数据 是 1:m 2.主从表各自都有查询条件 3.最后查询结果 需要分页,并统计总数 注意: =========================...

C#WebBrowser控件使用教程与技巧收集

C#WebBrowser控件使用教程与技巧收集--苏飞收集 先来看看常用的方法 Navigate(string urlString):浏览urlString表示的网址 Navigate(System.Uri url):浏览url表示的网址 Navigate(string urlString, string targetFrameName, byt...

Delphi 系统[28]关键字和保留字 index、near、far、export、exports、external、name、resident

Delphi 系统[28]关键字和保留字  index、near、far、export、exports、external、name、resident 1、定义: index :用于在属性中标识序号,以便用相同的属性方法(Get,Set)对不同的属性进行操作。index 关键字也用于在属性中指出多个元素。 near :标明函数的调用协定,指出函数可以被本地...

springsession生成sessionid不一致问题解决

不废话,本人遇到的问题主要是两个不同的springboot版本,需要共享sessionid。 1.配置application #cookie作用域server.servlet.session.cookie.path=/server.servlet.session.cookie.max-age=-1server.servlet.session.cookie....

关于配置文件Web.config文件的家常事

1. 在Web.config文件中数据库连接字符串的运用      a.将web.config文件中<system.web>标签之上的<connectionStrings />更改如下:          <connectionStrings>            <add  name="ConnStr"  co...

C#-WebForm-JS知识:基础部分、BOM部分、DOM部分、JS事件

---恢复内容开始--- 一、基础部分: 1、JavaScript 是什么? 是一门脚本语言,是属于弱类型(语言语法很随意),C#是强类型(语言语法非常严格)(李献策lxc) 优点:JS 执行速度快 2、JS 与java有什么关系?  没有任何关系 3、JS 能做什么事情?   能控制浏览器 BOM   控制元素 DOM JS不能做什么?   不能操作文件...