Người ta sử dụng thuật ngữ "tier" để chỉ mỗi loại máy có vai trò khác nhau đó - “Tier” thường gắn với phần cứng máy tính về mặt vật lý còn "layer" thì gắn với vấn đề cách thức tổ chức bê
Trang 1Hibernate framework
I. Khái niệm
1. Persistence Layer
1.1. “Tier” và “Layer”
- Kiến trúc ứng dụng dụng phần mềm có nhiều loại Có loại chỉ chạy trên một máy là đủ Có chương trình muốn chạy được phải kết nối sang một máy khác (client-server) Một máy đóng vai trò như là người yêu cầu (client) và máy khác đóng vai trò kẻ phục vụ (server) Người ta sử dụng thuật ngữ "tier" để chỉ mỗi loại máy có vai trò khác nhau đó
- “Tier” thường gắn với phần cứng máy tính (về mặt vật lý) còn "layer" thì gắn với vấn đề cách thức tổ chức bên trong của ứng dụng
- Việc phân chia tier là “trong suốt” (transparent) đối với ứng dụng về mặt luận lý (logical) Điều này có nghĩa là khi ta phát triển một ứng dụng, chúng ta không bận tâm đến các thành phần (component) sẽ triển khai (deploy) ra sao mà chỉ chú ý là chúng ta sẽ tổ chức ứng dụng thành những layer như thế nào.
1.2. Persistence layer
Một ứng dụng có thể chia làm 3 phần như sau:
- phần giao diện người dùng (UI layer)
- phần xử lý nghiệp vụ (business layer)
- phần chứa dữ liệu (data layer)
Cụ thể, business layer sẽ có thể chia nhỏ thành 2 layer con là:
- business logic layer (chỉ quan tâm đến ý nghĩa của các nghiệp vụ, các tính toán mang nhằm thoả mãn yêu cầu của người dùng)
- persitence layer chịu trách nhiệm giao tiếp với data layer (thường là một hệ quản trị cơ sở dữ liệu quan hệ - Relational DBMS) Persistence layer sẽ đảm nhiệm các nhiệm vụ mở kết nối, truy xuất và lưu trữ dữ liệu vào các Relational DBMS
2. Hibernate
Trang 2Hibernate là một framework được một sinh viên nghĩ ra để đơn giản hóa , tự động hóa quá trình kết nối và thao tác trên CSDL ,dựa vào những cấu trúc định nghĩa bằng file xml để thực hiện việc tạo CSDL, bảng, các ràng buộc trên bảng, các quan hệ tham chiếu Có nghĩa là việc kết nối tới csdl khi dùng hibernate giúp người lập trình ít quan tâm hơn tới việc thao tác trên dữ liệu mà quan tâm tới những ràng buộc dữ liệu nhiều hơn, thông qua các chú giải được định nghĩa, làm cho việc thao tác CSDL hướng đối tượng hoàn toàn
Hibernate được cấp giấy phép theo LGPL (Lesser GNU Public License) Theo đó,
có thể sử dụng rộng rãi trong các dự án thương mại hoặc các dự án mã nguồn mở
Đặc điểm :
- Hibernate: là một dịch vụ lưu trữ và truy vấn dữ liệu quan hệ mạnh mẽ và nhanh
- Hibernate là một trong những ORM Framework (Object Relational Mapping framewrok là một cơ chế cho phép người lập trình thao tác với database một cách hoàn toàn tự nhiên thông qua các đối tượng Lập trình viên hoàn toàn không quan tâm đến loại database sử dụng, SQL, …)
- Hibernate framework là một framework cho persistence layer nhờ có Hibernate framework nên khi phát triển một ứng dụng ta chỉ cần chú tâm vào những layer khác mà không phải bận tâm nhiều về persistence layer nữa
- Hibernate giúp phát triển các class dùng để lưu trữ dữ liệu theo cách thức hướng đối tượng: association, inheritance, polymorphism, composition và collections
- Hibernate cho phép thực hiện các câu truy vấn dữ liệu bằng cách sử dụng ngôn ngữ SQL mở rộng của Hibernate (HQL) hoặc ngôn ngữ SQL nguyên thuỷ cũng như là sử dụng các API
- Hibernate đảm bảo cho người phát triền sử dụng cơ sở dữ liệu luôn chính xác
II. Hibernate
1. Các tính năng của Hibernate
Trang 3- Hibernate 3.0 cung cấp ba đầy đủ tính năng tiện truy vấn: Hibernate Query
Language, Hibernate Criteria Query API và các truy vấn tự nhiên
- Bộ lọc để làm việc với dữ liệu tạm thời ,vùng dữ liệu hoặc các dữ liệu được phân quyền
- Nâng cao khả năng truy vấn với API: với sự hỗ trợ đầy đủ cho các phép chiếu ,phép kết hợp và phép chọn
- Kiểm soát được thời gian chạy: thông qua JMX hoặc Java API, bao gồm cả
bộ đệm trình duyệt ở mức thứ cấp
- Hỗ trợ IDE Eclipse, bao gồm một bộ Eclipse plug-in để làm việc với Hibernate 3.0, bao gồm biên tập liên kết, tương tác với mẫu truy vấn, công
cụ nhận lại cấu trúc cơ sở dữ liệu
- Hibernate là miễn phí theo LGPL: Hibernate có thể được dùng để phát triển phân phối các ứng dụng miễn phí
- Hibernate có thể mở rộng: Hibernate mang lại hiệu năng cao và kiến trúc 2 lớp của nó có thể được sử dụng trong môi trường tập trung
- Giảm thời gian phát triển ứng dụng: Hibernate làm giảm thời gian phát triển các ứng dụng vì nó hỗ trợ thừa kế, đa hình, thành phần và các framework trong java
- Hibernate XML cho phép liên kết dữ liệu được biểu diễn như XML và POJOs thay thế cho nhau
Trang 4Cơ sở dữ liệu
Hibernate
Các thuộc tính của Hibernate XML Mapping
Ứng dụng
Đối tượng Persistence
Kiến trúc Hibernate
2. Kiến trúc Hibernate
Sơ đồ trên cho thấy rằng Hibernate là sử dụng cơ sở dữ liệu và file cấu hình để cung cấp các dịch vụ lâu dài cho ứng dụng
Để sử dụng Hibernate, sự cần thiết phải tạo ra các lớp Java biểu diễn cho bảng tương ứng trong cơ sở dữ liệu và sau đó ánh xạ các thuộc tính của lớp với các cột của bảng trong cơ sở dữ liệu Sau đó, Hibernate có thể được sử dụng để thực hiện các thao tác trên cơ sở dữ liệu như chèn, chọn, cập nhật và xóa các bản ghi trong bảng Hibernate tự động tạo ra các truy vấn để thực hiện các thao tác này
Kiến trúc Hibernate có ba thành phần chính:
Trang 5- Quản lý kết nối: Hibernate cung cấp dịch vụ quản lý kết nối cơ sở dữ liệu hiệu quả Kết nối cơ sở dữ liệu là phần tốn kém tài nguyên và hiệu năng nhất trong việc tương tác với cơ sở dữ liệu vì nó đòi hỏi nhiều tài nguyên phải mở
và đóng kết nối cơ sở dữ liệu
- Quản lý giao dịch: Quản lý dịch vụ giao dịch cung cấp khả năng người sử dụng để thực hiện nhiều hơn một câu lệnh tại một thời điểm
- Đối tượng bản đồ quan hệ: Đối tượng bản đồ quan hệ là kỹ thuật lập ánh xạ biểu diễn dữ liệu từ một mô hình đối tượng cho đến một mô hình dữ liệu quan hệ Đối tượng này được sử dụng đê thực hiện các thao tác như truy vấn ,thêm mới, cập nhật và xóa các bản ghi dạng bảng bên dưới.Hibernate là rất tốt công cụ như xa như là đối tượng bản đồ quan hệ là mối quan tâm, nhưng
về mặt quản lý kết nối và quản lý giao dịch, đó là thiếu hiệu năng và khả năng Vì vậy, thường Hibernate được sử dụng để quản lý kết nối khác và các công cụ quản lý giao dịch Ví dụ apache DBCP được sử dụng để kết nối tổng hợp với Hibernate
Hibernate cung cấp rất nhiều tính linh hoạt trong sử dụng Nó được gọi là kiến trúc "Lite" khi chúng ta chỉ sử dụng các thành phần đối tượng bản đồ quan hệ Trong khi kiến trúc "Full Cream" tất cả trong ba thành phần đối tượng quan hệ lập bản đồ, quản lý kết nối và Quản lý giao dịch được sử dụng
3. Thành phần của ứng dụng Hibernate
Các ORM framework mang đến cho các developer những tư duy trong khái niệm
về quan hệ trong khi vẫn làm việc với các lớp Có nhiều framework mang mục đích này Những gì làm cho Hibernate khác với những framework khác chính là tính đơn giản và khả chuyển của nó Để tạo nên ứng dụng Hibernate, có ba điều cần phải có, đó là:
3.1. Persistence Class
Persistence class là một Plain Old Java Object hay POJO model Một POJO là tương tự như một JavaBean, có những getter và setter để truy câp các thuộc tính của nó là những instance variable (biến thực thể) Persistence class có những đặc điểm dưới đây:
Nó là thay thế hướng đối tượng cho bảng ở cơ sở dữ liệu
Trang 6 Các thuộc tính của bảng trở thành những instance variable của persistence class
Kiểu dữ liệu của các instance variable là domain của các thuộc tính
Đối tượng của persistence class thay hế cho hàng của bảng
3.2. Mapping file
Mapping file là một file XML chứa ánh xạ chi tiết giữa persistence class và bảng
nó thay thế Các thành phần bắt buộc của file XML này là:
tính được sử dụng để xác định tên lớp, và thuộc tính bản được sử dụng để xác định bảng mà lớp thay thế Ví dụ để ánh xạ một bản mang tên ORDERS thành một persistence class với tên đầy đủ là com.someorg.persist.Order sẽ như dưới đây:
<class name=”com.someorg.persist.Order” table=”ORDERS”>…
</class>
instance variable của class Thành phần cột con của id có thể sử dụng để ánh
xạ thành biến tương ứng Giá trị của khóa chính có thể tự động tạo ra được công bố ở đây Thành phần generator có thể được sử dụng để nói cho
Hibernate một lớp sẽ được sử dụng ở đâu để tự động tạo id, hoặc id được gán bởi ứng dụng
<id name="id" type="string" unsaved-value="null">
<column name="id" sql-type="char(32)" not-null="true"/>
<generator class="assigned"/>
</id>
Ví dụ trên nói cho Hibernate rằng, tên của khóa chính là id mà nó đã được ánh xạ thành instance variable "id" Kiểu dữ liệu của nó là "string" được ánh
xạ cho cột "id" có kiểu "char(32)" thay thế bởi thuộc tính sql-type Thuộc
Trang 7ính lớp của generator chứa giá trị "assigned" nghĩa là ứng dụng bản thân nó
sẽ cung cấp giá trị cho khóa chính
những thuộc tính khác (hoặc các côt thành những instance variable của persistence class Thuộc tính name của property chứa tên của biến như một giá trị Thuộc tính name của thành phần column chứa tên của cột mà
instance variable được ánh xạ Các thuộc tính length và sql-type trỏ đến độ dài và kiểu dữ liệu của cột
<property name="name">
<column name="name" sql-type="char(255)" not-null="true"/>
</property>
3.3. Hibernate Configuration file
File này có thể được gọi trỏ đến ứng dụng sử dụng Hibernate Nguyên nhân là nó chứa cấu hình điều khiển giao tiếp với database ở phía dưới Ở đây, tất cả các file mapping được sử dụn bởi ứng dụng được công bố Địnn dạng thành phần của hibernate-configuration là thành phần gốc Hầu hết các thành phần thông dụng sử dụng trong file XML là:
cấu hình những tham số khác nhau Trong công nghệ Hibernate, những tham
số này được biết như là những tham số property Kiểu database server
(MySQL, Oracle ), dialect class, URL của database, username/password
là những tham số property khác nhau Để đặt chúng vào trong mã:
<session-factory>
<! Database connection settings >
<property
name="connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="connection.url">jdbc:hsqldb:data/tutorial</property>
<property name="connection.username">sa</property>
:
:
</session-factory>
Trang 8- Mapping: Nó là thành phần kết nối tất cả các file mapping,, cũng gọi là các
file hbm, được sử dụng bởi ứng dụng đã công bố Thuộc tính resource được cho giá trị của đường dẫn file hbm
<mapping resource="Event.hbm.xml"/>