1. ORM là gì?
Trong lập trình hướng đối tượng chúng ta tương tác với các thành phần dữ liệu (Model) là các đối tượng trong khi hầu hết các cơ sở dữ liệu đang sử dụng phổ biến hiện nay lại đang là CSDL quan hệ. Mà CSDL quan hệ lưu dữ liệu theo dòng (bản ghi – Record) trong các bảng dữ liệu(table). Do vậy cần một kỹ thuật chuyển đổi giữa hai mô hình này để quá trình lập trình được thuận lợi hơn.
ORM là kỹ thuật chuyển đổi dữ liệu giữa các hệ thống khác (không phải là mô hình hướng đối tượng) sang các đối tượng trong ngôn ngữ lập trình hướng đối tượng. Trong trường hợp này chúng ta chuyển dữ liệu từ các dòng dữ liệu trong CSDL quan hệ sang đối tượng.
Để cài đặt kỹ thuật này đơn giản là chúng ta cài đặt một lớp thực hiện việc kết nối CSDL và các chức năng tương tác với CSDL như Select, Insert, Delete, Update và các tương tác trên các đối tượng dữ liệu có quan hệ với nhau.
Trong bài này để các bạn hiểu cơ bản về ORM tôi sẽ hướng dẫn bạn sử dụng JDBC để cài đặt ORM từ đầu. Nếu các bạn muốn hiểu đầy đủ về ORM bạn có thể dùng mô hình đã cài đặt sẵn ORM như JPA, Hibernate.
2. Thiết kế ORM
Xem xét ví dụ về hệ thống ATM ở bài trước, chúng ta đã giả lập lớp AccountDB. Bây giờ chúng ta sẽ cài đặt lớp này. Bổ sung lớp DBConnection để kết nối với CSDL và lớp AccountDB để cài đặt ORM cho lớp Account. Kết quả bảng vẽ Class Diagram như sau:
Hình 1. Class Diagram của ATM sau khi thêm các lớp ORM
Trong đó:
- DBConnection: thực hiện việc kết nối.
- AccountDB: là lớp cài đặt các kỹ thuật ORM cơ bản cho lớp Account.
- Các lớp còn lại chúng ta đã cài đặt trong bài sử dụng mô hình MVC trong Java.
3. Cài đặt ORM
ORM chỉ ảnh hưởng đến ứng dụng ở tầng Model do vậy tầng View và Controller trong ứng dụng không thay đổi. Trong phần này chúng ta chỉ cài đặt lại tầng Model mà cụ thể là 02 lớp Dbconnection và AccountDB mà thôi.
3 1. Cài đặt lớp kết nối CSDL
Để kết nối CSDL bạn có nhiều cách, trong bài này chúng ta sử dụng JDBC để kết nối CSDL SQL Server. Việc kết nối các CSDL khác cũng được thực hiện tương tự.
Thêm điều khiển kết nối SQL Server vào dự án:
Việc đầu tiên để kết nối vào CSDL từ Java là bạn phải thêm điều khiển kết nối vào hệ quảng trị CSDL tương ứng vào dự án. Các bước thực hiện như sau:
- Download Driver:
Bạn vào web site của Microsoft và download driver để kết nối vào SQL Server theo đường dẫn sau: https://msdn.microsoft.com/en-us/sqlserver/aa937724.aspx sau đó giải nén để lấy các file .jar.
- Thêm các driver vào thư viện của Project:
Kích phải chuột vào mục Libraries trên cử sổ Projects của project bạn đang xây dựng và chọn Add Jar/Folder…
Hình 2. Cách thêm Driver vào thư viện
Hình 3. Thư viện đã được thêm vào project
Viết kết nối vào CSDL:
Bạn cài đặt SQL Server vào máy tính của bạn và tạo ra CSDL ATM và bảng dữ liệu Account với các đoạn Script như sau:
— Tao Database
Create database ATM
Use ATM
— Tao bang du lieu
Create table Account( AccountNo int, CustomerName varchar(50), Passwd char(10), Amount decimal )
— Nhap du lieu quan dau
Insert into Account values(1, 'Nguyen Van A', '12345', 1000) Insert into Account values(2, 'Tran B', 'abc123', 1000) Insert into Account values(3, 'Trinh Thi C', 'abc123', 1000) Select * from Account
Như vậy chúng ta đã tạo xong bảng dữ liệu trên CSDL SQL Server. Bây giờ chúng ta sẽ viết đoạn mã kết nối CSDL này thông qua phương thức getConnection() của lớp DBConnect như sau:
Hình 4. Đoạn Code kết nối CSDL
Các bạn lưu ý là chúng ta phải import lớp java.sql.*
Bạn thay đổi các thông số sau để phù hợp với máy tính của bạn:
- ServerName: Bạn có thể thay chữ localhost bằng địa chỉ IP hoặc tên máy chứa CSDL.
- Port của SQL Server: mỗi instance Server được chỉ định một cổng giao tiếp. Mặc định SQL Server sử dụng cổng 1433 nhưng nếu bạn chỉ định cổng khác thì thay đổi lại thông số này.
- Database Name: Nếu bạn không đặt tên CSDL là ATM thì bạn thay lại thông số này.
- Database User Name: ở đây sử dụng user là sa. Bạn có thể sử dụng user khác.
- Database Password: bạn thay bằng password tương ứng của Database User để nó kết nối vào CSDL.
Sau khi thay xong các thông số trên bạn đã có được đoạn mã kết nối vào CSDL.
3 2. Cài đặt lớp AccountDB để thực hiện chức năng ORM cho lớp Account
- Trước tiên chúng ta cài đặt phương thức getAccount() để lấy dữ liệu từ Database và xây dựng một Account object thay cho phương thức getAccount() đã viết trong bài trước.
Hình 5. Đoạn Code cài đặt lớp getAccount()
Phương thức này sử dụng lớp DBConnection để kết nối vào CSDL và lấy lên dòng dữ liệu tương ứng với AccountNo truyền vào và tạo ra Account Object để trả về cho Controller.
Để Test phương thức này bạn có thể vào file LogginSevlet.java để sửa lại đoạn code gọi phương thức trên như sau:
Account acc = AccountDB.getAccount(1);
Sau đó tiến hành chạy để kiểm tra.
Tiếp theo chúng ta tiếp tục cài đặt các phương thức:
- getAccounts() để lấy danh sách hành loạt.
- deleteAccount() để xoá một account
- updateAccount() để cập nhật một Account
Để hoàn thiện lớp AccountDB.
Hình 6. Code phương thức getAccounts() để lấy danh sách Account từ database
Hình 7. Code phương thức deleteAccounts() để xóa một Account từ database
Hình 8. Code phương thức updateAccounts() để cập nhật thông tin một Account
Để hoàn thiện ORM bạn cần code thêm các phương thức thể hiện quan hệ giữa các bảng v.v.. việc này đã được thể hiện rõ trong các mô hình ORM như JPA, Hibernate..
Trong khuôn khổ một bài viết không thể mô tả hết được các nội dung của ORM, chỉ hy vọng với thông tin cơ bản về ORM và tương tác CSDL để giúp các bạn dễ hiểu hơn nữa về lập trình hướng đối tượng và tương tác CSDL. Trong các bài tới tôi sẽ viết về JPA để các bạn hiểu rõ hơn và sa sánh. Các bạn có thể download mã nguồn của bài này tại đây Download.
Chúc các bạn thành công.
Bài trước: Cài đặt mô hình MVC(Model – View – Controller) trong Java