MongoDB安裝與Spring整合

来源:https://www.cnblogs.com/walkwithmonth/archive/2019/12/15/12044618.html
-Advertisement-
Play Games

MongoDB是面向文檔的非關係型資料庫,數據模型是一種類似於JSON的結構,在資料庫中存的是各種各樣的JSON。官網下載地址:https://www.mongodb.com/download-center/enterprise 一、以Centos為例,安裝mongoDB 1)下載安裝包mongod ...


     MongoDB是面向文檔的非關係型資料庫,數據模型是一種類似於JSON的結構,在資料庫中存的是各種各樣的JSON。官網下載地址:https://www.mongodb.com/download-center/enterprise

  一、以Centos為例,安裝mongoDB

      1)下載安裝包mongodb-linux-x86_64-rhel70-4.2.1.tgz,上傳opt目錄

      2)解壓安裝包  tar -zxvf   mongodb-linux-x86_64-rhel70-4.2.1.tgz 

      3)mv mongodb-linux-x86_64-rhel70-4.2.1/ /usr/local/mongodb

      4)在bin目錄,新增mongodb.conf配置文件

dbpath = /data/db #數據文件存放目錄,提前新建目錄  
logpath = /data/logs/mongodb.log #日誌文件存放目錄,提前新建目錄  
port = 27017  #埠
fork = true  #以守護程式的方式啟用,即在後臺運行
bind_ip=0.0.0.0    #允許所有的連接
auth=true #是否安全檢驗

  5)運行服務

        ./mongod  --config mongodb.conf

         

   二、創建資料庫與用戶

   1)修改配置參數,重啟服務

        auth=false #是否安全檢驗

   2)登錄服務,創建應用資料庫與用戶

   2.1)切換資料庫  use cmp;  創建用戶 2.2)db.createUser({user:"cmp",pwd:"123456",roles:[{role:"dbAdmin",db:"cmp"},{role:"readWrite",db:"cmp"}]});

           

     3)使用NoSQLBooster客戶端登錄 

         

    三、Spring整合MongoDB

        1)引入MongoDB的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.demo</groupId>
  <artifactId>springmongodb</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>springmongodb</name>
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-mongodb</artifactId>
      <version>1.8.6.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>4.1.9.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.25</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

  2)Spring配置文件

               mongodb.properties

mongodb.hostport=服務IP埠
mongodb.db=
mongodb.username=
mongodb.password=

         spring-mongodb.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xmlns:context="http://www.springframework.org/schema/context"
	   xmlns:mongo="http://www.springframework.org/schema/data/mongo"
	xsi:schemaLocation="
	      http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-4.2.xsd
          http://www.springframework.org/schema/data/mongo   
          http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd   
          http://www.springframework.org/schema/beans   
          http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">

	<context:property-placeholder location="classpath:mongodb.properties" />
    <context:component-scan base-package="com.itep"></context:component-scan>
	<!-- 定義mongo對象,對應的是mongodb官方jar包中的Mongo,replica-set設置集群副本的ip地址和埠 -->
	<mongo:mongo id="mongo" replica-set="${mongodb.hostport}">
		<!-- 一些連接屬性的設置 -->
		<mongo:options connections-per-host="8"
			threads-allowed-to-block-for-connection-multiplier="4"
			connect-timeout="20000" 
			max-wait-time="20000" 
			auto-connect-retry="true"
			socket-keep-alive="true" 
			socket-timeout="20000" 
			slave-ok="true"
			write-number="1" 
			write-timeout="0" 
			write-fsync="true" 
			/>
	</mongo:mongo>
	<mongo:repositories base-package="com.itep.dao"></mongo:repositories>
	<mongo:db-factory dbname="${mongodb.db}" mongo-ref="mongo"/>
	
	<!-- 配置用戶名密碼 -->
	<bean id="userCredentials" class="org.springframework.data.authentication.UserCredentials">
		<constructor-arg name="username" value="${mongodb.username}" />
		<constructor-arg name="password" value="${mongodb.password}" />
	</bean>

	<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
		<constructor-arg ref="mongo" />
		<constructor-arg ref="userCredentials" />
		<constructor-arg name="databaseName" value="${mongodb.db}" />
	</bean>

</beans>

  3)編碼

          3.1實體類 

package com.demo.bean;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

/**
 * 功能說明:
 * 
 */
@Document(collection = "user")
public class User {

    @Indexed(unique = false)
    @Id
    private String uuid;

    private String name;

    private String age;

    public String getUuid() {
        return uuid;
    }

    public void setUuid(String uuid) {
        this.uuid = uuid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "uuid='" + uuid + '\'' +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}

     3.2 數據層

package com.demo.service;

import com.itep.bean.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 功能說明:
 * 
 */
@Service("mongoDBService")
public class MongoDBServiceImpl implements IMongoDBService{

    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public <T> T findById(Class<T> entityClass , String id) {
        return this.mongoTemplate.findById ( id,entityClass );
    }

