一只IT界中的菜鸟,立志做一只最菜的鸟
授人以鱼不如授人以渔
作为程序猿要有一个善于分析产品,起码你要知道让你做你能不能实现功能
话不多说进入主题
Pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.fmc</groupId>
<artifactId>mdb</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mdb</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.57</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.properties
server.port=8081
spring.data.mongodb.username=fmc //用户
spring.data.mongodb.password=123456 //密码
spring.data.mongodb.database=f //要连接的数据库
Student.class
package com.fmc.mdb.model;
import lombok.Data;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "student")
@Data
public class Student {
private Integer id;
private String name;
private String sex;
private Integer gradeId;
// @DBRef
// private Grade grade;
}
Grade.Class
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "grade")
@Data
public class Grade {
private Integer id;
private String gradeName;
}
StudenDao.class 和 StudentDaoImpl.class
访问数据库的两张方式
1.通过注入的方式
@Autowired
private MongoTemplate mongoTemplate;
2.通过接口 继承 extends MongoRepository<Department,String>
两者都提供了 一些简单的内置方法操着数据库
List<Map>querygradeAndStudent(Integer gradeId);//查询年纪内的所有的学生
//实现
@Override
public List<Map> querygradeAndStudent(Integer gradeId) {
LookupOperation lookupOperation=LookupOperation.newLookup().
from("student"). //关联从表名
localField("_id"). //主表关联字段 下划线必须有
foreignField("gradeId").//从表关联的字段
as("GradeAndStu"); //查询结果名
/*带条件的查询 to*/
Criteria queryId = Criteria.where("_id").in(gradeId); //主表id等于 gradeId
MatchOperation queryMatch = Aggregation.match(queryId); //把生成的条件放到管道中
/*三个条件 1相当于where后面的条件 2.类似查询得到的sql 3.查询结果进行过滤的条件 ,如果不过滤可以不写*/
Aggregation aggregation1 = Aggregation.newAggregation(queryMatch, lookupOperation); //end
/* 不带条件的查询
Aggregation aggregation=Aggregation.newAggregation(lookupOperation);*/
//grade是主表
List<Map> results = mongoTemplate.aggregate(aggregation1,"grade", Map.class).getMappedResults();
results.forEach(map -> System.out.println(map.toString()));
return results;
}
结果
{_id=1, gradeName=一年级, GradeAndStu=[Student(id=1000, name=李四, sex=男, gradeId=1), Student(id=1002, name=王二, sex=男, gradeId=1), Student(id=1004, name=王二, sex=男, gradeId=1)]