SpringBoot增和MongoDB实现增删改查、复合查询
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
实体类
Student类
@Data //自动生成get set方法
@Document(collection = "student") //指定相对应的表名
public class Student implements Serializable {
@Id
private Integer _id;
private String name;
private String sex;
private Integer age;
private Integer gradeId;
private Grade grade;
public Student(Integer _id, String name, String sex, Integer age, Integer gradeId) {
this._id = _id;
this.name = name;
this.sex = sex;
this.age = age;
this.gradeId = gradeId;
}
public Student() {
}
}
Grade类
@Data
public class Grade {
private Integer _id;
private String name;
}
ServiceImpl
@Component //把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>
public class StudentServiceImpl implements StudentService {
//这样就可以直接使用了
@Autowired
private MongoTemplate mongoTemplate;
/**
* 复合查询
* @return
*/
@Override
public List<Map> fuhechaxun() {
LookupOperation lookupOperation = LookupOperation.newLookup().
from("grade").//关联表名
localField("gradeId").//关联字段
foreignField("_id").//主表关联字段对应的次表字段
as("grade");
Aggregation aggregation = Aggregation.newAggregation(lookupOperation);
List<Map> results = mongoTemplate.aggregate(aggregation, "student", Map.class).getMappedResults();
return results;
}
/**
* 查询所有学生信息
* @return
*/
@Override
public List<Student> findAll() {
return mongoTemplate.findAll(Student.class);
}
/**
* 添加学生信息
* @param student
*/
@Override
public void save(Student student) {
mongoTemplate.save(student);
}
/**
* 修改学生信息
* @param student
*/
@Override
public void update(Student student) {
//修改条件
Query query =new Query(Criteria.where("_id").is(student.get_id()));
Update update = new Update();
update.set("name",student.getName());
update.set("age",student.getAge());
update.set("sex",student.getSex());
update.set("gradeId",student.getGradeId());
mongoTemplate.updateFirst(query,update,Student.class);
}
/**
* 删除学生信息
* @param id
*/
@Override
public void delete(Integer id) {
Student studnet = mongoTemplate.findById(id,Student.class);
mongoTemplate.remove(studnet);
}
}
接下来我们去测试类测试一下
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootMongodbApplicationTests {
@Autowired
private StudentService studentService;
@Test
public void findAll() {
List<Student> students = studentService.findAll();
System.out.println(students);
System.out.println("编号\t姓名\t年龄\t性别\t年级");
for (Student student:students) {
System.out.println(student.get_id()+"\t\t"+student.getName()+"\t"+student.getAge()+"\t\t"+student.getSex()+"\t\t"+student.getGradeId());
}
}
@Test
public void delete() {
studentService.delete(5);
System.out.println("执行删除");
findAll();
}
@Test
public void save() {
Student student = new Student(5,"小刘","男",20,3);
studentService.save(student);
System.out.println("执行新增");
findAll();
}
@Test
public void update() {
Student student = new Student(1,"小黑","男",25,3);
studentService.update(student);
System.out.println("执行修改");
findAll();
}
@Test
public void fuhechaxun(){
List<Map> maps = studentService.fuhechaxun();
for (Map map:maps) {
System.out.println(map);
}
}
}
首先是查询所有 单表的
接着新增一个小刘
然后干掉小刘
将id为1的修改为楼下小黑
复合查询