Mongodb联合查询
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联合查询的更多相关文章
- MongoDB联合查询 -摘自网络
1.简单手工关联 首先将结果查询出来放到一个变量里面,然后再查询 u = db.user.findOne({author:"wangwenlong"}); for(var p = ...
- Spring DATA MongoDB @DBref查询,or和and联合查询
@DBref文档关联,在按该类型查询的时候,在字段名后加上关联表的字段名即可,如: Criteria.where("bloggroup.$id"), $id代表关联表的oid字段. ...
- mongodb中查询返回指定字段
mongodb中查询返回指定字段 在写vue项目调用接口获取数据的时候,比如新闻列表页我只需要显示新闻标题和发表时间,点击每条新闻进入详情页的时候才会需要摘要.新闻内容等关于此条新闻的所有字段. ...
- TODO:MongoDB的查询更新删除总结
TODO:MongoDB的查询更新删除总结 常用查询,条件操作符查询,< .<=.>.>=.!= 对应 MongoDB的查询操作符是$lt.$lte.$gt.$gte.$ne ...
- SQL联合查询:子表任一记录与主表联合查询
今天有网友群里提了这样一个关于SQL联合查询的需求: 一.有热心网友的方案: 二.我的方案: select * from ( select a.*,(select top 1 Id from B as ...
- SQL 语句与性能之联合查询和联合分类查询
select * from t1 left join t2 on t2.sysno =t1.ASysNo left join t3 on t3.sysno =t2.ASysNo left join t ...
- myBatis中 collection 或 association 联合查询 中column 传入多个参数值
下面是一个树形结构表自连接 联合查询 Demo <resultMap id="BaseResultMap" type="com.maidan.daas.entit ...
- EF联合查询,如何设置条件过滤从表数据
最近在使用EF进行联合查询过程中,遇到了一件不开心的事情. 已禁用懒加载 var post = await _repository.GetMyPostById(blogId, postId).AsNo ...
- 【转】Mysql联合查询union和union all的使用介绍
Mysql的联合查询命令UNION和UNION ALL,总结了使用语法和注意事项,以及学习例子和项目例子,需要的朋友可以参考下 一.UNION和UNION ALL的作用和语法 UNION 用于合... ...
随机推荐
- Bayesian CTR Prediction for Bing
Microsoft published a paper in ICML 2009 named ‘Web-Scale Bayesian Click-Through Rate Prediction for ...
- 云计算---OpenStack Neutron详解
简介: neutron是openstack核心项目之一,提供云计算环境下的虚拟网络功能 OpenStack网络(neutron)管理OpenStack环境中所有虚拟网络基础设施(VNI),物理网络基础 ...
- spring 内部工作机制(二)
本章节讲Spring容器从加载配置文件到创建出一个完整Bean的作业流程及参与的角色. Spring 启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的Bean配置注册表, ...
- 应试记录2(没有转载标注,NOIP2016复赛过后自动删除)
#include<stdio.h> #include<string.h> int main() { ]; memset(a, , sizeof(a)); ;i<=;i++ ...
- Sublime Text3使用指南
前言(Prologue) Sublime Text是一款跨平台代码编辑器(Code Editor),从最初的Sublime Text 1.0,到现在的Sublime Text 3.0,Sublime ...
- WPF第三方控件Telerik
帮助文档:http://www.telerik.com/help/wpf/gridview-selection-via-checkbox.html Telerik专注于微软.Net平台的表示层与内容管 ...
- PPT排版细节,写给大家看的设计书,完美总结
原创作者:陈玓玏 相信每一位小宝贝在工作中都会被老板用PPT虐无数遍,虐到自己怀疑人生.奈何在网上随手一搜,出现的各类招聘要求都躲不开"熟练掌握PPT制作",尤其是各类科技公司.咨 ...
- Java IO编程全解(一)——Java的I/O演进之路
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7419117.html JDK1.4之前的早期版本,Java对I/O的支持并不完善,开发人员在开发高性能I/O ...
- DevOps之服务-监控工具
唠叨话 关于德语噢屁事的知识点,仅提供精华汇总,具体知识点细节,参考教程网址,如需帮助,请留言. <DevOps教程> <DevOps之服务-监控工具> 注:关于监控工具的具体 ...
- mac 通过brew安装php70 +php-fpm+ phalcon3.0.3
安装php7.0.15 brew install homebrew/php/php70 brew install homebrew/php/php70-mcrypt brew install home ...