1. 程式人生 > 資料庫 >Spring Boot中使用MongoDB資料庫的方法

Spring Boot中使用MongoDB資料庫的方法

MongoDB資料庫簡介

簡介

  MongoDB是一個高效能,開源,無模式的,基於分散式檔案儲存的文件型資料庫,由C++語言編寫,其名稱來源取自“humongous”,是一種開源的文件資料庫──NoSql資料庫的一種。NoSql,全稱是 Not Only Sql,指的是非關係型的資料庫。

特點

  MongoDB資料庫的特點是高效能、易部署、易使用,儲存資料非常方便。主要功能特性有:

  * 面向集合儲存,易儲存物件型別的資料。
  * 模式自由。
  * 支援動態查詢。
  * 支援完全索引,包含內部物件。
  * 支援查詢。
  * 支援複製和故障恢復。
  * 使用高效的二進位制資料儲存,包括大型物件(如視訊等)。

  * 自動處理碎片,以支援雲端計算層次的擴充套件性
  * 支援RUBY,PYTHON,JAVA,C++,PHP等多種語言。
  * 檔案儲存格式為BSON(一種JSON的擴充套件)
  * 可通過網路訪問

MongoDB是一個開源的NoSQL文件資料庫,它使用一個JSON格式的模式(schema)替換了傳統的基於表的關係資料。Spring Boot為使用MongoDB提供了很多便利,包括spring-boot-starter-data-mongodb 'Starter POM'。

引入spring-boot-starter-data-mongodb包,在pom.xml配置檔案中增加如下內容(基於之前章節“Spring Boot 構建框架”中的pom.xml檔案):

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

注入一個自動配置的org.springframework.data.mongodb.MongoDbFactory來訪問Mongo資料庫。預設情況下,該例項將嘗試使用URL: mongodb://localhost/test連線一個MongoDB伺服器。

import org.springframework.data.mongodb.MongoDbFactory;
import com.mongodb.DB;
@Component
public class MyBean {
  private final MongoDbFactory mongo;
  @Autowired
  public MyBean(MongoDbFactory mongo) {
    this.mongo = mongo;
  }
  // ...
  public void example() {
  DB db = mongo.getDb();
    // ...
  }
}

可以通過設定spring.data.mongodb.uri來改變該url,或指定一個host/port。在application.properties中設定如下的屬性:

spring.data.mongodb.host=mongoserver
spring.data.mongodb.port=27017

注意:如果沒有指定spring.data.mongodb.port,那將使用預設的埠27017。可以簡單的從上面的示例中刪除這一行。如果不使用Spring Data Mongo,可以注入com.mongodb.Mongo beans而不是使用MongoDbFactory。如果想全面控制MongoDB連線的建立,也可以宣告自己的MongoDbFactory或Mongo,@Beans。

MongoDBTemplate

Spring Data Mongo提供了一個MongoTemplate類,它的設計和Spring的JdbcTemplate很相似。正如JdbcTemplate一樣,Spring Boot會自動配置一個bean,你只需簡單的注入它即可:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Component;
@Component
public class MyBean {
  private final MongoTemplate mongoTemplate;
  
  @Autowired
  public MyBean(MongoTemplate mongoTemplate) {
    this.mongoTemplate = mongoTemplate;
  }
  // ...
}

應用整合MongoDB案例

在application.properties配置檔案中新增內容如下:

spring.data.mongodb.uri=mongodb://name:pass@localhost:27017/test

多個IP叢集採用以下配置:

spring.data.mongodb.uri=mongodb://user:pass@ip1:port1,ip2:port2/database

建立資料實體類,具體程式碼如下:

public class UserInfo implements Serializable {
  private Long id;
  private String userName;
  private String passWord;
  //getter、setter省略
}

建立實體類對應dao層,實現增刪改查操作,具體程式碼如下:

@Component
public class UserInfoDaoImpl implements UserInfoDao {// UserInfoDao 自定義介面
  @Autowired
  private MongoTemplate mongoTemplate;
  /**
   * 建立物件
   * @param user
   */
  @Override
  public void saveUser(UserInfo user) {
    mongoTemplate.save(user);
  }
  /**
   * 根據使用者名稱查詢物件
   * @param userName
   * @return
   */
  @Override
  public UserInfo findUserByUserName(String userName) {
    Query query=new Query(Criteria.where("userName").is(userName));
    UserInfo user = mongoTemplate.findOne(query,UserInfo.class);
    return user;
  }
  /**
   * 更新物件
   * @param user
   */
  @Override
  public void updateUser(UserInfo user) {
    Query query=new Query(Criteria.where("id").is(user.getId()));
    Update update= new Update().set("userName",user.getUserName()).set("passWord",user.getPassWord());
    //更新查詢返回結果集的第一條
    mongoTemplate.updateFirst(query,update,UserInfo.class);
    //更新查詢返回結果集的所有
    // mongoTemplate.updateMulti(query,UserInfo.class);
  }
  /**
   * 刪除物件
   * @param id
   */
  @Override
  public void deleteUserById(Long id) {
    Query query=new Query(Criteria.where("id").is(id));
    mongoTemplate.remove(query,UserInfo.class);
  }
}

簡單測試方法,具體程式碼如下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserDaoTest {
  @Autowired
  private UserDao userDao;
  @Test
  public void testSaveUser() throws Exception {
    UserInfo user=new UserInfo();
    user.setId(2);
    user.setUserName("路人甲");
    user.setPassWord("123456");
    userDao.saveUser(user);
  }
  @Test
  public void findUserByUserName(){
    UserInfo user= userDao.findUserByUserName("路人甲");
    System.out.println("user is "+user);
  }
  @Test
  public void updateUser(){
    UserInfo user=new UserInfo();
    user.setId(3);
    user.setUserName("路人乙");
    user.setPassWord("123456");
    userDao.updateUser(user);
  }
  @Test
  public void deleteUserById(){
    userDao.deleteUserById(3);
  }
}

登入MongoDB驗證資料

使用mongoVUE工具來連線後直接圖形化檢視或登入伺服器用命令來檢視登入mongodb服務端,執行命令bin/mongo -host localhost -port 27017,切換至test庫執行use test命令,查詢userInfo集合資料,執行db.userInfo.find()查詢資料。

總結

以上所述是小編給大家介紹的Spring Boot中使用MongoDB資料庫的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!