Xây dựng ứngdụng với Hibernate.

Một phần của tài liệu Đề cương các ví dụ nâng cao công nghệ phần mềm (Trang 129 - 135)

- Synchronization Proxy: Đảm bảo nhiều client cóthể truy cập vào cùng một đối tượng mà không gây ra xung đột Thực tế có rất nhiều tình huống khiến chúng ta phải nghĩ đến

Xây dựng ứngdụ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ặtluậ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ữnglayernhư 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 layerchịu trách nhiệm giao tiếp với data layer(thường là mộthệ 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ácRelational DBMS.

Dự án Hibernate

Hibernatelà 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ẩmJBoss 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ùngHibernate.

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 objecttừ mộtschema có sẵn trongdatabase (reverse-engineering) và từ các file hbm sinh ra các class java để hiện thực cácpersistence 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ủaHibernate.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.jarcommons-

logging.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.

Để 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.propertieshibernate.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ìnhHibernate, đầ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ởiHibernate:

1. <?xml version="1.0"?>

2. <!DOCTYPE hibernate-configuration PUBLIC 3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 5. <hibernate-configuration> 6. <session-factory> 7. <property name="connection.username">uid</property> 8. <property name="connection.password">pwd</property> 9. <property name="connection.url">jdbc:mysql://localhost/db</property> 10. <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 11. <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 12. <mapping resource="com/manning/hq/ch03/Event.hbm.xml"/> 13. <mapping resource="com/manning/hq/ch03/Location.hbm.xml"/> 14. <mapping resource="com/manning/hq/ch03/Speaker.hbm.xml"/>

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ínhdialect 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âuHibernate Query Language (HQL)được chuyển đổi đúng với SQL dialect dưới CSDL.

Hibernatecũ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ụngHibernatevớ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. <?xml version="1.0"?>

2. <!DOCTYPE hibernate-configuration PUBLIC 3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 5. <hibernate-configuration> 6. <session-factory name="java:comp/env/hibernate/SessionFactory"> 7. <property name="connection.datasource">jdbc/myDataSource</property> 8. <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 9. <mapping resource="com/manning/hq/ch03/Event.hbm.xml"/> 10. <mapping resource="com/manning/hq/ch03/Location.hbm.xml"/> 11. <mapping resource="com/manning/hq/ch03/Speaker.hbm.xml"/> 12. <mapping resource="com/manning/hq/ch03/Attendee.hbm.xml"/> 13. </session-factory> 14. </hibernate-configuration>

Bạn chỉ sử dụng loại cấu hình này khi sử dụngHibernatevới application server:Jboss, WebSphere...Thuộc tínhconnection.datasourcephả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ạ.

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ớpEventcó tên làEvent.hbm.xml.

1. <?xml version="1.0"?>

2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/

Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate- mapping-3.0.dtd">

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. <property name="name" type="string" length="100"/>

9. <property name="startDate" column="start_date" type="date"/> 10. <property name="duration" type="integer"/>

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

packagemặc định cho lớp. Thuộc tínhset, bạn cần cung cấp tên của lớppersistentkhác như:SpeakerAttendee.

Thẻ class bắt đầu định nghĩa ánh xạ cho lớppersistentxá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.

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ácgeneratorphổ 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 đó.

Một phần của tài liệu Đề cương các ví dụ nâng cao công nghệ phần mềm (Trang 129 - 135)

Tải bản đầy đủ (PDF)

(171 trang)