【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 删除

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王佑辉

老板,赏点吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值