0115 springboot template方式操作mongodb

z_paul發表於2021-09-09

前言

redis效能基準是10w次讀寫/秒;
但是不適用於下面的場景:
需要快取,但是經常需要統計,分析和查詢。
這種場景適合使用Mongodb;
他是最接近關聯式資料庫的NOSQL;

mongodb介紹

C++語言編寫,基於分散式檔案儲存的開源資料庫系統,在負載高的時候,可以新增更多的節點,保證伺服器效能。可擴充套件高效能的資料儲存方案。
mongodb把資料儲存為一個文件,資料結構是鍵值對,欄位值還可以包含其他的文件,陣列等;

安裝mongodb

我的是mac電腦,簡單記錄一下安裝和使用步驟;

  1. brew cask install mongodb
  2. 設定path ;
  3. mongo 連線mongodb
  4. use database_name 建立資料庫

配置

依賴

<dependency>
	<groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
	<groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.39</version>
</dependency>

屬性配置

spring.data.mongodb.host=127.0.0.1
spring.data.mongodb.username=spring
spring.data.mongodb.password=123456
spring.data.mongodb.port=27017
spring.data.mongodb.database=springboot

MongoTemplate

可以直接透過MongoTemplate操作mongodb;

程式碼

package com.springbootpractice.demo.mongodb.service;

import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import com.springbootpractice.demo.mongodb.dao.entity.User;
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.List;

/**
 * 說明:mongodb操作程式碼
 * @author carter
 * 建立時間: 2020年01月15日 3:02 下午
 **/
@Service
public class UserService {

    private final MongoTemplate mongoTemplate;

    public UserService(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    public void saveUser(User user) {
        mongoTemplate.save(user);
    }

    public DeleteResult deleteUser(Long id) {
        Query query = Query.query(Criteria.where("id").is(id));
        return mongoTemplate.remove(query, User.class);
    }

    public List<User> findUser(String userName, String note, int skip, int limit) {
        final Criteria criteria = Criteria.where("userName")
                .regex(userName)
                .and("note")
                .regex(note);
        Query query = Query.query(criteria)
                .limit(limit)
                .skip(skip);
        return mongoTemplate.find(query, User.class);
    }

    public UpdateResult updateUser(Long id, String userName, String note) {
        Update update = new Update();
        update.set("userName", userName);
        update.set("note", note);
        Query query = Query.query(Criteria.where("id").is(id));
        return mongoTemplate.updateFirst(query, update, User.class);
    }

    public User getUser(Long id) {
        return mongoTemplate.findById(id, User.class);
    }
}

測試程式碼

package com.springbootpractice.demo.mongodb;

import com.springbootpractice.demo.mongodb.dao.entity.Role;
import com.springbootpractice.demo.mongodb.dao.entity.User;
import com.springbootpractice.demo.mongodb.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Arrays;
import java.util.stream.IntStream;

@SpringBootTest
class DemoMongodbApplicationTests {

    @Autowired
    private UserService userService;

    @Test
    void mongodbTest() {

        IntStream.rangeClosed(1, 10).forEach((item) -> {
            final long id = System.currentTimeMillis();
            userService.saveUser(User.builder().id(id)
                    .userName("user")
                    .note("note")
                    .roles(Arrays.asList(Role.builder().id(id)
                                    .roleName("role" + id)
                                    .note("note" + id)
                                    .build(),
                            Role.builder().id(id + 1000000)
                                    .roleName("_role" + id)
                                    .note("_note" + id)
                                    .build()
                    ))
                    .build());

        });

        userService.findUser("user", "note", 0, 10)
                .forEach(System.out::println);

    }

}

小結

本篇文章你可以學會:

  1. mongodb的簡要介紹,安裝;
  2. springboot的template方式實現mongodb的增刪改查操作;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/75/viewspace-2824754/,如需轉載,請註明出處,否則將追究法律責任。

相關文章