Tải bản đầy đủ (.pdf) (8 trang)

Công nghệ hibernate

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (159.35 KB, 8 trang )

Công nghệ Hibernate

Công nghệ Hibernate
Bởi:
Khoa CNTT ĐHSP KT Hưng Yên

Giới thiệu
Trước khi tìm hiểu Hibernate là gì, chúng ta cần chuẩn bị một số kiến thức để làm
nền tảng. Đầu tiên, chúng ta cần tìm hiểu "framework" là gì? Framework ngày nay
được "lạm dụng" rất nhiều. Nhiều người hay gán một vài thứ là "framework" nhưng
gán gọi như vậy có đúng không lại là một chuyện khác. Theo cộng đồng wikipedia, từ
framework dùng trong phát triển phần mềm là một khái niệm dùng để chỉ những "cấu
trúc hỗ trợ được định nghĩa" mà trong đó những dự án phần mềm khác có thể được sắp
xếp vào đó và phát triển. Thông thường, một framework bao gồm những program hỗ
trợ, code libs và một ngôn ngữ scripting nằm giữa các chương trình phần mềm khác để
giúp phát triển và gắn những thành phần khác nhau trong dự án phần mềm lại với nhau.
Tiếp theo, chúng ta cần tìm hiểu về "persistence layer". Như bạn đã biết, 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 client để
chỉ các máy đóng vai trò client và tier server để chỉ các máy đóng vai trò server. Và loại
ứng dụng client-server là ứng dụng 2-tier (vì chỉ có 2 tier thôi). Tương tự như vậy theo
sự phát triển như vũ bão của công nghệ phần cứng và phần mềm cộng với nhu cầu của
các người dùng, doanh nghiệp và xã hội ngày càng lớn, chúng ta thấy có các ứng dụng
3-tier và n-tier để khắc phục nhược điểm của ứng dụng 2-tier và nhằm tăng sức mạnh
xử lý cho ứng dụng. "Layer" là một khái niệm khác với "tier". Và chúng ta đừng lầm lẫn
giữa "tier" và "layer". Tier thường gắn với phần cứng máy tính (về mặt physically) còn
"layer" thì dính 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 xét về mặt luận lý (logically). Điều
này có nghĩa là khi chúng 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. Ví dụ, 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) và
phần chứa dữ liệu (data layer). Cụ thể ra, 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) và persitence layer. Persistence 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
1/8


Công nghệ Hibernate

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.
Việc phân chia như vậy có lợi ích là công việc sẽ được tách bạch ra. Người nào lo thiết
kế và xử lý UI thì chỉ việc chú tâm vào công việc đó. Người lo business layer thì chỉ cần
tập trung vào thiết kế và phát triển làm sao thoả mãn các requirement của khách hàng
mà không phải chú tâm đến các khía cạnh hiện thực bên dưới thông thường liên quan
đến technical issues. Còn người lo persistence layer thì chỉ việc chú trọng đến các khía
cạnh hiện thực và giải quyết các technical issues mà thôi. Cũng như sẽ có những DBA
(DB Administrators) lo việc cài đặt và tạo các objects trong các relational database.
Như vậy, bạn đã hiểu ứng dụng được chia một cách logically thành các "layer" và bạn
cũng hiểu được là persistence layer là một layer có nhiệm vụ kết nối Relational DBMSs
và truy xuất, thao tác trên dữ liệu đã được lưu trữ cũng như lưu trữ dữ liệu mới vào
chúng. Hibernate framework là một framework cho persistence layer. Và bạn có thể thấy
rằng nhờ có Hibernate framework mà giờ đây khi bạn phát triển một ứng dụng bạn 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.
Tương tự như vậy nếu bạn có một UI framework, bạn sẽ không phải bận tâm nhiều về
UI layer nữa. Và xét đến cùng, việc bạn quan tâm duy nhất là business logic layer của

