SpringBoot整合MongoDB

添加依賴(實際上可以在創建SpringBoot工程步驟中勾選MongoDB選項)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

代碼

實體類(Document)

package com.example.demo.entity;

import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.mapping.Document;

import java.io.Serializable;


@Getter
@Setter
// 指定集合名稱
@Document(collection = "my_book")
// 創建索引
@CompoundIndexes(@CompoundIndex(name = "my_index", def = "{name:1}"))
public class Book implements Serializable {

    @Id
    private Long id;

    private String name;

    private Double price;
}

請求實體

package com.example.demo.entity;

import lombok.Getter;
import lombok.Setter;


@Getter
@Setter
public class BookRequest {

    private Integer pageNo;
    private Integer pageSize;
}

測試代碼

package com.example.demo.controller;

import com.example.demo.entity.Book;
import com.example.demo.entity.BookRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
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.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.regex.Pattern;


@RestController
public class DefaultController {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 添加
     * @param book
     * @return
     */
    @RequestMapping("/add")
    public List<Book> add(@RequestBody Book book){
        mongoTemplate.insert(book);
        return mongoTemplate.findAll(Book.class);
    }

    /**
     * 根據name更新,只更新匹配到的第一個數據
     * @param book
     * @return
     */
    @RequestMapping("/updateFirst")
    public List<Book> updateFirst(@RequestBody Book book){
        Query query = new Query(Criteria.where("name").is(book.getName()));
        Update update = new Update().set("name",book.getName()).set("price", book.getPrice());
        mongoTemplate.updateFirst(query, update, Book.class);
        return mongoTemplate.find(query, Book.class);
    }

    /**
     * 根據name更新,更新匹配到的全部數據
     * @param book
     * @return
     */
    @RequestMapping("/updateMulti")
    public List<Book> updateMulti(@RequestBody Book book){
        Query query = new Query(Criteria.where("name").is(book.getName()));
        Update update = new Update().set("name",book.getName()).set("price", book.getPrice());
        mongoTemplate.updateMulti(query, update, Book.class);
        return mongoTemplate.find(query, Book.class);
    }

    /**
     * 根據name更新匹配到的第一條數據,並返回未更新之前的數據
     * @param book
     * @return
     */
    @RequestMapping("/findAndModify")
    public Book findAndModify(@RequestBody Book book){
        Query query = new Query(Criteria.where("name").is(book.getName()));
        Update update = new Update().set("name",book.getName()).set("price", book.getPrice());
        return mongoTemplate.findAndModify(query, update, Book.class);
    }

    /**
     * 根據id刪除數據
     * @param book
     * @return
     */
    @RequestMapping("/remove")
    public List<Book> remove(@RequestBody Book book){
        Query query = new Query(Criteria.where("id").is(book.getId()));
        mongoTemplate.remove(query, Book.class);
        return mongoTemplate.findAll(Book.class);
    }

    /**
     * 根據name查詢,匹配所有數據刪除並返回
     * @param book
     * @return
     */
    @RequestMapping("/findAllAndRemove")
    public List<Book> findAllAndRemove(@RequestBody Book book){
        Query query = new Query(Criteria.where("name").is(book.getName()));
        return mongoTemplate.findAllAndRemove(query, Book.class);
    }

    /**
     * 根據name查詢,匹配第一條數據刪除並返回
     * @param book
     * @return
     */
    @RequestMapping("/findAndRemove")
    public Book findAndRemove(@RequestBody Book book){
        Query query = new Query(Criteria.where("name").is(book.getName()));
        return mongoTemplate.findAndRemove(query, Book.class);
    }

    /**
     * 根據id查詢
     * @param book
     * @return
     */
    @RequestMapping("/findById")
    public Book findById(@RequestBody Book book){
        return mongoTemplate.findById(book.getId(), Book.class);
    }

    /**
     * 條件查詢
     * @param book
     * @return
     */
    @RequestMapping("/find")
    public List<Book> find(@RequestBody Book book){
        Query query = new Query(Criteria.where("price").lt(book.getPrice()));
        return mongoTemplate.find(query, Book.class);
    }

    /**
     * and查詢
     * @param book
     * @return
     */
    @RequestMapping("/findOfAnd")
    public List<Book> findOfAnd(@RequestBody Book book){
        Query query = new Query(
                new Criteria().andOperator(
                        Criteria.where("name").is(book.getName()),
                        Criteria.where("price").is(book.getPrice())
                )
        );
        return mongoTemplate.find(query, Book.class);
    }

    /**
     * or查詢
     * @param name1
     * @param name2
     * @return
     */
    @RequestMapping("/findOfOr")
    public List<Book> findOfOr(@RequestParam("a") String name1, @RequestParam("b") String name2){
        Query query = new Query(
                new Criteria().orOperator(
                                Criteria.where("name").is(name1),
                                Criteria.where("name").is(name2)
                        )
        );
        return mongoTemplate.find(query, Book.class);
    }

    /**
     * 模糊查詢
     * @param book
     * @return
     */
    @RequestMapping("/findOfLike")
    public List<Book> findOfLike(@RequestBody Book book){
        Pattern pattern = Pattern.compile("^.*" + book.getName() + ".*$", Pattern.CASE_INSENSITIVE);
        Query query = new Query(Criteria.where("name").regex(pattern));
        return mongoTemplate.find(query, Book.class);
    }

    /**
     * 條件查詢,只返回一個
     * @param book
     * @return
     */
    @RequestMapping("/findOne")
    public Book findOne(@RequestBody Book book){
        Query query = new Query(Criteria.where("name").is(book.getName()));
        return mongoTemplate.findOne(query, Book.class);
    }

    /**
     * 查詢所有
     * @return
     */
    @RequestMapping("/findAll")
    public List<Book> findAll(){
        return mongoTemplate.findAll(Book.class);
    }

    /**
     * 分頁查詢(注意它的頁碼從0開始)
     * @param request
     * @return
     */
    @RequestMapping("/findAllPageable")
    public Page<Book> findAllPageable(@RequestBody BookRequest request){
        // 排序
        Sort sort = Sort.by(Sort.Direction.DESC, "price");
        // 頁碼信息
        PageRequest pageRequest = PageRequest.of(request.getPageNo(), request.getPageSize(), sort);
        // 查詢
        Query query = new Query();
        long count = mongoTemplate.count(query, Book.class);
        List<Book> books = mongoTemplate.find(query.with(pageRequest), Book.class);
        Page<Book> bookPage = new PageImpl<>(books, pageRequest, count);
        return bookPage;
    }

}

application.properties

# If you use the Mongo 3.0 Java driver, spring.data.mongodb.host and spring.data.mongodb.port are not supported. In such cases, spring.data.mongodb.uri should be used to provide all of the configuration
# 如果你使用Mongo 3.X 版本,不支持 spring.data.mongodb.host and spring.data.mongodb.port,而應該用spring.data.mongodb.uri
# 格式:mongodb://user:[email protected]:12345,mongo2.example.com:23456/test
# 默認:mongodb://localhost/test
spring.data.mongodb.uri=mongodb://localhost:27017/test
#spring.data.mongodb.host=localhost
#spring.data.mongodb.port=27017

啓動後即可在postman裏測試了,比如

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章