Giáo trình Lập trình Java - Bài 6: Tích hợp Hibernate
Hàm xử lý thời gian
current_date(): lấy ngày, tháng năm
current_time(): lấy giờ, phút và giây
current_timestamp(): lấy ngày giờ
second(.): lấy giây
minute(.): lấy phút
hour(.): lấy giờ trong ngày
day(.): lấy ngày trong tháng
month(.): lấy tháng
year(.): lấy năm
50 trang |
Chia sẻ: huongthu9 | Lượt xem: 479 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Giáo trình Lập trình Java - Bài 6: Tích hợp Hibernate, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
LẬP TRÌNH JAVA 5
BÀI 6: TÍCH HỢP HIBERNATE
MỤC TIÊU
Hiểu Hibernate
Cấu tình tích hợp Hibernate
Ánh xạ thực thể
Lập trình Hibernate
Truy vấn
Thao tác
Hiểu thêm ngôn ngữ HQL
GIỚI THIỆU HIBERNATE
Hibernate là framework hỗ trợ lập trình với CSDL
trong các ứng dụng Java được ưa chuộng nhất
hiện nay.
Hibernate đóng vai trò là tầng trung gian giữa
các đối tượng và CSDL để điều khiển các công
việc quản lý lưu trữ trạng thái của các đối tượng
đó dựa trên cơ sở ánh xạ.
GIỚI THIỆU HIBERNATE
Hibernate ánh xạ các lớp thực thể vào các bảng
của CSDL quan hệ thông qua XML hoặc
annotation.
Hibernate trong suốt với ngôn ngữ SQL, nó sử
dụng HQL để truy vấn đối tượng.
Truy vấn các thực thể kết hợp một cách dễ dàng
thông qua mối quan hệ giữa các thực thể.
Hibernate không những ổn định, tin cậy mà còn
giúp giảm giảm thiểu công việc của người lập
trình CSDL.
HỖ TRỢ CSDL
Hibernate hỗ trợ hầu hết các CSDL phổ thông
nhất hiện nay
HSQL Database Engine
DB2/NT
MySQL
PostgreSQL
FrontBase
Oracle
Microsoft SQL Server Database
Sybase SQL Server
Informix Dynamic Server
CÁC THÀNH PHẦN HIBERNATE
Ứng dụng Java
chỉ làm việc với
các đối tượng
Hibernate có
trách nhiệm
chuyển đối các
đối tương vào
các CSDL và
ngược lại
CÁC THÀNH PHẦN HIBERNATE
Configuration: được sử dụng để quản lý thông
tin cấu hình kết nối đến CSDL và ánh xạ thực thể
vào CSDL.
SessionFactory: cho phép sản sinh ra nhiều
session khác nhau từ thông tin cấu hình.
Session: là một phiên làm việc được tạo từ
SessionFactory
Transaction: sử dụng để điều khiển các giao dịch
làm thay đổi dữ liệu
Query: sử dụng để thực hiện truy vấn đối tượng
Criteria: sử dụng để xây dựng câu lệnh truy vấn
bằng lập trình thay cho câu lệnh HQL hay SQL.
THƯ VIỆN
Trong số các thư viện này
thì sqljdbc4.jar là JDBC
driver làm việc với SQL
Server.
Nếu bạn muốn làm việc
với một CSDL cụ thể nào
đó (Oracle, MySQL,
DB2...) thì phải bổ sung
JDBC driver tương ứng
với CSDL đó vào ứng
dụng của bạn.
CẤU HÌNH TÍCH HỢP HIBERNATE
Để tích hợp Hibernate vào Spring bạn cần cấu hình
3 bean
org.springframework.jdbc.datasource.DriverManagerDataSource
Kết nối đến CSDL
org.springframework.orm.hibernate4.LocalSessionFactoryBean
Tạo session factory từ kết nối CSDL
org.springframework.orm.hibernate4.HibernateTransactionManager
Quản lý transaction
CẤU HÌNH DATASOURCE
DataSource khai báo các thông số kết nối đến CSDL
sẽ được sử dụng bởi SessionFactory
Các thông số kết nối CSDL
JDBC Driver trong môn học này sử dụng SQL Server
Server nơi cài đặt SQL Server
Username và password đăng nhập vào CSDL thông qua
TCP/IP.
Chú ý: phải kích hoạt kết nối TCP/IP cho CSDL SQL
Server
CẤU HÌNH SESSIONFACTORY
SessionFactory sẽ được tiêm vào Controller khi làm
việc với Hibernate
Phải tiêm data source đã khai báo trước đó vào session
factory thông qua XML
Chỉ ra package nơi chứa các entity class ánh xạ vào các
bảng trong CSDL
CẤU HÌNH TRANSACTION
TransactionManager được Spring nạp vào để
quản lý transaction tự động.
Spring sẽ tự tạo một session và commit hoặc
rollback tự động để tăng hiệu suất trong việc xử
lý thao tác CSDL
sẽ cho phép bạn sử dụng
transaction thông qua việc khai báo
@Transaction
DEMO
Chạy Java5.sql tạo CSDL mẫu
Giải thích file cấu hình tích hợp hibernate
ÁNH XẠ THỰC THỂ
Ánh xạ là sự mô tả việc kết hợp giữa
Lớp Entity và bảng
Các trường và các cột trong bảng
Thực thể kết với Relationship
Hibernate chấp nhận 2 phương pháp ánh xạ
Sử dụng XML
Sử dụng Annotation. Trong môn học này sử dụng
Annotation
CSDL MẪU
Tài khoản người
sử dụng
Thông tin sinh
viên
Thông tin
chuyên ngành
MÔ HÌNH THỰC THỂ
User
-id: String
-fullname: String
-password: String
-photo: String
-email: String
+getters
+setters
Major
-id: String
-name: String
-students: Collection
+getters
+setters
Student
-id:Integer
-fullname: String
-gender: Boolean
-birthday: Date
-mark: Double
-major: Major
+getters
+setters
1 *
Nhiều thực thể
Student kết hợp với
một thực thể Major
Một thực thể Student
kết hợp với 1 thực thể
Major
XÂY DỰNG LỚP THỰC THỂ USER
@Entity đánh dấu lớp thực thể
@Table ánh xạ thực thể với bảng
@Column ánh xạ trường với cột
@Id đánh dấu trường ánh xạ với
cột khóa chính
QUI ƯỚC ÁNH XẠ
Có thể bỏ @Table nếu tên
lớp thực thể và tên bảng
giống nhau
Có thể bỏ @Column nếu tên
trường và tên cột giống nhau
Nếu muốn một trường
không ánh xạ vào một cột
nào cả hãy sử dụng modifier
transient
Tất cả các trường phải có
getter/setter.
XÂY DỰNG THỰC THỂ STUDENT
Trường id ánh xạ
với cột tự tăng
Dữ liệu kiểu
thời gian
Thay khóa ngoại
bằng thực thể
kết hợp (N-1)
Chú ý sử dụng kiểu dữ liệu hợp lý
CÁC ANNOTATION ÁNH XẠ
ÁNH XẠ THỰC THỂ KẾT HỢP
1-N: một ngành có nhiều sinh viên
Sử dụng @OneToMany
N-1: nhiều sinh viên thuộc một
ngành
Sử dụng @ManyToOne và
@JoinColumn
ÁNH XẠ THỰC THỂ KẾT HỢP 1-N
@OneToMany(mappedBy, fetch)
mappedBy chỉ ra tên trường thực thể kết hợp
fetch chế độ nạp kèm thực thể kết hợp khi thực thể
chính được nạp vào bộ nhớ.
FetchType.LAZY: không nạp kèm thực thể kết hợp
FetchType.EAGER: nạp kèm thực thể kết hợp
DEMO
Giải thích các entity class:
User, Major và Student
LẬP TRÌNH JAVA 5
PHẦN 2
LẬP TRÌNH HIBERNATE
Trước khi lập trình hibernate bạn phải tiêm
SessionFactory vào @Controller bằng cách sử
dụng @Autowired
Trong môi trường Spring bạn có thể sử dụng
session được tạo sẵn
(factory.getCurrentSession()) hoặc mở một
session mới (factory.openSession())
Nếu sử dụng session được mở sẵn thì Spring tự
động commit và rollback, tuy nhiên bạn phải
khai báo thêm với @Transactional
Đối với session tạo mới thì bạn phải commit,
rollback và đóng lại khi không cần nữa.
MÔ HÌNH LẬP TRÌNH HIBERNATE
Tiêm SessionFactory vào trước
khi lập trình Hibernate
Session mới nên sử dụng
trong thao tác thực thể (save,
update, delete)
Session được mở sẵn nên
được sử dụng trong truy vấn
thực thể.
Chú ý: đính kèm
@Transactional có thể đặt
trên Controller để áp dụng
cho tất cả các phương thức
action
TRUY VẤN THỰC THỂ
Lấy session được Spring tạo sẵn
Session session = factory.getCurrentSession();
Tạo đối tượng Query
String hql = "FROM Major";
Query query = session.createQuery(hql);
Chú ý: HQL là câu lệnh truy vấn đối tượng. Trong đó
chỉ có thực thể và thuộc tính mà không có bảng và cột
Truy vấn danh sách đối tượng
List list = query.list();
DEMO
Giải thích user/list.htm
TRUY VẤN CÓ THAM SỐ
Tham số bắt đầu bởi dấu hai chấm (:)
Query.setParameter(name, value) được sử dụng
để cấp giá trị cho các tham số trước khi thực
hiện truy vấn
TRUY VẤN PHÂN TRANG
Truy vấn phân trang là truy vấn một đoạn đối
tượng từ kho dữ liệu
Query.setFirstResult(startIndex) chỉ ra vị trí bắt
đầu truy vấn
Query.setMaxResults(size) chỉ ra số thực thể tối
đa truy vấn được
TRUY VẤN MỘT SỐ THUỘC TÍNH
Sử dụng mệnh đề SELECT để chọn một số thuộc
tính
Kết quả nhận được là danh dách mảng đối
tượng. Số phần tử trong mảng là số các thuộc
tính truy vấn trong mệnh đề SELECT.
DEMO
Giải thích report/by-major.htm
TRUY VẤN MỘT GIÁ TRỊ
Hql1 và hql2 là 2 câu lệnh chỉ cho 1 giá trị
Sử dụng phương thức query.uniqueResult() sau
đó ép sang kiểu thích hợp để nhận kết quả.
TRUY VẤN MỘT THỰC THỂ
Nếu bạn chỉ có Id thì sử dụng phương thức
session.get(Class, Id) để nạp thực thể từ CSDL
Nếu bạn đang có một đối tượng và muốn nạp lại
thông tin từ CSDL thì sử dụng phương thức
session.refresh(Object)
DEMO
Giải thích
+ user/detail/id.htm
+ user/login.htm
THAO TÁC THỰC THỂ
Thao tác thực thể là làm thay đổi dữ liệu trong
các thực thể như thêm, sửa, xóa.
Hibernate cần phải sử dụng transaction để điều
khiển các hành động này Mở một session mới
Bắt đầu điều khiển transaction
Chấp nhận thay đổi dữ liệu
Hủy bổ thay đổi dữ liệu
Đóng session
Các hoạt động thao tác dữ liệu
THÊM MỚI
CẬP NHẬT
XÓA
DEMOGiải thích+ user/register.htm
+ user/change.htm
+ user/delete.htm
+ MajorController
+ StudentController
NGÔN NGỮ HQL
HQL (Hibernate Query Language) được thiết kế
để truy vấn đối tượng được ánh xạ vào CSDL
quan hệ
HQL trong suốt CSDL – có thể sử dụng để truy
vấn bất kỳ CSDL nào mà không cần thay đổi mã
truy vấn.
HQL gần giống với SQL tuy nhiên nó sử dụng
Thực thể thay bảng
Thuộc tính thay cột
Toán tử và hàm của hibernate nhiều hơn SQL và tập
trung vào xử lý đối tượng
Khi học HQL người ta chỉ chú trọng vào việc truy
vấn vì thao tác đã có API đảm trách.
TRUY VẤN ĐỐI TƯỢNG
HQL cũng cho phép sử dụng JOIN nhưng thông
thường người ta sử dụng thực thể kết hợp thay
cho JOIN.
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
NGÔN NGỮ HQL
FROM – Tất cả thực thể
FROM Course
FROM Course as c
FROM Course c
WHERE – Lọc theo điều kiện
FROM Course WHERE name LIKE ‘Nguyễn%’
FROM Course WHERE schoolfee BETWEEN 100 AND 250
FROM Product WHERE description IS NOT NULL
FROM Product p WHERE p.category.id IN (1, 3, 5, 7)
SELECT – Một số thuộc tính
SELECT name, schoolfee FROM Course
SELECT c.name, c.schoolfee FROM Course c
NGÔN NGỮ HQL
Sắp xếp
FROM Course ORDER BY startDate DESC, schoolfee
Thống kế
SELECT AVG(unitPrice), MAX(discount) FROM Product
p GROUP BY p.category
SELECT AVG(unitPrice), MAX(discount) FROM Product
p GROUP BY p.category HAVING AVG(unitPrice) >
100
NGÔN NGỮ HQL – TOÁN TỬ
Toán tử
Số học:+, -, *, /
So sánh:=, >=, , !=
Logic:AND, OR, NOT
Toán tử đặc biệt:
NOT
IN,
BETWEEN
IS NULL
LIKE
IS EMPTY
NGÔN NGỮ HQL - HÀM
Tổng hợp thống kê
avg(...), sum(...), min(...), max(...)
count(*)
count(...), count(distinct ...), count(all...)
Xử lý chuỗi
concat(...,...): ghépchuỗi
substring(): lấy chuỗi con
trim(): cắt bỏ ký tự trắng 2 đầu chuỗi
lower(): chuyển in thường
upper(): chuyển in hoa
length(): lấy đội dài chuỗi
locate(): tìm vị trí chuỗi con
NGÔN NGỮ HQL - HÀM
Hàm xử lý thời gian
current_date(): lấy ngày, tháng năm
current_time(): lấy giờ, phút và giây
current_timestamp(): lấy ngày giờ
second(...): lấy giây
minute(...): lấy phút
hour(...): lấy giờ trong ngày
day(...): lấy ngày trong tháng
month(...): lấy tháng
year(...): lấy năm
NGÔN NGỮ HQL - HÀM
Các hàm khác
abs(): lấy giá trị tuyệt đối
sqrt(): tính căn bậc 2
str(): chuyển số/ngày sang chuỗi
cast(... as ...): ép kiểu
TỔNG KẾT NỘI DUNG BÀI HỌC
Tìm hiểu Hibernate
Cấu hình tích hợp Hibernate vào môi trường
Spring
Ánh xạ thực thể
Lập trình Hibernate
Truy vấn
Thao tác
Tham khảo thêm ngôn ngữ HQL
Các file đính kèm theo tài liệu này:
- giao_trinh_lap_trinh_java_bai_6_tich_hop_hibernate.pdf