bạn có đáp ứng yêu cầu của khách hàng không hay thôi.
Và đây là thông tin về Hibernate framework từ website chính thức của Hibernate:
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 giúp bạn phát triển các class dùng để lưu trữ dữ liệu theo cách thức rất là
hướng đối tượng: association, inheritance, polymorphism, composition và collections.
Hibernate cho phép bạn 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 là ngôn ngữ SQL nguyên thuỷ cũng như là sử
dụng các API.
Không giống như các persistence layer khác, Hibernate không ẩn đi sức mạnh của ngôn
ngữ SQL khỏi bạn mà Hibernate còn đảm bảo cho bạn việc bạn đầu tư vào công nghệ
và tri thức cơ sở dữ liệu quan hệ là luôn luôn chính xác. Và điều quan trọng hơn nữa là
Hibernate được license theo LGPL (Lesser GNU Public License). Theo đó, bạn có thể
thoải mái sử dụng Hibernate trong các dự án open source hoặc các dự án thương mại
(commercial).
Hibernate là một dự án open source chuyên nghiệp và là một thành phần cốt tuỷ của bộ
sản phẩm JBoss Enterprise Middleware System (JEMS). JBoss, như chúng ta đã biết là
một đơn vị của Red Hat, chuyên cung cấp các dịch vụ 24x7 về hỗ trợ chuyên nghiệp, tư
vấn và huyấn luyện sẵn sàng hỗ trợ bạn trong việc dùng Hibernate.

2/8


Công nghệ Hibernate

Xây dựng ứng dụng với Hibernate.
“Tier” và “Layer”: tier thường được gắn với phần cứng về mặt vật lý (physical) còn
layer thì dính đến 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.
Một ứng dụng có thể được chia làm 3 phần như sau: giao diện người dùng
(presentation layer), phần xử lý nghiệp vụ (business layer) và phần chứa dữ liệu (data
layer). Cụ thể ra, business layer có thể được chia nhỏ thành hai layer con là business
logic layer (các tính toán nhằm thỏa mãn yêu cầu người dùng) và persistence layer.
Persistence 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 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.

Kiến trúc của Hibernate

3/8


Công nghệ Hibernate

Dự án Hibernate
Hibernate là một dự án open source chuyên nghiệp và là một thành phần cốt tuỷ của bộ
sản phẩm JBoss Enterprise Middleware System (JEMS). JBoss, như chúng ta đã biết
là một đơn vị của Red Hat, chuyên cung cấp các dịch vụ 24x7 về hỗ trợ chuyên nghiệp,
tư vấn và huấn luyện sẵn sàng hỗ trợ bạn trong việc dùng Hibernate.
Các thành phần của Hibernate project
- Hibernate Core: Cung cấp các chức năng cơ bản của một persistence layer cho các
ứng dụng Java với các APIs và hỗ trợ XML mapping metadata.
- Hibernate Annotations: Các map class với JDK 5.0 annotations, bao gồm Hibernate
Validator.
- Hibernate EntityManager: Sử dụng EJB 3.0 EntityManager API trong JSE hoặc với
bất kỳ JEE server nào.
- Hibernate Tools: Các tool tích hợp với Eclipse và Ant dùng cho việc sinh ra các
persistence object từ một schema có sẵn trong database (reverse-engineering) và từ

các file hbm sinh ra các class java để hiện thực các persistence object, rồi Hibernate
tự tạo các object trong database (forward-engineering).
- NHibernate: Hibernate cho .Net framework.
- JBoss Seam: Một Java EE 5.0 framework cho phát triển các ứng dụng JSF, Ajax và
EJB 3.0 với sự hỗ trợ của Hibernate. Seam hiện rất mới và tỏ ra rất mạnh để phát triển
các ứng dụng Web 2.0. Nó tích hợp đầy đủ tất cả các công nghệ "hot" nhất hiện nay.
Thư viện: bạn có thể tìm ở lib của Hibernate Core 3.2.6 GA
antlr.jarcglib.jarasm.jarasm-attrs.jarscommons-collections.jarcommonslogging.jarhibernate3.jarjta.jardom4j.jarlog4j.jarhsqldb.jarjtds-1.2.jarservlet-2.3.1.jar
Các bạn có thể vào địa chỉ: www.hibernate.org để download Hibernate Core 3.2.6 GA
Cấu hình Hibernate
Hibernate được cấu hình theo hai bước:
- Cấu hình service bao gồm: tham số kết nối CSDL, caching và tập các lớp persistent.
- Cung cấp cho Hibernate các thông tin về các lớp được persist.

