Tuy nhiên, hiện nay, phần mềm thường được thiết kế theo hướng đối tượng◂Đối với lập trình viên khi xây dựng phần mềm thường muốn làm việc với các đối tượng và không phải nhớ đến các
Trang 1LẬP TRÌNH JAVA
Giảng viên: Tạ Việt PhươngE-mail: phuongtv@uit.edu.vn Ch 5 (tt) Hibernate
Trang 2Nội dung
➢Giới thiệu Hibernate➢Cài đặt Hibernate
Trang 3◂Là hình thức kết nối trực tiếp CSDL (Connected Model)
◂Connect: tạo kết nối chương trình với Hệ quản trị
◂Nếu ứng dụng kết nối với nhiều hệ quản trị CSDL khác nhau, câu truy vấn có thể khác nhau trong mỗi hệ quản trị CSDL
Trang 4ORM (Object Relational Mapping)
◂CSDL thường được thiết kế theo mô hình quan hệ Tuy nhiên, hiện nay, phần mềm thường được thiết kế theo hướng đối tượng
◂Đối với lập trình viên khi xây dựng phần mềm
thường muốn làm việc với các đối tượng và không phải nhớ đến các dòng, các cột trong các bảng của cơ sở dữ liệu ORM cho phép lấy dữ liệu từ CSDL quan hệ vào trong đối tượng
Trang 5ORM (tt)
◂ORM (Object Relational Mapping) là một kỹ thuật lập trình cho phép ánh xạ cơ sở dữ liệu đến các đối
tượng thuộc ngôn ngữ lập trình hướng đối tượng chẳng hạn như C#, Java,… (các table tương ứng các class, mối ràng buộc giữa các table tương ứng quan hệ giữa các class ‘has a’ , ‘is a’).
5
Trang 6ORM (tt)
Trang 7ORM (tt)
◂ORM có đặc trưng cơ bản là gói gọn CSDL trong một object Trong object, một phần là data, phần còn lại đảm nhận công việc xử lý data để chuyển nó thành CSDL quan hệ.
7
Trang 8ORM (tt)
◂Ưu điểm:
◂Tính độc lập: có thể dùng với nhiều RDBMS khác nhau thông qua cấu hình.
◂Tính đơn giản, dễ sử dụng: ORM cung cấp các API đơn giản và rất dễ sử dụng trong việc truy vấn, thêm, xóa, sửa dữ liệu
◂Tiết kiệm thời gian lập trình, dễ bảo trì, sửa chữa ◂Cơ chế ORM giúp người lập trình tập trung hơn
vào việc lập trình hướng đối tượng (OOP) ◂Hạn chế những lỗi ngữ pháp trong SQL.
Trang 9ORM (tt)
◂Nhược điểm:
◂Tự động sinh ra các câu lệnh SQL nên sẽ khó có thể tác động vào để tối ưu câu lệnh.
◂Việc quản lý session khá phức tạp
◂Khi sử dụng ORM Framework, lập trình viên dễ bị rơi vào bẫy truy xuất dữ liệu quá nhiều (vì quá dễ để truy xuất), ảnh hưởng đến hiệu năng của hệ thống
◂Đối với những ai mới tìm hiểu về kỹ thuật ORM là gì sẽ gặp phải nhiều khó khăn trong quá trình sử dụng.
9
Trang 10ORM với Hibernate
◂Được phát triển bởi Gavin King năm 2001
◂JBoss chính thức phát triển Hibernate từ năm 2003 ◂Là 1 ORM Framework: thực hiện mapping cơ sở dữ
liệu quan hệ sang các object trong ngôn ngữ hướng đối tượng.
Trang 11ORM với Hibernate (tt)
◂Một ứng dụng có thể chia làm 3 phần: presentation layer, business layer, data layer
◂Business layer có thể chia thành 2 layer con:
◂Business logic layer (các tính toán nhằm thỏa mãn yêu cầu người dùng)
◂Persistence layer chịu trách nhiệm giao tiếp với data layer (mở kết nối, truy xuất và lưu trữ dữ liệu vào CSDL)
◂Hibernate framework là một framework cho persistence layer
Trang 12Kiến trúc Hibernate
◂Kiến trúc Hibernate bao gồm nhiều đối tượng như đối tượng persistent, session factory, transaction factory, connection factory, session, transaction, ◂Có 4 tầng trong kiến trúc hibernate đó là tầng ứng
dụng java, tầng hibernate framework, tầng backhand api và tầng database.
Trang 13Kiến trúc Hibernate
13
Trang 14Kiến trúc Hibernate
◂Các thành phần trong kiến trúc Hibernate:
◂Đối tượng Configuration: bao gồm Database Connection (hibernate.properties và
hibernate.cfg.xml) và Class Mapping Setup - Thành phần này tạo ra kết nối giữa các lớp Java và các bảng cơ sở dữ liệu.
◂Đối tượng SessionFactory
◂Đối tượng Session
◂Đối tượng Transaction
◂Đối tượng Query
◂Đối tượng Criteria
Trang 15Môi trường Hibernate
◂Tải về phiên bản mới nhất của Hibernate từ https://hibernate.org/orm/releases/
◂Copy tất cả các tập tin thư viện từ /lib vào
CLASSPATH, và thay đổi biến classpath để bao gồm tất cả các JARs.
◂Copy tập tin hibernate[x].jar vào CLASSPATH Tập tin này nằm trong thư mục gốc của tiến trình cài đặt và là tệp JAR chính mà Hibernate cần để thực hiện công việc của nó.
15
Trang 16ORM với Hibernate (tt)
◂Mỗi table trong database là một object trong
Hibernate Cần có một java bean cho mỗi table trong database Các java bean này sẽ có các
getters/setters và một số ngoại lệ theo quy ước của Hibernate.
◂Mỗi file mapping (ánh xạ) có dạng ***.hbm.xml có nhiệm vụ đặc tả mỗi quan hệ giữa các thuộc tính của đối tượng và các trường trong bảng CSDL (cột nào ứng với thuộc tính nào của class, kiểu giá trị là gì, quan hệ giữa các bảng chuyển thành quan hệ giữa các lớp ra sao…).
Trang 17ORM với Hibernate (tt)
◂File Hibernate.cfg.xml : Đây là tập tin được load đầu tiên khi khởi chạy ứng dụng Hibernate Nó chứa các thông tin về kết nối (database kết nối là gì (MySQL, Oracle, SQL server…), username và password kết nối với database là gì, tên database được kết nối), driver kết nối…
17
Trang 18◂Ánh xạ giữa các lớp Java đến các bảng trong CSDL dung các file XML
◂Cung cấp các API đơn giản để lưu trữ, truy xuất trực tiếp các đối tượng Java và CSDL.
◂Nếu có bất kỳ thay đổi nào trong CSDL thì chỉ cần thay đổi file XML.
◂Cung cấp đầy đủ các tiện ích, tính năng truy vấn dữ liệu đơn giản, hiệu quả.
◂Thao tác, xử lý được các quan hệ phức tạp của các đối tượng trong CSDL.
◂Giảm thiểu sự truy cập đến CSDL đến mức thấp nhất
Trang 19◂HQL, Criteria Query, Native SQL
◂Hibernate Cache, Filter, Interceptor, Event ◂Hibernate Monitor
◂Hibernate Toolset
19
Trang 20Kiến trúc Hibernate
Trang 21Các bước sử dụng Hibernate
◂Bước 1: Tạo cơ sở dữ liệu
◂Bước 2: Tạo file cấu hình hibernate.cfg.xml ◂Bước 3: Tạo các POJO (Lớp persistent)
◂Bước 4: Tạo các file mapping <POJO>.hbm.xml ◂Bước 5: Khai báo các file mapping vào
◂Bước 6: Xây dựng lớp HibernateUtil ◂Bước 7: Sử dụng
21
Trang 22Tạo cơ sở dữ liệu
Trang 23Cấu hình hibernate.cfg.xml
◂Được dùng đề khai báo cấu hình các thông tin liên quan đến CSDL: url, driver_class, username,
password, pool_size, autocommit.
◂Khai báo nơi mà chứa file ánh xạ giữa các lớp thực thể tới các bảng trong CSDL
23
Trang 24Cấu hình hibernate.cfg.xml (tt)
➢Các thuộc tính cấu hình cơ bản:
o hibernate.dialect: Cho phép hibernate tối ưu hóa SQL cho
thích hợp với CSDL quan hệ đặc biệt.
o hibernate.connection.driver_class: lớp driver class.
o hibernate.connection.url: url để kết nối tới CSDL thông qua
Trang 25Cấu hình hibernate.cfg.xml (tt)
➢ Loại hibernate.dialect: của một số CSDL phổ biến:
DB2: org.hibernate.dialect.DB2Dialect
Microsoft SQL Server 2005: org.hibernate.dialect.SQLServer2005Dialect Microsoft SQL Server 2008: org.hibernate.dialect.SQLServer2008Dialect
Trang 26<property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">sang</property>
<! List of XML mapping files ><mapping resource="SinhVien.hbm.xml"/></session-factory>
</hibernate-configuration>
Trang 27Tạo POJO (Lớp persistent)
◂Các lớp Java có các đối tượng hoặc các thể hiện sẽ được lưu trữ trong các bảng cơ sở dữ liệu được gọi là các lớp persistent trong Hibernate.
◂Hibernate hoạt động tốt nhất nếu các lớp này tuân theo một số quy tắc đơn giản, còn được gọi là mô hình lập trình Plain Old Java Object (POJO).
27
Trang 28Tạo POJO (Lớp persistent)
◂Phải có 1 phương thức khởi tạo mặc định (phương
thức khởi tạo không có tham số)
◂Tất cả các thuộc tính trong lớp cần đặt private hoặc protected, hoặc default (Hibernate không xử lý các
thuộc tính để public)
◂Tất cả các thuộc tính phải có phương thức setter và getter.
◂Class không nên để final
◂Các phương thức không nên để public final, chỉ nên để public
◂Các lớp này không được kế thừa (extend) các lớp đặcbiệt khác mà chỉ có thể kế thừa các lớp persistent
Trang 29Tạo POJO (Lớp persistent)
29
Trang 30VD: Tạo POJO SinhVien
public class SinhVien {
privateString maSV;
privateString hoTen;
privateString gioiTinh;
privateString noiSinh;
public SinhVien(){ }
public SinhVien(String maSV){this.maSV = maSV; }
public SinhVien(String maSV,String hoTen, String gioiTinh,
Trang 31◂ File mapping được sử dụng để ánh xạ một hoặc nhiều lớp trong java với các bảng trong database ◂Có hai cách để tạo ra các file mapping XML này:
◂Tạo file mapping XML bằng tay
◂Tạo file mapping XML bằng tool, bao gồm XDoclet, Middlegen và AndroMDA
31
Trang 32Tạo file mapping ###.hbm.xml
Các thành phần quan trọng trong file mapping:
<hibernate-mapping>: phần tử gốc của tài liệu ánh xạ(mapping)
hibernate, nó chứa các phần tử khác và kết thúc với </hibernate-
<class> Ánh xạ các lớp đối tượng với bảng trong CSDL.
oname : tên của lớp đối tượng dữ liệu
otable : tên bảng trong CSDL tương ứng với lớp của thuộc tính name
<id> dùng để định danh id duy nhất của lớp đối tượng Thường
ánh xạ với khóa chính trong bảng CSDL Có các thuộc tính sau :
oname : tên thuộc tính được sử dụng trong lớp persistent
ocolumn : cột trong bảng CSDL để lưu khóa chính.
Trang 33Tạo file mapping ###.hbm.xml (tt)
<generator> tạo ra giá trị ID khi thêm bản ghi mới vào CSDL
bằng Hibernate Một số phương thức tạo giá trị ID:
oincrement : sử dụng để tạo ID, chỉ dùng cho kiểu long, int, short
osequence : Hibernate sử dụng chuỗi để tạo khóa tự động Thường được sử dụng với HQTCSDL : DB2, PostgreSQL, Oracle, SAP DB databases.
oassigned : đăng ký 1 phương thức khởi tạo ID , phương thức nàyđược tạo ra bởi người phát triển ứng dụng.
oidentity: ID tự động tạo ra bởi CSDL.
<property> sử dụng các thuộc tính giống như thẻ ID nhưng
không có thẻ con <generator> Được dùng để ánh xạ các cột bình thường (không phải khóa chính).
Trang 34Tạo file mapping ###.hbm.xml (tt)
<class name="hibernateexample.SinhVien" table="sinhvien"><id name="maSV" type="string">
<column length="5" name="MaSV"/><generator class="assigned" /></id>
<property name="hoTen" type="string"><column length="25" name="HoTen" /></property>
<property name="gioiTinh" type="string"><column length="4" name="GioiTinh" /></property>
<property name="noiSinh" type="string"><column length="20" name="NoiSinh" /></property>
</hibernate-mapping>
Trang 35Tạo file mapping ###.hbm.xml (tt)
◂Nên lưu file mapping với định dạng <classname>.hbm.xml
◂Trong ví dụ trên file mapping được lưu với tên SinhVien.hbm.xml.
35
Trang 36Kiểu dữ liệu trong hibernate
integerint hoặc IntegerINTEGERlonglong hoặc LongBIGINTshortshort hoặc ShortSMALLINTfloatfloat hoặc FloatFLOATdoubledouble hoặc DoubleDOUBLEbig_decimaljava.math.BigDecimalNUMERICcharacterStringCHAR(1)stringStringVARCHARbytebyte hoặc ByteTINYINTbooleanboolean hoặc BooleanBIT
Các kiểu dữ liệu cơ bản
Trang 37Kiểu dữ liệu trong hibernate (tt)
Các kiểu dữ liệu thời gian
Kiểu HibernateKiểu JavaKiểu SQL
datejava.util.Date hoặc java.sql.DateDATEtimejava.util.Date hoặc java.sql.TimeTIME
Trang 38Khai báo mapping vào ###.cfg.xml
Trang 39Sử dụng – Tạo kết nối
public class HibernateSessionFactory {
private static SessionFactory sesstionFac;
Trang 40Lấy danh sách sinh viên
public static List<SinhVien> getDSSinhVien(){List<SinhVien> dsSV = null;
Session session =
HibernateSessionFactory.getSessionFactory().openSession();try{
String sql = "select sv from SinhVien sv"; Query query = session.createQuery(sql);
Trang 41Lấy thông tin sinh viên
Trang 42Thêm sinh viên
Trang 43Xóa sinh viên
Trang 44Sửa sinh viên
public static boolean capNhatSV(SinhVien sv){ Session
Trang 45Q & A
Giảng viên: Tạ Việt PhươngE-mail: phuongtv@uit.edu.vn