最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot操作Mongodb的實(shí)現(xiàn)示例

 更新時(shí)間:2023年06月27日 10:31:44   作者:不掉頭發(fā)的阿水  
本文主要介紹了SpringBoot操作Mongodb的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

引言

MongoDB 特點(diǎn)

1、MongoDB 是一個(gè)面向文檔存儲(chǔ)的數(shù)據(jù)庫(kù),操作起來比較簡(jiǎn)單和容易。

2、你可以在MongoDB記錄中設(shè)置任何屬性的索引(如:FirstName=“Sameer”,Address=“8 Gandhi Road”)來實(shí)現(xiàn)更快的排序。

3、你可以通過本地或者網(wǎng)絡(luò)創(chuàng)建數(shù)據(jù)鏡像,這使得MongoDB有更強(qiáng)的擴(kuò)展性。

4、如果負(fù)載的增加(需要更多的存儲(chǔ)空間和更強(qiáng)的處理能力) ,它可以分布在計(jì)算機(jī)網(wǎng)絡(luò)中的其他節(jié)點(diǎn)上這就是所謂的分片。

5、Mongo支持豐富的查詢表達(dá)式。查詢指令使用JSON形式的標(biāo)記,可輕易查詢文檔中內(nèi)嵌的對(duì)象及數(shù)組。

6、MongoDb 使用update()命令可以實(shí)現(xiàn)替換完成的文檔(數(shù)據(jù))或者一些指定的數(shù)據(jù)字段 。

7、Mongodb中的Map/reduce主要是用來對(duì)數(shù)據(jù)進(jìn)行批量處理和聚合操作。

8、Map和Reduce。Map函數(shù)調(diào)用emit(key,value)遍歷集合中所有的記錄,將key與value傳給Reduce函數(shù)進(jìn)行處理。

9、Map函數(shù)和Reduce函數(shù)是使用Javascript編寫的,并可以通過db.runCommand或mapreduce命令來執(zhí)行MapReduce操作。

10、GridFS是MongoDB中的一個(gè)內(nèi)置功能,可以用于存放大量小文件。

11、MongoDB允許在服務(wù)端執(zhí)行腳本,可以用Javascript編寫某個(gè)函數(shù),直接在服務(wù)端執(zhí)行,也可以把函數(shù)的定義存儲(chǔ)在服務(wù)端,下次直接調(diào)用即可。

12、MongoDB支持各種編程語(yǔ)言:RUBY,PYTHON,JAVA,C++,PHP,C#等多種語(yǔ)言。

1、初始化工程

使用 Spring Initializr 快速初始化一個(gè) Spring Boot 工程

2、依賴導(dǎo)入

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mongodb -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
 <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

也可以說是導(dǎo)入SpringData的mongodb依賴

3、添加配置

在application.properties文件添加配置

spring.data.mongodb.uri=mongodb://192.168.10.41:27017/lps
#192.168.10.41為我的ip地址 27017為Mongodb端口號(hào)  lps是數(shù)據(jù)庫(kù) 按需更改即可