4/8


Công nghệ Hibernate

Để giải quyết hai bước theo yêu cầu của Hibernate, chúng ta sẽ thảo luận từng vấn đề
sau:
- Tạo file cấu hình hibernate.cfg.xml.
- Xây dựng các file định nghĩa ánh xạ để cung cấp cho Hibetnate các thông tin về các
lớp persistent.
- Các lớp được sử dụng để persist và rút trích các lớp.
- Cấu hình nâng cao bao gồm: object caching và quản lý giao dịch.
• Cấu hình cơ bản
Hibernate cung cấp 2 phương pháp cấu hình: file properties theo chuẩn của Java
được gọi là hibernate.properties và file có định dạng XML gọi là hibernate.cfg.xml.
Chúng ta sẽ sử dụng file cấu hình XML để cấu hình các service của Hibernate. Nếu

cả hai file hibernate.properties và hibernate.cfg.xml được tìm thấy trong classpath
của ứng dụng thì hibernate.cfg.xml sẽ override lên các thiết lập được tìm thấy trong
hibernate.properties.
Trước khi cấu hình Hibernate, đầu tiên bạn nên xác định service giữ kết nối đến CSDL
như thế nào. Kết nối đến CSDL có thể được cung cấp bởi Hibernate hoặc từ JNDI
DataSource. Một phương pháp thứ ba là kết nối JDBC được cung cấp bởi người dùng.
Sử dụng kết nối JDBC được quản lý bởi Hibernate:
Sau đây là file cấu hình mẫu sử dụng loại kết nối JDBC được quản lý bởi Hibernate:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.

<?xml version="1.0"?>
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
" /><hibernate-configuration>
<session-factory>
uid</property>

pwd</property>
jdbc:mysql://localhost/db</property>
com.mysql.jdbc.Driver</property>
org.hibernate.dialect.MySQLDialect</property>
<mapping resource="com/manning/hq/ch03/Event.hbm.xml"/>
<mapping resource="com/manning/hq/ch03/Location.hbm.xml"/>
<mapping resource="com/manning/hq/ch03/Speaker.hbm.xml"/>
<mapping resource="com/manning/hq/ch03/Attendee.hbm.xml"/>
5/8


Công nghệ Hibernate

16. </session-factory>
17. </hibernate-configuration>
Để sử dụng JDBC connection được cung cấp bởi Hibernate, file cấu hình yêu cầu
5 thuộc tính: connection.driver_class, connection.url, connection.username,
connection.password, dialect.
Thuộc tính dialect bảo cho Hibernate biết SQL dialect nào được sử dụng để thao tác.
Nó được sử dụng để đảm bảo các câu Hibernate Query Language (HQL) được chuyển
đổi đúng với SQL dialect dưới CSDL.
Hibernate cũng cần biết vị trí (đường dẫn tương đối so với classpath của ứng dụng) và
tên của các mapping file - mô tả persistent classs.
Sử dụng JNDI DataSource
Để sử dụng Hibernate với kết nối CSDL được cung cấp bởi JNDI DataSource, bạn cần
thay đổi một vài chỗ trong file cấu hình như sau:
1.
2.
3.
4.

5.
6.
7.
8.
9.
10.
11.
12.
13.
14.

