Hướng dẫn auto-generated id mongodb spring - id mongodb mùa xuân được tạo tự động

  • Tổng quát
  • Dependency
  • Collections
  • Tạo mới 1 record
  • Kết luận

Tổng quát

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách implement một sequential, auto-generated field cho MongoDB trong Spring Boot.MongoDB trong Spring Boot.

Khi chúng ta đang sử dụng MongoDB làm cơ sở dữ liệu cho ứng dụng Spring Boot, chúng ta không thể sử dụng annotation @GeneratedValue trong các model của mình vì nó không khả dụng. Do đó, chúng ta cần một phương pháp để tạo generate value giống như chúng ta đang sử dụng JPA và cơ sở dữ liệu SQL.MongoDB làm cơ sở dữ liệu cho ứng dụng Spring Boot, chúng ta không thể sử dụng annotation @GeneratedValue trong các model của mình vì nó không khả dụng. Do đó, chúng ta cần một phương pháp để tạo generate value giống như chúng ta đang sử dụng JPA và cơ sở dữ liệu SQL.

Tổng hợp 200+ tài liệu, sách, bài thực hành, video hướng dẫn lập trình… từ cơ bản đến nâng cao

Giải pháp cho vấn đề này rất đơn giản, tôi sẽ tạo ra 1 collection (table) sẽ lưu trữ trình tự đã tạo ra các collection khác. Trong quá trình tạo 1 bản ghi mới, chúng tôi sẽ sử dụng nó để tạo giá trị tiếp theo.

Dependency

pom.xml:

<dependencies> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-webartifactId> <versionId>2.2.2.RELEASEversionId> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-data-mongodbartifactId> <versionId>2.2.2.RELEASEversionId> dependency> dependencies>

Code language: HTML, XML (xml)

Collections

Collections

Tạo mới 1 record

Kết luậnHAM GIA KHÓA HỌC LẬP TRÌNH

@Document(collection = "database_sequences") public class DatabaseSequence { @Id private String id; private long seq; //getters and setters omitted }

Code language: PHP (php)

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách implement một sequential, auto-generated field cho MongoDB trong Spring Boot.

@Document(collection = "users") public class User { @Transient public static final String SEQUENCE_NAME = "users_sequence"; @Id private long id; private String email; //getters and setters omitted }

Code language: PHP (php)

Khi chúng ta đang sử dụng MongoDB làm cơ sở dữ liệu cho ứng dụng Spring Boot, chúng ta không thể sử dụng annotation @GeneratedValue trong các model của mình vì nó không khả dụng. Do đó, chúng ta cần một phương pháp để tạo generate value giống như chúng ta đang sử dụng JPA và cơ sở dữ liệu SQL.

Tổng hợp 200+ tài liệu, sách, bài thực hành, video hướng dẫn lập trình… từ cơ bản đến nâng cao

Tạo mới 1 record

Kết luận

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách implement một sequential, auto-generated field cho MongoDB trong Spring Boot.

Khi chúng ta đang sử dụng MongoDB làm cơ sở dữ liệu cho ứng dụng Spring Boot, chúng ta không thể sử dụng annotation @GeneratedValue trong các model của mình vì nó không khả dụng. Do đó, chúng ta cần một phương pháp để tạo generate value giống như chúng ta đang sử dụng JPA và cơ sở dữ liệu SQL.

public long generateSequence(String seqName) { DatabaseSequence counter = mongoOperations.findAndModify(query(where("_id").is(seqName)), new Update().inc("seq",1), options().returnNew(true).upsert(true), DatabaseSequence.class); return !Objects.isNull(counter) ? counter.getSeq() : 1; }

Code language: JavaScript (javascript)

Tổng hợp 200+ tài liệu, sách, bài thực hành, video hướng dẫn lập trình… từ cơ bản đến nâng cao

User user = new User(); user.setId(sequenceGenerator.generateSequence(User.SEQUENCE_NAME)); user.setEmail("[email protected]"); userRepository.save(user);

Code language: JavaScript (javascript)

Giải pháp cho vấn đề này rất đơn giản, tôi sẽ tạo ra 1 collection (table) sẽ lưu trữ trình tự đã tạo ra các collection khác. Trong quá trình tạo 1 bản ghi mới, chúng tôi sẽ sử dụng nó để tạo giá trị tiếp theo.

List storedUsers = userRepository.findAll(); storedUsers.forEach(System.out::println);

Code language: PHP (php)

Phiên bản mới nhất cho các phần dependency được quản lý bởi spring-boot-starter-parent.

Như đã thảo luận trong phần tổng quan, tôi sẽ tạo ra một collection sẽ lưu trữ trình tự tăng dần tự động cho các collection khác. Tôi sẽ gọi collection này là database_sequences. Nó có thể được tạo bằng cách sử dụng mongo shell hoặc MongoDB Compass. Hãy tạo một class model tương ứng:

@Override public void onBeforeConvert(BeforeConvertEvent<User> event) { if (event.getSource().getId() < 1) { event.getSource().setId(sequenceGenerator.generateSequence(User.SEQUENCE_NAME)); } }

Code language: HTML, XML (xml)

THAM GIA KHÓA HỌC LẬP TRÌNH

Kết luận

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách implement một sequential, auto-generated field cho MongoDB trong Spring Boot.

Khi chúng ta đang sử dụng MongoDB làm cơ sở dữ liệu cho ứng dụng Spring Boot, chúng ta không thể sử dụng annotation @GeneratedValue trong các model của mình vì nó không khả dụng. Do đó, chúng ta cần một phương pháp để tạo generate value giống như chúng ta đang sử dụng JPA và cơ sở dữ liệu SQL.

Tổng hợp 200+ tài liệu, sách, bài thực hành, video hướng dẫn lập trình… từ cơ bản đến nâng cao

Giải pháp cho vấn đề này rất đơn giản, tôi sẽ tạo ra 1 collection (table) sẽ lưu trữ trình tự đã tạo ra các collection khác. Trong quá trình tạo 1 bản ghi mới, chúng tôi sẽ sử dụng nó để tạo giá trị tiếp theo.