Hướng dẫn spring data mongodb - dữ liệu mùa xuân mongodb

Note: Bài viết mang tích chất lưu lại kiến thức để sử dụng sau, do mày mò khắp google nhặt mỗi nơi một tí mới giải quyết được, nếu bạn nào gặp vấn đề tương tự thì có thể tham khảo.

Số là mình bắt đầu thực hiện một dự án mới trên Spring Boot và cần làm việc với NoSQL, cụ thể là Mông Gô Đê Bê (MongoDB), Trước thì mình có đọc và tham khảo qua về SQL và NoSQL rồi, tuy nhiên mình chỉ làm việc với MySQL, SQL, Postgre, Oracle - rặt một đám SQL. Đơn giản thì mình nghĩ chắc connect Mongo cũng thế thôi, vì JPA và Hibernate viết ra để dùng ALL In ONE mà. Cơ mà đâm đầu vào thì nó cũng mệt mỏi vãi đạn.

Những thứ cần chuẩn bị:

1 project Spring Boot maven hay gradle thì tùy, Mình xài gradle

Server Mongo ( Local cũng được)

Mongo Compass( Có cũng dc mà không cũng được)

IDE - tất nhiên ( M xài Intelij, bản 2020 trở lên tool mới hỗ trợ kết nối Mongo nhé)

Trước tiên các bạn cần nhớ bảng trong Mongo không gọi là Table mà

Table = Collection

Row = Documnent ( Cặp key value)

Còn vài thứ nữa các bạn tham khảo bài của bạn này nhé: Hướng dẫn Mongo cơ bản

Ấy thế mà trong entity @Table lại thay bằng @Document chứ không có cái @Collection ) Méo hiểu.

Hướng dẫn spring data mongodb - dữ liệu mùa xuân mongodb
) Méo hiểu.

CỤ thể thì các bước cần làm như sau

1 - Thêm dependencies:

Các bạn cần:

org.springframework.data:spring-data-mongodb
org.mongodb:mongo-java-driver:3.12.11

2 - Config trong file yml

Chắc hẳn các bạn đã quyen với kiểu connect này:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloudsigning
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password:
    jpa:
      hibernate:
        ddl-auto: create
        naming:
          implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
          physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategyserver

Nhưng cụ Mongo thì đi một đường riêng:

spring:
  data:
    mongodb:
      authentication-database: admin
      database: test
      host: localhost
      port: 27017 

Ồ, Good Jobs. Có vẻ ngắn gọn ra phết nhờ

Run cái coi. Lỗi sấp mặt lợn, và sau 10p mò mò à nó k dùng @ Table mà xài @ Document + Repository thì extends MongoRepository thay vì JpaRepository

3 - Entity - Chỉ cần @Id thôi nhé, không cần chỉ định column cũng dc. right

@Entity
@Document(value = "user")
public class UserAccount {
    @Id
    private Integer id;

    private String userName;

4- Repository

@Repository
public interface UserAccountRepository extends MongoRepository {

 }

5 - Config Mongo

===> có vẻ ổn nhờ, Run cái nữa nào --- lại lỗi-- Google tiếp. À lại config tiếp:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class , MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})

== chạy thử, hơi giunnnnnn. Lại hẹo. Lần này lỗi có vẻ tường minh tí

Lỗi đây: A component required a bean named 'mongoTemplate' that could not be found.

Có vẻ thiếu Context không kiếm dc cái bean kia. Lại mò GG tiếp Đây rồi, mò mãi mới kiếm được trên GitHub, chắc của mấy anh Ấn thần thánh

@Configuration
public class MongoConfig extends AbstractMongoClientConfiguration {

    @Override
    protected String getDatabaseName() {
        return env.getProperty("spring.data.mongodb.database");
    }

}

Run lại cái nào Úi xời mừng rơi nước mắt, chạy rồi )))))))))))

Hướng dẫn spring data mongodb - dữ liệu mùa xuân mongodb
)))))))))))

Đấy, cụ thể là các bạn chú ý mấy cái nghớ nghẩn đó.

Và đặc biệt trong file pom/build không được thiếu thằng này nhé " org.mongodb:mongo-java-driver" , không có nó là cái AbstractMongoClientConfiguration không có đủ client để run và hẹo luôn nha. Còn lại CRUD thì khả năng không khác các loại khác đâu, Query thì nhớ xài PLSQL nhá

Có thể các bạn thấy mình viết đơn giản có ba lần "**Run thử phát xem **" là chạy mượt mà bày vẽ viết cái bài hướng dẫn. Thực tế thì mình mất xừ buổi tối để connect mà chả giải quyết được việc gì khác, " **Run thử **" cũng đâu đấy 10-20 lần nha ))

Hướng dẫn spring data mongodb - dữ liệu mùa xuân mongodb
))

Thank!!!

P/S bạn nào có cách ngắn hơn thì chỉ mình cái nhé

Hướng dẫn spring data mongodb - dữ liệu mùa xuân mongodb

Đã đăng vào thg 10 31, 2016 6:21 SA 2 phút đọc 2 phút đọc

Trong bài viết này tôi sẽ hướng dẫn các bạn cách sử dụng Spring framework để kết nối tới MongoDB, một database rất phổ biến hiện này. Sau đây là các bước:

  1. Đầu tiên bạn có thể download và cài đặt mongodb theo link sau: https://docs.mongodb.com/getting-started/shell/installation/ Chú ý sử dụng phiên bản mongodb từ 3.0 trở đi.

  2. Tiếp nữa tạo một Maven project trong eclipse. Những ai chưa biết có thể tham khảo tại http://www.tech-recipes.com/rx/39279/create-a-new-maven-project-in-eclipse/

  3. Trở lại vấn đề chính làm sao để sử dụng Spring framework để kết nối đến mongodb.

  • Bạn mở file porm.mxl mà thêm đoạn cấu hình sau:

     
      
          org.mongodb
          mongo-java-driver
          3.2.1
      
    
      
      
          org.springframework.data
          spring-data-mongodb
          1.8.2.RELEASE
      
    

    Đây là 2 thư viện cơ bản nhất bạn phải có. Sau đó tạo file cấu hình bean với tên application.xml. Tên này tùy bạn đặt, nội dung dạng như sau:

            
    
      
    
          
          
          
              
                  
              
          
          
    
          
                  
                  
          
    
          
          
          
              
                  
              
          
          
    
          
                  
                  
                  
                  
          
    
          
          
                  
                  
          
    
          
          
              
              
          
    
          
          
              
          
    
       
    

    Thay thế các giá trị DATABASE_HOST, DATABASE_PORT, Username, Password, Source cho đúng với tham số kết nối tới database. Chú ý phần mechanism, bạn phải thiết lập đúng với kiểu mã hóa authen mà bạn setup khi cài đặt database. Ở đây tôi để mặc định giá trị "MONGODB-CR", ngoài ra còn có SCRAM_SHA_1, PLAIN ...

    Giờ bạn có thể sử dụng bean để thao tác với database:

      class Test {
          @Inject pivate MongoTemplate bean;
    
          public void displayData(){
                  DBCollection collection = bean.getCollection(collection_name);
                  DBObject result = collection.find(new BasicDBObject(key, value)).next();
                  System.out.println(result.toString());
          }
      }
    

All rights reserved