SpringBoot整合MongoDB实现增删改查、复合查询

绝地灬酷狼 2022-01-14 12:55 441阅读 0赞

1、向pom.xml中添加依赖包

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-mongodb</artifactId>
  4. </dependency>

2、编辑application.yml

  1. spring:
  2. data:
  3. mongodb:
  4. host: 192.168.58.129 //IP地址
  5. database: studentdb //数据库名

3、编写实体类

解释一下以下用到的的几个注解:
@Id :文档的唯一标识,在mongodb中为ObjectId,它是唯一的,通过时间戳+机器标识+进程ID+自增计数器(确保同一秒内产生的Id不会冲突)构成。
@Document :把一个java类声明为mongodb的文档,可以通过collection参数指定这个类对应的文档。@Document(collection=”mongodb”) mongodb对应表

  1. /** * 学生类 */
  2. @Document(collection = "student") //指定对应的表名
  3. public class Student implements Serializable {
  4. @Id
  5. private Integer id;
  6. private String name;
  7. private Integer age;
  8. private Integer gradeId;
  9. private Grade grade;
  10. public Grade getGrade() {
  11. return grade;
  12. }
  13. public void setGrade(Grade grade) {
  14. this.grade = grade;
  15. }
  16. public Integer getId() {
  17. return id;
  18. }
  19. public void setId(Integer id) {
  20. this.id = id;
  21. }
  22. public String getName() {
  23. return name;
  24. }
  25. public void setName(String name) {
  26. this.name = name;
  27. }
  28. public Integer getAge() {
  29. return age;
  30. }
  31. public void setAge(Integer age) {
  32. this.age = age;
  33. }
  34. public Integer getGradeId() {
  35. return gradeId;
  36. }
  37. public void setGradeId(Integer gradeId) {
  38. this.gradeId = gradeId;
  39. }
  40. @Override
  41. public String toString() {
  42. return getId()+getName()+getAge()+getGradeId();
  43. }
  44. }
  45. /** * 年级类 */
  46. public class Grade implements Serializable {
  47. private Integer id;
  48. private String gradeName;
  49. public Integer getId() {
  50. return id;
  51. }
  52. public void setId(Integer id) {
  53. this.id = id;
  54. }
  55. public String getGradeName() {
  56. return gradeName;
  57. }
  58. public void setGradeName(String gradeName) {
  59. this.gradeName = gradeName;
  60. }
  61. }

4、StudentDao接口
提供增删改查 MongoDB 接口

  1. public interface StudentDao {
  2. //查询所有
  3. List<Student> findAll();
  4. //增加
  5. void add(Student student);
  6. //删除
  7. void delete(Integer id);
  8. //修改
  9. void update(Student student);
  10. //符合查询——两表联查
  11. List<Map> fuhefind();
  12. }

5、StudentDaoImpl实现类

  1. @Component
  2. public class StudentDaoImpl implements StudentDao {
  3. @Autowired
  4. private MongoTemplate mongoTemplate;
  5. @Override
  6. public List<Student> findAll() {
  7. return mongoTemplate.findAll(Student.class);
  8. }
  9. @Override
  10. public void add(Student student) {
  11. mongoTemplate.save(student);
  12. }
  13. @Override
  14. public void delete(Integer id) {
  15. Student student=mongoTemplate.findById(1,Student.class);
  16. mongoTemplate.remove(student);
  17. }
  18. @Override
  19. public void update(Student student) {
  20. //修改的条件
  21. Query query = new Query(Criteria.where("id").is(student.getId()));
  22. //修改的内容
  23. Update update = new Update();
  24. update.set("name",student.getName());
  25. mongoTemplate.updateFirst(query,update,Student.class);
  26. }
  27. @Override
  28. public List<Map> fuhefind() {
  29. LookupOperation lookupOperation=LookupOperation.newLookup().from("grade").localField("_id").foreignField("_id").as("grade");
  30. Aggregation aggregation=Aggregation.newAggregation(lookupOperation);
  31. List<Map> result=mongoTemplate.aggregate(aggregation,"student",Map.class).getMappedResults();
  32. return result;
  33. }
  34. }

6、单元测试

  1. @RunWith(SpringRunner.class)
  2. @SpringBootTest
  3. public class SpringbootMongdbApplicationTests {
  4. @Autowired
  5. private StudentDao studentDao;
  6. @Test
  7. public void findAll() {
  8. List<Student> students=studentDao.findAll();
  9. System.out.println("查询到的数据的条数:"+students.size());
  10. for (Student st:students
  11. ) {
  12. System.out.println(st.toString());
  13. }
  14. }
  15. @Test
  16. public void add(){
  17. Student student=new Student();
  18. student.setId(4);
  19. student.setName("李名明");
  20. student.setAge(19);
  21. student.setGradeId(3);
  22. studentDao.add(student);
  23. findAll();
  24. }
  25. @Test
  26. public void delete(){
  27. studentDao.delete(4);
  28. findAll();
  29. }
  30. @Test
  31. public void update(){
  32. Student student=new Student();
  33. student.setId(2);
  34. student.setName("王麻子");
  35. student.setAge(15);
  36. student.setGradeId(1);
  37. studentDao.update(student);
  38. findAll();
  39. }
  40. @Test
  41. public void fehefind(){
  42. List<Map> maps = studentDao.fuhefind();
  43. for (Map map:maps
  44. ) {
  45. System.out.println(map);
  46. }
  47. }
  48. }

然后就自己去琢磨吧!
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,441人围观)

还没有评论,来说两句吧...

相关阅读