<?xml version="1.0"?>
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
" /><hibernate-configuration>
<session-factory name="java:comp/env/hibernate/SessionFactory">
jdbc/myDataSource</property>
org.hibernate.dialect.MySQLDialect</property>
<mapping resource="com/manning/hq/ch03/Event.hbm.xml"/>
<mapping resource="com/manning/hq/ch03/Location.hbm.xml"/>
<mapping resource="com/manning/hq/ch03/Speaker.hbm.xml"/>
<mapping resource="com/manning/hq/ch03/Attendee.hbm.xml"/>
</session-factory>
</hibernate-configuration>

Bạn chỉ sử dụng loại cấu hình này khi sử dụng Hibernate với application server: Jboss,
WebSphere...Thuộc tính connection.datasource phải có cùng giá trị với tên của JNDI
DataSource trong cấu hình application server.
• Tạo định nghĩa ánh xạ
Các định nghĩa ánh xạ được gọi là mapping document, được sử dụng để cung cấp cho

Hibernate các thông tin để lưu trữ các đối tượng đến CSDL quan hệ. Các file ánh xạ
cung cấp các đặc tính như tạo lược đồ CSDL từ tập hợp các file ánh xạ.

6/8


Công nghệ Hibernate

Các định nghĩa ánh xạ cho các đối tượng persistent có thể được lưu chung với nhau
trong cùng một file. Phương pháp thích hợp hơn là định nghĩa cho mỗi đối tượng được
lưu trong một file.
Quy ước đặt tên cho các file ánh xạ là sử dụng tên của persistent class với phần mở rộng
hbm.xml. Ví dụ: file ánh xạ cho lớp Event có tên là Event.hbm.xml.
1. <?xml version="1.0"?>
2. Hibernate Mapping DTD 3.0//EN" " />3. <hibernate-mapping package="com.manning.hq.ch03">
4. <class name="Event" table="events">
5. <id name="id" column="uid" type="long" unsaved-value="null">
6. <generator class="native"/>
7. </id>
8.
9.
10.
11. <many-to-one name="location" column="location_id" class="Location"/>
12. <set name="speakers">
13. <key column="event_id"/>
14. <one-to-many class="Speaker"/>
15. </set>
16. <set name="attendees">
17. <key column="event_id"/>

18. <one-to-many class="Attendee"/>
19. </set>
20. </class>
21. </hibernate-mapping>
File ánh xạ bắt đầu bằng hibernate-mapping element. Thuộc tính package thiết lập
package mặc định cho lớp. Thuộc tính set, bạn cần cung cấp tên của lớp persistent khác
như: Speaker và Attendee.
Thẻ class bắt đầu định nghĩa ánh xạ cho lớp persistent xác định, thuộc tính table là tên
của quan hệ (relational) được sử dụng để lưu các đối tượng.
Element <id> mô tả khóa chính của persistent class - tự động được phát sinh. Thuộc
tính name định nghĩa các thuộc tính của persistent class sẽ được sử dụng để lưu giá trị
của khóa chính.

7/8


Công nghệ Hibernate

Element <generate> được sử dụng để xác định tên của lớp phát sinh khóa chính cho
record mới khi lưu nó. Ở đây chúng ta sử dụng lớp native.
Sau đây là danh sách các generator phổ biến được sử dụng trong Hibernate:
- increment - phát sinh id (loại long, short hoặc int) là duy nhất chỉ khi không có tiến
trình khác chèn dữ liệu vào cùng bảng.
- identity - nó hỗ trợ cột id trong DB2, MySQL, MS SQL Server, Sybase và
HypersonicSQL. Id được trả về có loại long, short hoặc int.
- sequence - phát sinh sequence sử dụng một sequence trong DB2, PostgreSQL, Oracle,
SAP DB, McKoi hoặc Interbase. Id được trả về có loại long, short hoặc int.
- hilo - Bộ phát sinh hilo sử dụng thuật toán hilo để phát sinh id.
- native - Nó sẽ chọn id, sequence hoặc hilo phụ thuộc vào khả năng CSDL phía
dưới.Thuộc tính unsaved-value mô tả giá trị của thuộc tính id cho các thể hiện transient

của lớp đó.

8/8



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×