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ương E-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ị CSDL
◂Statement: thực hiện câu lệnh SQL bằng kết nối đã tạo
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ừ CSDLquan 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 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
hibernate.cfg.xml
◂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 25Oracle (any version): org.hibernate.dialect.OracleDialect
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 đặc biệ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 {
private String maSV;
private String hoTen;
private String gioiTinh;
private String noiSinh;
public SinhVien(){ }
public SinhVien(String maSV){
this.maSV = maSV; }
public SinhVien(String maSV,
String hoTen, String gioiTinh,
public String getGioiTinh(){
return gioiTinh; }
public void setNoiSinh(String noiSinh){
this.noiSinh = noiSinh; }
public String getNoiSinh(){
return noiSinh;
}
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-
mapping>.
<class> Ánh xạ các lớp đối tượng với bảng trong CSDL.
o name : tên của lớp đối tượng dữ liệu
o table : 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 :
o name : tên thuộc tính được sử dụng trong lớp persistent
o column : cột trong bảng CSDL để lưu khóa chính.
Trang 33Tạo file mapping ###.hbm.xml (tt)
33
<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:
o increment : sử dụng để tạo ID, chỉ dùng cho kiểu long, int, short
o sequence : 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.
o assigned : đă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.
o identity: 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ìnhthường (không phải khóa chính)
Trang 34Tạo file mapping ###.hbm.xml (tt)
<hibernate-mapping>
<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>
</class>
</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
integer int hoặc Integer INTEGER
long long hoặc Long BIGINT
short short hoặc Short SMALLINT
float float hoặc Float FLOAT
double double hoặc Double DOUBLE
big_decimal java.math.BigDecimal NUMERIC
character String CHAR(1)
string String VARCHAR
byte byte hoặc Byte TINYINT
boolean boolean hoặc Boolean BIT
Các kiểu dữ liệu cơ bản
Trang 37Kiểu dữ liệu trong hibernate (tt)
37
Các kiểu dữ liệu thời gian
Kiểu Hibernate Kiểu Java Kiểu SQL
date java.util.Date hoặc java.sql.Date DATE
time java.util.Date hoặc java.sql.Time TIME
timestamp java.util.Date
hoặc java.sql.Time stamp
TIMESTAMP
Trang 38Khai báo mapping vào ###.cfg.xml
Trang 39Sử dụng – Tạo kết nối
39
public class HibernateSessionFactory {
private static SessionFactory sesstionFac;
static {
try {
sesstionFac = new Configuration().configure().buildSessionFactory();
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
session = HibernateSessionFactory.getSessionFactory().openSession();
if ( getSinhVien(sv.getMaSV()) == null ){ return
false;
} Transaction trans = null; try {
Trang 45Q & A
Giảng viên: Tạ Việt Phương E-mail: phuongtv@uit.edu.vn