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 用于合... ...
随机推荐
- SVN学习笔记
一.什么是SVN? Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据. 这些数据放置在一个中央资料档案库(repository) 中. ...
- Spring 学习——基于Spring WebSocket 和STOMP实现简单的聊天功能
本篇主要讲解如何使用Spring websocket 和STOMP搭建一个简单的聊天功能项目,里面使用到的技术,如websocket和STOMP等会简单介绍,不会太深,如果对相关介绍不是很了解的,请自 ...
- HiWord()
#define HIWORD(I) ( ( WORD ) ( ( ( DWORD )( I ) >> 16) & 0xFFFF ) ). 这个宏传回一个WORD值(16位的无符号整 ...
- Nexus 私有仓库搭建与 Maven 集成
Nexus 私有仓库搭建与 Maven 集成 |作者:RexFang |出处:http://www.cnblogs.com/rexfang/ |关于作者:Java 程序员一枚 |版权:本文版权归作者和 ...
- 关于Android路由的实现
先说一下背景,目前有需求从外部包括其他应用和WEB跳转到我们自己的APP,就这么个简单的需求-- 要实现这种外部跳转的功能,我们可以理解为打算跳转的一方有多少方式通知到APP进行相对的响应行为.所以, ...
- 解决VMware下安装Ubuntu 16.04 不支持1920X1080分辨率的问题
解决方法: flashmx@ubuntu:~$ cvt # 192.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz Modeline -hsync +vsync fl ...
- 用$.getJSON() 和$.post()获取第三方数据做页面 ——惠品折页面(1)
用$.getJSON() 和$.post()获取第三方数据做页面 首页 index.html 页面 需要jquery 和 template-web js文件 可以直接在官网下载 中间导航条的固 ...
- Java面向对象 IO (一)
Java面向对象 IO (一) 知识概要: (1)IO概述 (2)IO流的常用基类 (3)IO程序的书写 (4)字符流 写入 读取 文本文件的两种读取方式 ...
- WebApi接口返回json,xml,text纯文本等
[Route("api/Message/MessageList/")] [HttpGet] public HttpResponseMessage MessageList() { R ...
- Android Annotations Eclipse 配置 (3)
Android Annotations 本来我想写个 Java 版本的<RESTful客户端库:RestClient>用于 Android 应用开发,结果发现不太好写,虽然用了 Dynam ...