    @Override
    public <T> List<T> findAll(Class<T> entityClass) {
        return this.mongoTemplate.findAll ( entityClass );
    }

    @Override
    public void remove(Object obj) {
        this.mongoTemplate.remove ( obj );
    }

    @Override
    public void add(Object obj) {
        this.mongoTemplate.insert ( obj );
    }

    @Override
    public void saveOrUpdate(Object obj) {
        this.mongoTemplate.save ( obj );
    }

    @Override
    public <T> Long count(Class<T> entityClass , Query query) {
        return this.mongoTemplate.count ( query,entityClass );
    }

    @Override
    public <T> List<T> findByQuery(Class<T> entityClass , Query query , Page page) {
        Long count = this.count ( entityClass,query );
        if(page != null){
             page.setRecordCount ( count.intValue () );
             int pageNumber = page.getCurrentPage ();
             int pageSize = page.getPageSize ();
             query.skip ( (pageNumber-1) * pageSize).limit ( pageSize );
        }
        return this.mongoTemplate.find ( query,entityClass );
    }
}
View Code
package com.demo.service;

import com.itep.bean.Page;
import org.springframework.data.mongodb.core.query.Query;

import java.util.List;

/**
 * 功能說明:
 * 
 */
public interface IMongoDBService {

    <T> T findById(Class<T> entityClass,String id);

    <T> List<T> findAll(Class<T> entityClass);

    void remove(Object obj);

    void add(Object obj);

    void saveOrUpdate(Object obj);

    <T> Long count(Class<T> entityClass, Query query);

    <T> List<T> findByQuery(Class<T> entityClass, Query query, Page page);

}
View Code

         3.3 單元測試

package com.demo;

import com.itep.bean.User;
import com.itep.service.IMongoDBService;
import com.itep.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;
import java.util.UUID;

@RunWith (SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations ="classpath:spring-mongodb.xml")
public class AppTest 
{

    @Autowired
    private IMongoDBService mongoDBService;

    @Test
    public void query(){

        Query query = new Query (  );
        query.addCriteria ( Criteria.where ( "age" ).is ( "21" ) );
        query.with ( new Sort ( new Sort.Order ( Sort.Direction.ASC ,"name") ) );
        List<User> byQuery = mongoDBService.findByQuery ( User.class , query , null );
        System.out.println ("..." + byQuery);
        mongoDBService.findByQuery ( User.class , query , null );
    }
 
    @Test
    public  void  insert(){
       User user = new User();
       String uuid = UUID.randomUUID ().toString ().replace ( "-","" );
       System.out.println ("uuid:" + uuid);
       user.setName ( "mongodb" );
       user.setUuid ( uuid );
       user.setAge ( "21" );
       mongoDBService.add ( user );
       System.out.println ("執行成功");
    }

}

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 單片機是可編程器件,可以通過編程來實現邏輯功能,這不僅降低了產品設計的複雜度,更豐富了產品的功能。現在的電子產品,多是以單片機為控制核心,再根據不同的用戶需求來搭建不同的外設電路。所以,單片機在電子產品設計中非常重要,學會單片機在找工作時具有非常大的優勢。 1 以單片機為核心的產品框圖 那麼,初學者 ...
  • 1.安裝依賴環境 yum y install wge gcc c++ .......... 2.關閉Firewalld防火牆和SElinux systemctl stop firewalld systemct disable firewalld cd /etc/selinux/config 把ena ...
  • 一,文件查看more,less,head,tail,cat,tac 分屏查看文件內容 more:和man用法一樣,但翻屏到尾部自動推出。 less:和man用法一樣。 head:查看文件的前n行。n預設為10. n num:指定查看多少行 num:指定查看多少行 tail:查看文件的後n行。n預設為 ...
  • ...
  • 用mysqli_connect就可以解決。 mysqli_array()有連個參數,第一個是連接mysql名。 php遇到這個警告Warning: Use of undefined constant title - assumed 'title' (this will throw an Error ...
  • 最近需要使用嵌入式資料庫進行存儲應用本地信息,本文章主要進行記錄當前比較流行的嵌入式資料庫相關的鏈接,嵌入式資料庫往往是以lib的形式存在,常用於持久化存儲軟體的信息,嵌入式資料庫往往和應用軟體緊密集成: 特點: database systems with differing application ...
  • 在中標麒麟上安裝配置達夢資料庫7分為如下幾步: 下麵依次進行介紹。 1. 檢查軟硬體配置是否滿足要求 1) 查看操作系統信息 Cat /etc/issue Uname -a Uname -m 需是達夢資料庫支持的操作系統類型及版本。 2) 查看相關軟體包是否正確安裝 Rpm -aq | grep g ...
  • 環境及工具 JDK12 Gradle5.6.2 GIT 源碼及預處理 到github將代碼clone下來,可以根據自己的需求來獲取版本,例如 git checkout v7.5.0 提前下載gradle5.6.2 zip文件 從https://services.gradle.org/distribu ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...