spring-data-mongodb的簡單使用

mongodb作爲一個非關係型數據庫,可以說如雷貫耳。19年找工作就被問過,並且也背了一些知識點。但是最近才真正的開始在項目中使用。所以簡單記錄下使用方法。
首先我們當前公司用的是spring-data-mongodb。畢竟本來項目也是boot項目,使用boot的場景啓動器再正常不過,下面從第一步引入依賴開始:

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

然後緊接着必不可少的就是參數之類的。自己隨便寫寫吧,最簡配置就是隻寫個地址,如下:

spring:
  data:
    mongodb:
      uri: mongodb://XXXXXXXXX

然後首先我們對mongodb的數據結構有一個基本的理解。首先mongodb是文檔存儲的。其本質我覺得是類似於json 的一種kv形式,只不過這個v還是可以是kv套娃,也可以是list,int,string等等。
但是總而言之這個一定是標準的kv格式。說點題外話:mongodb中文檔組成雙線鏈表,而索引的存儲是B樹。
而落實到我們的實際使用中,我們比較常用的就是文檔。其實本質上mongodb中文檔的格式不要求強一致。是完全可以字段都不同的。但是我們一般都會盡量去維護其文檔的數據格式的一致性。不然維護起來問題太大。
所以這裏文檔是按照既定的數據格式來使用。
而data-mongodb最人性化的一點是很接近於jpa。所以我們如果有jpa的使用經驗,那麼使用起來是非常方便上手的。

data-mongodb基於註解的使用

第一步:把文檔定義爲實體類,並做好映射。

因爲我們獲取到的數據一定在java中有個實體對象來接收(哪怕是list)。所以這步映射和jpa的映射其實差不多概念。暫時我不知道能不能自動生成,反正我這邊是手寫的。
其實重點就是幾個註解。

@Document(collection="newyork")

實體類中添加這個註解就可以把mongodb中的文檔和類建立映射了。類似於jpa的@Entity註解。 在spring官網上也是這麼說的:


然後如果實體類中的字段和mongodb的文檔中的key名稱不符合,可以如此標註,jpa和mybatis-plus都有類似的功能,其實這個比較容易理解,下面是官網的使用demo:



@id就是標註此字段是文檔的id,沒啥好說的。

第二步:MongoTemplate和Repository

這兩個都是可以操作mongodb的一種方式。
只不過template就是一個模板方法,每次傳參要確定操作哪個文檔等,我個人感覺有點類似於mp的條件構造器(單純的用法上)。而Repository是一個族羣。和jpa的Repository大同小異、其中也有很多封裝了基礎操作的接口,比如CrudRepository或PagingAndSortingRepository。其中就封裝了基本的crud方法和分頁排序啥的。只不過這種用法的前期準備比較複雜,要每一個表(文檔)做一個映射。
這個用法也是類似於jpa的,就是每一個實體寫一個接口,然後繼承Repository。其中泛型傳自己的。沒啥好說的。感覺這種用法是用起來最熟練的。畢竟我們現在的mp和jpa都是類似的寫法。
同樣我暫時不知道有沒有代碼生成器可以自動生成類,但是手動寫也能接受。而且這個也支持屬性名映射,如下截圖:



這就不細說了,感興趣的自己去
然後MongodbTemplate的用法有點類似redisTemplate了,不過這個比redisTemplate要複雜一點,畢竟這個要涉及到文檔類型,屬性啥的。關於這塊我們可以去spring官網去看看,如下位置說的很詳細:



當然了我們項目中使用比較簡單,直接注入了data.mongodb.core中的mongoTemplate。點進去我們可以看下其中的方法,這個方法兩千多行,所以我就不一一說了,總而言之常用的instert,save,remove,find都有。

需要注意的是這個查詢的參數。Query類型的,所以我們在使用的時候要先創建這樣一個條件構造器。我們上面看mongoTemplate的時候應該也看到了Query,Criteria已經Update等工具類。其實簡單來說,
三個類中,query負責構建查詢條件。而Criteria是具體的條件的添加。Update負責修改的條件。(用sql來比喻,query 類似於where,criteria類似於name = 'lisijia' and age>6 or XXXX這樣的具體的條件。update類似於set age = 11這部分)、
我們在使用的時候其實也比較簡單,畢竟框架做出來是讓人用的,下面是個簡單的使用:
        Query query = new Query();
        query.addCriteria(Criteria.where("positon_id").is(positionId));
        List<UserVO>userList = mongoTemplate.find(query, UserVO.class,
                TableConstant.CAR_CLOCK_IN_RECORD);
        System.out.println(userList);

很明顯,上面的代碼是查詢位置id是給定參數的用戶列表。這個cirteria是支持很多運算符的,具體可以去官網看,我簡單截了個圖:



還有個分頁排序,也已經有現成的輪子了,直接附上截圖:


剩下其實沒啥東西了,畢竟我這兩天也只是簡單的看了下基本的使用,以後有什麼問題會追加的。
本篇筆記就記到這裏,如果稍微幫到你了記得點個喜歡點個關注,也祝大家工作順順利利,生活健健康康!

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