Hướng dẫn SQL của chúng tôi sẽ hướng dẫn bạn cách sử dụng SQL trong. MySQL, SQL Server, MS Access, Oracle, Sybase, Informix, Postgres và các hệ thống cơ sở dữ liệu khác
Bắt đầu học SQL ngay bây giờ »Ví dụ trong mỗi chương
Với trình soạn thảo SQL trực tuyến của chúng tôi, bạn có thể chỉnh sửa câu lệnh SQL và nhấp vào nút để xem kết quả
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách triển khai trường tuần tự, được tạo tự động 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 chú thích @GeneratedValue trong mô hình 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 ra giá trị giống như chúng ta đang sử dụng JPA và cơ sở dữ liệu SQL
Tổng hợp hơn 200 tài liệu, sách, bài thực thi, 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 bộ sưu tập [bảng] sẽ lưu trữ trình tự đã tạo ra các bộ sưu tập 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
phụ thuộc
quả bông. xml
Code language: HTML, XML [xml]
org.springframework.boot spring-boot-starter-web 2.2.2.RELEASE org.springframework.boot spring-boot-starter-data-mongodb 2.2.2.RELEASE
Phiên bản mới nhất cho các phần phụ thuộc được quản lý bởi
bộ sưu tập
Như đã thảo luận trong phần tổng quan, tôi sẽ tạo ra một bộ sưu tập sẽ lưu trữ trình tự tăng dần cho các bộ sưu tập khác. Tôi sẽ gọi bộ sưu tập 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 mô hình lớp tương ứng
THAM GIA KHÓA HỌC LẬP TRÌNH
Code language: PHP [php]
@Document[collection = "database_sequences"] public class DatabaseSequence { @Id private String id; private long seq; //getters and setters omitted }
Sau đó, hãy tạo một tập hợp Người dùng và một mô hình đối tượng tương ứng, sẽ lưu trữ thông tin chi tiết về những người đang sử dụng hệ thống của tôi
@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]
Trong mô hình Người dùng đã tạo ở trên, chúng tôi đã thêm một trường tĩnh SEQUENCE_NAME, là một tham chiếu duy nhất đến chuỗi tự động tăng dần cho người dùng tập hợp
Tôi cũng chú thích nó với @Transient để ngăn nó tồn tại cùng với các thuộc tính khác của mô hình
Tạo mới 1 bản ghi
Cho đến nay, tôi đã tạo ra các bộ sưu tập và mô hình cần thiết. Bây giờ, tôi sẽ tạo ra một dịch vụ sẽ tạo ra giá trị tự động tăng dần để có thể sử dụng id cho các thực thể của tôi
KHOÁ HỌC LẬP TRÌNH DÀNH CHO NGƯỜI MỚI
Please create a SequenceGeneratorService with createSequence[]
Code language: JavaScript [javascript]
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; }
Bây giờ, chúng ta có thể sử dụng createSequence[] trong khi tạo một bản ghi mới
Code language: JavaScript [javascript]
User user = new User[]; user.setId[sequenceGenerator.generateSequence[User.SEQUENCE_NAME]]; user.setEmail["[email protected]"]; userRepository.save[user];
To list all user, we will use UserRepository
Code language: PHP [php]
List storedUsers = userRepository.findAll[]; storedUsers.forEach[System.out::println];
Như hiện tại, chúng ta phải đặt id trường mỗi khi chúng ta tạo phiên bản mới cho model của mình. Chúng ta có thể phá vỡ quá trình này bằng cách tạo trình lắng nghe cho các sự kiện vòng đời Spring Data MongoDB
Để làm điều đó, chúng tôi sẽ tạo một UserModelListener extends AbstractMongoEventListener và sau đó chúng tôi sẽ ghi đè onBeforeConvert[]:
Code language: HTML, XML [xml]
@Override public void onBeforeConvert[BeforeConvertEvent event] { if [event.getSource[].getId[] < 1] { event.getSource[].setId[sequenceGenerator.generateSequence[User.SEQUENCE_NAME]]; } }
Bây giờ, mỗi khi tôi lưu Người dùng mới, id sẽ được đặt tự động
Kết luận
Chúng ta đã thấy cách tạo tự động tăng dần cho trường id và mô phỏng các hành động tương tự như đã thấy trong cơ sở dữ liệu SQL