欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

引言

MongoDB 特點(diǎn)

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

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

3、你可以通過(guò)本地或者網(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支持豐富的查詢(xún)表達(dá)式。查詢(xún)指令使用JSON形式的標(biāo)記,可輕易查詢(xún)文檔中內(nèi)嵌的對(duì)象及數(shù)組。

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

7、Mongodb中的Map/reduce主要是用來(lái)對(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編寫(xiě)的,并可以通過(guò)db.runCommand或mapreduce命令來(lái)執(zhí)行MapReduce操作。

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

11、MongoDB允許在服務(wù)端執(zhí)行腳本,可以用Javascript編寫(xiě)某個(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、依賴(lài)導(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>

也可以說(shuō)是導(dǎo)入SpringData的mongodb依賴(lài)

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í)體類(lèi)

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è)類(lèi)的實(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ù),元素類(lèi)型
    //批量處理推薦insert
    //insert一次性可以插入整個(gè)數(shù)據(jù)  效果較高 save需要遍歷整個(gè)數(shù)據(jù),一次插入或更新 效果較低
}

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

? @Testj
? ? void testDocFind() {
? ? ? ? //文檔查詢(xún)操作()查詢(xún)所有
? ? ? ? List<User> users = mongoTemplate.findAll(User.class);
// ? ? ?users.forEach(System.out::println);
? ? ? ? //基于id查詢(xún)一個(gè)
? ? ? ? User user = mongoTemplate.findById(1, User.class);
// ? ? ? ?System.out.println(user);
? ? ? ? //條件Query查詢(xún)?nèi)?
? ? ? ? List<User> users1 = mongoTemplate.find(new Query(), User.class);
? ? ? ? //條件Query查詢(xún)
? ? ? ? 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)
? ? ? ? //條件 小于等于 大于等于 ?查詢(xún) 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 查詢(xún)
? ? ? ? List<User> users5 = mongoTemplate.find(Query.query(Criteria.where("name").is("劉品水").and("salary").is(1000)), User.class);
? ? ? ? //or 查詢(xún)
? ? ? ? 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 查詢(xún)
? ? ? ? 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ù)、去重查詢(xún)功能

?@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);
? ? ? ? //查詢(xún)總條數(shù)
? ? ? ? long count = mongoTemplate.count(new Query(), User.class);
? ? ? ? System.out.println("總條數(shù)為"+count);
? ? }

使用JSON格式查詢(xún)

   @Test
    void testDocFindByJSON() {
        //使用JSON字符串方式查詢(xún)
        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);
        //插入更新(沒(méi)有符合條件的數(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)文章

  • MyBatis-Plus實(shí)現(xiàn)邏輯刪除功能解析

    MyBatis-Plus實(shí)現(xiàn)邏輯刪除功能解析

    這篇文章主要介紹了MyBatis-Plus實(shí)現(xiàn)邏輯刪除功能解析,有時(shí)候并不需要真正的刪除數(shù)據(jù),而是想邏輯刪除,方便數(shù)據(jù)恢復(fù),MyBatis-Plus可以很方便的實(shí)現(xiàn)邏輯刪除的功能,需要的朋友可以參考下
    2023-11-11
  • Java與Node.js利用AES加密解密出相同結(jié)果的方法示例

    Java與Node.js利用AES加密解密出相同結(jié)果的方法示例

    這篇文章主要介紹了Java與Node.js利用AES加密解密出相同結(jié)果的方法,文中給出了詳細(xì)的示例代碼,相信對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,需要的朋友們下面來(lái)一起看看吧。
    2017-02-02
  • SVN導(dǎo)入maven項(xiàng)目報(bào)錯(cuò)解決方案

    SVN導(dǎo)入maven項(xiàng)目報(bào)錯(cuò)解決方案

    這篇文章主要介紹了SVN導(dǎo)入maven項(xiàng)目報(bào)錯(cuò)解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • springboot?@Async?注解如何實(shí)現(xiàn)方法異步

    springboot?@Async?注解如何實(shí)現(xiàn)方法異步

    這篇文章主要介紹了springboot?@Async?注解如何實(shí)現(xiàn)方法異步,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 如何基于mybatis框架查詢(xún)數(shù)據(jù)庫(kù)表數(shù)據(jù)并打印

    如何基于mybatis框架查詢(xún)數(shù)據(jù)庫(kù)表數(shù)據(jù)并打印

    這篇文章主要介紹了如何基于mybatis框架查詢(xún)數(shù)據(jù)庫(kù)表數(shù)據(jù)并打印,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • spring中的注入list集合

    spring中的注入list集合

    這篇文章主要介紹了spring中的注入list集合問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Spring 框架中注入或替換方法實(shí)現(xiàn)

    Spring 框架中注入或替換方法實(shí)現(xiàn)

    這篇文章主要介紹了Spring 框架中注入或替換方法實(shí)現(xiàn),非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • SpringBoot多數(shù)據(jù)源配置詳細(xì)教程(JdbcTemplate、mybatis)

    SpringBoot多數(shù)據(jù)源配置詳細(xì)教程(JdbcTemplate、mybatis)

    這篇文章主要介紹了SpringBoot多數(shù)據(jù)源配置詳細(xì)教程(JdbcTemplate、mybatis),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java 基于Spire.Cloud.SDK for Java在PDF中繪制形狀

    Java 基于Spire.Cloud.SDK for Java在PDF中繪制形狀

    這篇文章主要介紹了Java 基于Spire.Cloud.SDK for Java在PDF中繪制形狀,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java中精確的浮點(diǎn)運(yùn)算操作示例

    Java中精確的浮點(diǎn)運(yùn)算操作示例

    這篇文章主要介紹了Java中精確的浮點(diǎn)運(yùn)算操作方法,結(jié)合具體實(shí)例形式分析了java浮點(diǎn)數(shù)運(yùn)算的相關(guān)函數(shù)、使用技巧與注意事項(xiàng),需要的朋友可以參考下
    2017-06-06

最新評(píng)論