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 用于合... ...
随机推荐
- BigDecimal的加减乘除及比较大小
import java.math.BigDecimal; import static java.lang.System.out; public class BaseClass { public sta ...
- javascript插入before(),after()新DOM方法
随着web的技术突飞猛进的发展.HTML5 ES6等新技术的发展,与此同时DOM等标准也在悄悄的进步,各大浏览器也在悄悄的发展适配新的属性和方法,今天我们来看看Javascript新的DOM的方法 二 ...
- Kindle 推送教程:教你用电子邮箱推送电子书
Kindle 推送是什么意思?如何通过电子邮件附件推送?或许刚刚接触 Kindle 的朋友对这个概念不是很清楚,其实所谓 Kindle 推送是指亚马逊提供的一个"Kindle 个人文档服务& ...
- Cow Uncle 学习了叉积的一点运用,叉积真的不错
Cow Uncle Time Limit: 4000/2000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) SubmitSta ...
- GCD XOR uvalive6657
GCD XORGiven an integer N, nd how many pairs (A; B) are there such that: gcd(A; B) = A xor B where1 ...
- express简介
Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速地搭建一个完整功能的网 ...
- linux上搭建ftp
linux上搭建ftp 重要 解决如何搭建ftp 解决用户指定访问其根目录 解决访问ftp超时连接 解决ftp主动连接.被动连接的问题 1.安装ftp ...
- java中需要注意的小细节
很早以前就打算写博客,但是总是因为不知道写什么,或是觉得博客里其他人已经把我要写的整理很好了而迟迟没有动笔,现在决定把自己平时的记录的一些笔记拿出来,希望大神们可以批评指导,并且希望能够帮助一些刚刚入 ...
- Java历程-初学篇 Day03扫描仪与类型转换
一,扫描仪 步骤1,使用扫描仪方法 步骤2,导个包 步骤三,使用 注意事项:严格区分大小写 二,类型转换 1,自动类型转换 当将一个数值范围小的类型赋给一个数值范围大的数值型变量,java在编译过程中 ...
- c#使用GDI+简单绘图
private void button2_Click(object sender, EventArgs e) { Bitmap image = new Bitmap(200, 200); Graphi ...