4、添加實(shí)體類

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import java.util.Date;
/**
 * @Description
 * @Author 劉品水
 * @Data 2023/4/28 10:58
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document("users")//這個(gè)類的實(shí)例代表mongodb的一條文檔 @AliasFor("collection")
public class User {
    @Id
    private Integer id;
    @Field("username")
    private String name;
    @Field
    private Double salary;
    @Field
    private Date birthday;
}

5、操作Mongodb

自動(dòng)裝配

 @Autowired
    private MongoTemplate mongoTemplate;

創(chuàng)建集合

@Test
void createCollection() {
    //判斷是否存在
    boolean devIsExist = mongoTemplate.collectionExists("dev");
    if (!devIsExist) {
        //不存在就創(chuàng)建
        MongoCollection<Document> dev=mongoTemplate.createCollection("dev");
    }
}

刪除集合

@Test
void testDropCollection() {
    //刪除集合
    mongoTemplate.dropCollection("dev");
}

測(cè)試文檔添加功能

   @Test
    void testDocAdd() {
        User user = new User(2, "彭于晏啊", 10086.00, new Date());
        //文檔添加操作
        mongoTemplate.save(user); //save插入已存在的數(shù)據(jù)會(huì)進(jìn)行更新
//        mongoTemplate.insert(user);//insert插入已存在的數(shù)據(jù)會(huì)DuplicateKeyException異常
    }

測(cè)試文檔批量添加功能

@Test
void testDocBatchAdd() {
    List<User> userList = new ArrayList<>();
    userList.add(new User(3, "吳彥祖", 10666.00, new Date()));
    userList.add(new User(4, "張無(wú)忌", 10886.00, new Date()));
    userList.add(new User(5, "蓋倫", 50086.00, new Date()));
    //文檔添加操作
    mongoTemplate.insert(userList, User.class);//參數(shù):數(shù)據(jù),元素類型
    //批量處理推薦insert
    //insert一次性可以插入整個(gè)數(shù)據(jù)  效果較高 save需要遍歷整個(gè)數(shù)據(jù),一次插入或更新 效果較低
}

or、and內(nèi)容查詢功能

? @Testj
? ? void testDocFind() {
? ? ? ? //文檔查詢操作()查詢所有
? ? ? ? List<User> users = mongoTemplate.findAll(User.class);
// ? ? ?users.forEach(System.out::println);
? ? ? ? //基于id查詢一個(gè)
? ? ? ? User user = mongoTemplate.findById(1, User.class);
// ? ? ? ?System.out.println(user);
? ? ? ? //條件Query查詢?nèi)?
? ? ? ? List<User> users1 = mongoTemplate.find(new Query(), User.class);
? ? ? ? //條件Query查詢
? ? ? ? List<User> users2 = mongoTemplate.find(Query.query(Criteria.where("name").is("劉品水")), User.class);
// ? ? ? ?users2.forEach(System.out::println);//User(id=1, name=劉品水, salary=1000.0, birthday=Fri Apr 28 11:21:39 CST 2023)
? ? ? ? //條件 小于等于 大于等于 ?查詢 less than equal | greater than equal
? ? ? ? List<User> users3 = mongoTemplate.find(Query.query(Criteria.where("salary").lte(10666)), User.class);
? ? ? ? List<User> users4 = mongoTemplate.find(Query.query(Criteria.where("salary").gte(10666)), User.class);
? ? ? ? //and 查詢
? ? ? ? List<User> users5 = mongoTemplate.find(Query.query(Criteria.where("name").is("劉品水").and("salary").is(1000)), User.class);
? ? ? ? //or 查詢
? ? ? ? Criteria criteria = new Criteria();
? ? ? ? criteria.orOperator(
? ? ? ? ? ? ? ? Criteria.where("name").is("劉品水"),
? ? ? ? ? ? ? ? Criteria.where("salary").is(10086)
? ? ? ? );
? ? ? ? List<User> users6 = mongoTemplate.find(Query.query(criteria), User.class);
? ? ? ? //or 和 and 查詢
? ? ? ? List<User> users7 =mongoTemplate.find(Query.query(Criteria.where("name").is("劉品水")
? ? ? ? ? ? ? ? .orOperator(Criteria.where("salary").is(1000))), User.class);
? ? ? ? users7.forEach(System.out::println);
? ? }

排序、分頁(yè)、條數(shù)、去重查詢功能

?@Test
? ? void testDocFindByDifferent() {
? ? ? ? //排序
? ? ? ? Query querySort = new Query();
? ? ? ? querySort.with(Sort.by(Sort.Order.desc("salary")));
? ? ? ? List<User> users = mongoTemplate.find(querySort, User.class);
? ? ? ? //排序加分頁(yè)
? ? ? ? Query querySortAndPage = new Query();
? ? ? ? querySortAndPage.with(Sort.by(Sort.Order.desc("salary")))
? ? ? ? ? ? ? ? .skip(3)
? ? ? ? ? ? ? ? .limit(3);
? ? ? ? List<User> users1 = mongoTemplate.find(querySortAndPage, User.class);
// ? ? ? ?users1.forEach(System.out::println);
? ? ? ? //查詢總條數(shù)
? ? ? ? long count = mongoTemplate.count(new Query(), User.class);
? ? ? ? System.out.println("總條數(shù)為"+count);
? ? }

使用JSON格式查詢

   @Test
    void testDocFindByJSON() {
        //使用JSON字符串方式查詢
        BasicQuery basicQuery = new BasicQuery("{name: '劉品水',salary: 66686}");
        BasicQuery basicQuery1 = new BasicQuery("{$or: [{name: '劉品水'},{salary: 50086}]}");
        BasicQuery basicQuery2 = new BasicQuery("{$or: [{name: '劉品水'},{salary: 50086}]}","{name: 1}");
        BasicQuery basicQuery3 = new BasicQuery("{$or: [{name: '劉品水'},{salary: 50086}]}","{salary: 0}");
        List<User> users = mongoTemplate.find(basicQuery3, User.class);
        users.forEach(System.out::println);
    }
  BasicQuery basicQuery3 = new BasicQuery("{$or: [{name: '劉品水'},{salary: 50086}]}","{salary: 0}");
        List<User> users = mongoTemplate.find(basicQuery3, User.class);
        users.forEach(System.out::println);
    }

文檔更新操作

 @Test
    void testUpdate() {
        //更新操作
        Update update = new Update();
        update.set("salary", 99999);
        //更新符合條件的第一條
//        mongoTemplate.updateFirst(Query.query(Criteria.where("name").is("張無(wú)忌")), update, User.class);
        //更新符合條件的多條
        //mongoTemplate.updateMulti(Query.query(Criteria.where("name").is("張無(wú)忌")), update, User.class);
        //插入更新(沒有符合條件的數(shù)據(jù)的時(shí)候插入數(shù)據(jù))
        update.setOnInsert("id", 9);
        UpdateResult updateResult = mongoTemplate.upsert(Query.query(Criteria.where("name").is("迪迦奧特曼")), update, User.class);
        System.out.println("獲取修改的計(jì)數(shù)"+updateResult.getModifiedCount());//獲取修改的計(jì)數(shù)
        System.out.println("獲取匹配計(jì)數(shù)"+updateResult.getMatchedCount());//獲取匹配計(jì)數(shù)
        System.out.println("獲取轉(zhuǎn)換后的Id"+updateResult.getUpsertedId());//獲取轉(zhuǎn)換后的Id
    }

文檔刪除操作

  @Test
    //文檔刪除操作
    void testRemove() {
        //刪除全部
//        mongoTemplate.remove(new Query(),User.class);
        //條件刪除
        DeleteResult remove = mongoTemplate.remove(Query.query(Criteria.where("name").is("張無(wú)忌")), User.class);
        System.out.println("獲取已刪除計(jì)數(shù)"+remove.getDeletedCount());
        System.out.println(remove.wasAcknowledged());
    }
 }

到此這篇關(guān)于SpringBoot操作Mongodb的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)SpringBoot操作Mongodb內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java自動(dòng)添加重寫的toString方法詳解

    Java自動(dòng)添加重寫的toString方法詳解

    在本篇文章里小編給大家整理了關(guān)于Java自動(dòng)添加重寫的toString方法總結(jié),需要的朋友們學(xué)習(xí)下。
    2019-07-07
  • 利用MyBatis進(jìn)行不同條件的like模糊查詢的方法

    利用MyBatis進(jìn)行不同條件的like模糊查詢的方法

    這篇文章主要介紹了利用MyBatis進(jìn)行不同條件的like模糊查詢,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • SpringBoot整合jasypt實(shí)現(xiàn)數(shù)據(jù)加密的步驟

    SpringBoot整合jasypt實(shí)現(xiàn)數(shù)據(jù)加密的步驟

    聽說過jasypt嗎?它可是一個(gè)超級(jí)流行的Java庫(kù)哦,提供了簡(jiǎn)單又高效的加密和解密接口,整合jasypt后,我們的SpringBoot應(yīng)用就能輕松處理敏感數(shù)據(jù)的加密和解密,而不必為復(fù)雜的加密算法頭疼啦,下面給大家介紹SpringBoot整合jasypt實(shí)現(xiàn)數(shù)據(jù)加密的步驟,感興趣的朋友一起看看吧
    2025-04-04
  • Java中的世界時(shí)區(qū)如何自動(dòng)計(jì)算及生成?

    Java中的世界時(shí)區(qū)如何自動(dòng)計(jì)算及生成?

    在?Java?中,處理時(shí)區(qū)和時(shí)間計(jì)算是一個(gè)非常常見的需求,尤其是在涉及全球應(yīng)用時(shí),Java?提供了一些強(qiáng)大的?API?來處理世界時(shí)區(qū)(如?java.time?包),下面將介紹如何基于?Java?自動(dòng)計(jì)算時(shí)區(qū)并生成相應(yīng)的時(shí)間
    2025-01-01
  • macOS下Spring Boot開發(fā)環(huán)境搭建教程

    macOS下Spring Boot開發(fā)環(huán)境搭建教程

    這篇文章主要為大家詳細(xì)介紹了macOS下Spring Boot開發(fā)環(huán)境搭建教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Springboot WebJar打包及使用實(shí)現(xiàn)流程解析

    Springboot WebJar打包及使用實(shí)現(xiàn)流程解析

    這篇文章主要介紹了Springboot WebJar打包及使用實(shí)現(xiàn)流程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下的相關(guān)資料
    2020-08-08
  • Java基礎(chǔ)之自定義類加載器

    Java基礎(chǔ)之自定義類加載器

    應(yīng)該有很多小伙伴還不了解Java自定義類加載器吧,下文中有對(duì)Java自定義類加載器非常詳細(xì)的描述,還有小伙伴們最喜歡的代碼環(huán)節(jié),需要的朋友可以參考下
    2021-05-05
  • springboot-dubbo cannot be cast to問題及解決

    springboot-dubbo cannot be cast to問題及解決

    這篇文章主要介紹了springboot-dubbo cannot be cast to問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • spring-cloud-gateway降級(jí)的實(shí)現(xiàn)

    spring-cloud-gateway降級(jí)的實(shí)現(xiàn)

    這篇文章主要介紹了spring-cloud-gateway降級(jí)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Spring?MVC和springboot靜態(tài)資源處理問題

    Spring?MVC和springboot靜態(tài)資源處理問題

    這篇文章主要介紹了Spring?MVC和springboot靜態(tài)資源處理問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評(píng)論

汉寿县| 深圳市| 七台河市| 大城县| 贵溪市| 泗阳县| 玉屏| 丹凤县| 长顺县| 灵丘县| 天全县| 襄垣县| 江永县| 兰州市| 湖北省| 西盟| 建湖县| 浦北县| 工布江达县| 黄浦区| 龙口市| 金寨县| 祁门县| 南昌县| 滁州市| 犍为县| 永州市| 颍上县| 和顺县| 绥江县| 郧西县| 如东县| 辽阳市| 修文县| 綦江县| 泌阳县| 孙吴县| 兰州市| 高唐县| 衢州市| 虎林市|