Bất kỳ ai muốn học về JPA thì cũng cần phải biết khái niệm Object Relational Mapping các bạn ạ. Vậy thực tế nó là cái gì?
Giả sử mình đang làm việc trong một ứng dụng và ứng dụng của mình có sử dụng một bảng tên là users trong database. Cấu trúc của bảng này như sau:
1 2 3 4 5 6 7 8 |
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(45) NOT NULL, `date_of_birth` date DEFAULT NULL, `email` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; create database coffee; |
Hồi xưa khi học về JDBC, để lấy được tất cả dữ liệu trong bảng users này, chúng ta phải viết code để kết nối đến database và dùng câu lệnh SELECT
1 |
SELECT * FROM users; |
rồi phải duyệt qua từng dòng của kết quả mới lấy được dữ liệu mà mình muốn.
Thêm nữa đối với mỗi loại database khác nhau, ví dụ như MySQL, Oracle,… có những câu truy vấn cùng một mục đích nhưng cú pháp lại hoàn toàn khác nhau tùy theo loại database.
Nhưng bây giờ chúng ta không cần phải cực khổ như thế nữa!
Object Relational Mapping là một kỹ thuật lập trình cho phép cho chúng ta thao tác với database thông qua các đối tượng của Java. Chúng ta sẽ ánh xạ các bảng, các cột của bảng trong database của chúng ta bằng các đối tượng và các thuộc tính của nó. Mối quan hệ giữa các bảng, các cột cũng được thể hiện rõ trong các đối tượng mà nó được ánh xạ.
Như ví dụ mình đã đưa ở trên, chúng ta có thể ánh xạ bảng users bằng một đối tượng với tên là Users. Cụ thể như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
@Entity @Table(name = "users") public class Users { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @Column(name = "name") private String name; @Column(name = "date_of_birth") private Date dateOfBirth; @Column(name = "email") private String email; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getDateOfBirth() { return dateOfBirth; } public void setDateOfBirth(Date dateOfBirth) { this.dateOfBirth = dateOfBirth; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } } |
Như bạn thấy, cột id trong bảng users sẽ được ánh xạ với thuộc tính id trong đối tượng Users, tương tự cho các cột khác.
Và bây giờ bạn có thể dùng đối tượng Users ở trên để thao tác với cơ sở dữ liệu mà không cần quan tâm loại cơ sở dữ liệu bạn đang dùng. Cái đó có người khác lo, các JDBC Driver 😀