Cài đặt ORM(Object Relational Mapping) trên Java

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:

ORM-hinh1

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…

ORM-hinh2

Hình 2. Cách thêm Driver vào thư viện

ORM-hinh3

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:

ORM-hinh4

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.

ORM-hinh5

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.

ORM-hinh6

Hình 6. Code phương thức getAccounts() để lấy danh sách Account từ database

ORM-hinh7

Hình 7. Code phương thức deleteAccounts() để xóa một Account từ database

ORM-hinh8

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ướcCài đặt mô hình MVC(Model – View – Controller) trong Java

Đối tác tuyển dụng