Bài giảng Lập trình Java 5 - Bài 6: Tích hợp 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ạ.
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.
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình Java 5 - Bài 6: Tích hợp hibernate", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Lập trình Java 5 - Bài 6: Tích hợp hibernate
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
File đính kèm:
- bai_giang_lap_trinh_java_5_bai_6_tich_hop_hibernate.pdf