【springboot】mongoTemplate增删改查操作

一、代码示例
1.1 pom依赖
<!-- mongodb -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

1.2 application配置
spring:
  data:
    mongodb:
      uri: mongodb://127.0.0.1/learning
1.3 controller
package com.learning.mongodb.controller;

import com.learning.mongodb.entity.Page;
import com.learning.mongodb.entity.PageQuery;
import com.learning.mongodb.entity.Student;
import com.learning.mongodb.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @Description 接口类
 */
@RequestMapping("student")
@RestController
public class StudentController {

    @Autowired
    private StudentService studentService;

    @GetMapping("/{id}")
    @ResponseBody
    public Student getById(@PathVariable String id){
        return studentService.getById(id);
    }

    @PostMapping("/save")
    @ResponseBody
    public Student save(@RequestBody Student student){
        return studentService.save(student);
    }

    @DeleteMapping("/{id}")
    public long remove(@PathVariable String id){
        return studentService.remove(id);
    }

    @PutMapping("/update")
    public Student update(@RequestBody Student student){
        return studentService.update(student);
    }

    @GetMapping("/page")
    public Page<Student> page(Student student, PageQuery query) {
        return studentService.page(student, query);
    }
}

1.4 service
package com.learning.mongodb.service.impl;

import com.learning.mongodb.entity.Page;
import com.learning.mongodb.entity.PageQuery;
import com.learning.mongodb.entity.Student;
import com.learning.mongodb.service.StudentService;
import com.mongodb.BasicDBObject;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;

import java.util.*;

@Service
public class StudentServiceImpl implements StudentService {

    public static String COLLECTION_NAME = "school";

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 根据id检索
     * @param id
     * @return
     */
    @Override
    public Student getById(String id) {
        Query query = new Query(Criteria.where("id").is(id));
        Student student = mongoTemplate.findOne(query, Student.class, COLLECTION_NAME);
        return student;
    }

    @Override
    public Student save(Student student) {
        // 判断collection是否存在
        if(mongoTemplate.collectionExists(COLLECTION_NAME)){
            // 保存数据
            return mongoTemplate.insert(student, COLLECTION_NAME);
        }else{
            // 创建collection
            BasicDBObject index = new BasicDBObject();
            index.put("id", 1);
            mongoTemplate.createCollection(COLLECTION_NAME).createIndex(index);
            // 保存数据
            return mongoTemplate.insert(student, COLLECTION_NAME);
        }
    }

    @Override
    public long remove(String id) {
        Query query = Query.query(Criteria.where("_id").is(id));
        DeleteResult result = mongoTemplate.remove(query, COLLECTION_NAME);
        return result.getDeletedCount();
    }

    @Override
    public Student update(Student student) {
        Query query = new Query(Criteria.where("_id").is(student.getId()));
        Student one = mongoTemplate.findOne(query, Student.class, COLLECTION_NAME);
        if(one != null){
            Update update = new Update();
            update.set("age", student.getAge());
            update.set("name", student.getName());
            UpdateResult updateResult = mongoTemplate.updateFirst(query, update, COLLECTION_NAME);
            long modifiedCount = updateResult.getModifiedCount();
            if(modifiedCount>0){
                return student;
            }
        }
        return null;
    }

    public long updateBatch(List<String> ids) {
        Update update = new Update();
        update.set("updateTime", new Date());
        update.set("deleted", 1);
        Query query = new Query(Criteria.where("_id").in(ids));
        UpdateResult updateResult = mongoTemplate.updateMulti(query, update, COLLECTION_NAME);
        return updateResult.getModifiedCount();
    }

    private List<Student> list(Student student) {
        Criteria criteria = new Criteria();
        if(student.getAge() != null){
            criteria.and("age").is(student.getAge());
        }
        if(student.getName() != null){
            // 模糊查询
            criteria.and("name").regex(student.getName());
        }
        Query query = new Query(criteria);
        return mongoTemplate.find(query, Student.class, COLLECTION_NAME);
    }

    @Override
    public Page<Student> page(Student student, PageQuery pageQuery) {
        // 查询总数
        long count = this.count(student);
        Page<Student> page = new Page<>();
        page.setTotal(count);
        page.setSize(pageQuery.getSize());
        page.setCurrent(pageQuery.getCurrent());
        if(count > 0){
            List<Student> dataList = this.getPage(student, pageQuery);
            page.setRecords(dataList);
        }
        return page;
    }

    private List<Student> getPage(Student student, PageQuery pageQuery) {
        Query query = getQuery(student);
        if(query != null){
            query.with(PageRequest.of(pageQuery.getCurrent() - 1, pageQuery.getSize()));
        }
        return mongoTemplate.find(query, Student.class, COLLECTION_NAME);
    }

    private Query getQuery(Student student) {
        Criteria criteria = new Criteria();
        if(student.getAge() != null){
            criteria.and("age").is(student.getAge());
        }
        if(student.getName() != null){
            // 模糊查询
            criteria.and("name").regex(student.getName());
        }
        Query query = new Query();
        query.addCriteria(criteria);
        Sort sort = Sort.by(Sort.Order.asc("id"));
        query.with(sort);
        return query;
    }

    private long count(Student student) {
        Query query = this.getQuery(student);
        return mongoTemplate.count(query, COLLECTION_NAME);
    }
    
//    private Query andOr(Student student) {
//        Criteria criteria = new Criteria();
//        criteria.and("age").is(student.getAge());
//
//        Query query = new Query();
//        List<Criteria> list = new ArrayList<>();
//        list.add(criteria);
//
//        Criteria keyWordCriteria = new Criteria().orOperator(
//                Criteria.where("name").regex(student.getName()),
//                Criteria.where("description").regex(student.getDescription())
//        );
//        list.add(keyWordCriteria);
//        Criteria result = new Criteria().andOperator(list);
//        query.addCriteria(result);
//        Sort sort = Sort.by(Sort.Order.asc("id"));
//        query.with(sort);
//        return query;
//    }
}
二、截图示例
2.1 新增

在这里插入图片描述
在这里插入图片描述

2.2 修改

在这里插入图片描述
在这里插入图片描述

2.3 详情

在这里插入图片描述

2.4 分页

在这里插入图片描述
在这里插入图片描述

2.5 删除

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_32088869/article/details/132361933