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 用于合... ...
随机推荐
- foreach循环中为什么不要进行remove/add操作
先来看一段代码,摘自阿里巴巴的java开发手册 List<String> a = new ArrayList<String>(); a.add("1"); ...
- Linux入门之常用命令(12) mount
查看Linux所有设备 cd /dev ls -l sd* //分区 查看Linux磁盘 fdisk -lu 挂载 一般挂载至/mnt /media mount /dev/sda5 /mnt/ ...
- Linux入门之常用命令(8)上传下载
[什么是rz/sz (lsz/lrz)] 简单说就是,可以很方便地用这两个sz/rz工具,实现Linux下和Windows之间的文件传输(发送和接收),速度大概为10KB/s,适合中小文件.rz/s ...
- 郑厂长系列故事——排兵布阵 hdu4539(状态压缩DP)
郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)To ...
- BZOJ-1192-[HNOI2006]鬼谷子的钱袋
Description 鬼谷子非常聪明,正因为这样,他非常繁忙,经常有各诸侯车的特派员前来向他咨询时政.有一天,他在咸阳游历的时候,朋友告诉他在咸阳最大的拍卖行(聚宝商行)将要举行一场拍卖会,其中有一 ...
- 简单Elixir游戏服务器开篇
以前的Elixir游戏服设计系列种种原因没有完成. 后来虽然用Elixir + riak 完成了一个麻将的初始版本,可惜公司也挂了. 现在到新公司,比较空闲,想着像完成一个心愿一样,还是重启下吧(希望 ...
- ASP.NET没有魔法——目录
ASP.NET没有魔法——开篇-用VS创建一个ASP.NET Web程序 ASP.NET没有魔法——为什么使用ASP.NET ASP.NET没有魔法——第一个ASP.NET应用<MyBlog&g ...
- 入门VMware Workstation下的Debian学习之Vim简单使用(三)
什么是Vim? Vim具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计. Vim是从vi发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广 ...
- 使用MVVM减少控制器代码实战(减少56%)
减少比例= (360(原来的行数)-159(瘦身后的行数))/360 = 56% 父类 MVC 和MVVM 前后基本不动 父类主要完成如下三个功能: 1)功能:MJRefrsh +上拉下拉没有更多数据 ...
- 【原创】修复ios输入框获取焦点时不支持fixed的bug
前些日子,做了一个手机站的项目,有一个页面是这样的, 有一个固定(position:fixed)的头部和底部导航,中间是一些表单内容,没啥特别的.但是到了ios中,正常滚动页面没有问题,一旦触发了文本 ...