1. Trang chủ
  2. » Luận Văn - Báo Cáo

Khóa luận tốt nghiệp Sử dụng NHIBERNATE (OQL - OBJECT QUERY LANGUAGE) để thực hiện chương trình quản lý việc mua bán sách cho một cửa hiệu sách

80 600 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 80
Dung lượng 0,94 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tuy nhiên khi làm việc với các ứng dụng hướng đối tượng, bạn có thể gặp một số vấn đề khi bạn cố gắng persist các đối tượng vào trong mô hình quan hệ.. 1.2-Khái niệm Nhibernate: Nhibern

Trang 1

TRƯỜNG CAO ĐẲNG NGUYỄN TẤT THÀNH

KHOA CÔNG NGHỆ THÔNG TIN

GIANG BỘI LINH

SỬ DỤNG NHIBERNATE (OQL -OBJECT QUERY LANGUAGE) ĐỂ HIỆN THỰC

CHƯƠNG TRÌNH QUẢN LÝ VIỆC MUA BÁN

SÁCH CHO MỘT CỬA HIỆU SÁCH

KHOÁ LUẬN TỐT NGHIỆP

TPHCM 7 - 2009

Trang 2

TRƯỜNG CAO ĐẲNG NGUYỄN TẤT THÀNH

KHOA CÔNG NGHỆ THÔNG TIN

GIANG BỘI LINH - 206205325

SỬ DỤNG NHIBERNATE (OQL -OBJECT QUERY LANGUAGE) ĐỂ HIỆN THỰC

CHƯƠNG TRÌNH QUẢN LÝ VIỆC MUA BÁN

SÁCH CHO MỘT CỬA HIỆU SÁCH

KHOÁ LUẬN TỐT NGHIỆP

KHOÁ 2006 – 2009

Trang 3

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN

Tp.HCM, Ngày Tháng Năm

Giáo viên hướng dẫn

Trang 4

NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN

Tp.HCM, Ngày Tháng Năm

Giáo viên phản biện

Trang 5

MỤC LỤC



LỜI CẢM ƠN 8

ĐỀ CƯƠNG CHI TIẾT 9

LỜI NÓI ĐẦU 13

TÓM TẮT KHÓA LUẬN 14

CHƯƠNG 1TÓM LƯỢC NHIBERNATE 16

1.1-Khái niệm Persistence: 17

1.2-Khái niệm Nhibernate: 17

1.3-Lịch sử phát triển Nhibernate: 18

1.4-Các đặc tính 19

1.5-Kiến trúc Nhibernate: 20

1.6-Các bước xây dựng ứng dụng NHibernate: 21

1.7-Các khái niệm: 24

CHƯƠNG 2PHÂN TÍCH ỨNG DỤNG WEBSITE BÁN SÁCH 42

2.1.Nhận diện tác nhân, mục tiêu của từng tác nhân (actor): 43

2.2.Sơ đồ Use Case: 45

2.3.Mô tả các Use Case: 47

2.3.1.Đăng nhập: 47

2.3.2.Đăng ký: 48

2.3.3.Quản lý chủ đề: 48

2.3.4.Quản lý loại sách: 50

2.3.5.Quản lý nhà xuất bản: 51

2.3.6.Thêm sách: 53

2.3.7.Cập nhật sách: 53

2.3.8.Xem thông tin phiếu nhập: 54

2.3.9.Lập phiếu nhập: 55

2.3.10.Xem thông tin hóa đơn: 56

2.4.Sơ đồ Domain Model: 57

Trang 6

2.5.Mô tả các lớp trong Domain – Model: 57

2.5.1.Lớp Sach: 57

2.5.2.Lớp NhaXuatBan: 58

2.5.3.Lớp Nguoi_Dung: 58

2.5.4.Lớp Phan_Quyen: 59

2.5.5.Lớp Phieu_Thu: 59

2.5.6.Lớp ChuDe: 59

2.5.7.Lớp LoaiSach: 59

2.5.8.Lớp PhieuNhap: 60

2.5.9.Lớp ChiTietPhieuNhap: 60

2.5.10.Lớp TinhTrang: 60

2.5.11.Lớp QuyDinh: 60

2.5.12.Lớp HoaDon: 60

2.5.13.Lớp ChiTietHoaDon: 61

2.5.14.Lớp KhuyenMai: 61

2.5.15.Lớp DonGia: 61

2.5.16.Lớp Tac_Gia: 62

2.5.17.Lớp Sach_TacGia: 62

CHƯƠNG 3THIẾT KẾ 63

3.1.Sơ đồ cơ sở dữ liệu quan hệ: 64

3.2.Mô tả sơ đồ: 64

3.2.1.Bảng Sach: 64

3.2.2.Bảng Nha_Xuat_Ban: 66

3.2.3.Bảng Phan_Quyen: 66

3.2.4.Bảng Nguoi_Dung: 66

3.2.5.Bảng Loai_Sach: 67

3.2.6.Bảng Chi_Tiet_Phieu_Nhap: 68

3.2.7.Bảng Phieu_Nhap: 68

3.2.8.Bảng Tinh_Trang: 69

Trang 7

3.2.9.Bảng Qui_Dinh: 69

3.2.10.Bảng Hoa_Don: 69

3.2.11.Bảng Chi_Tiet_Hoa_Don: 70

3.2.12.Bảng Khuyen_Mai: 71

3.2.13.Bảng Don_Gia: 71

3.2.14.Bảng Chu_De: 72

3.2.15.Bảng Phieu_Thu: 72

3.2.16.Bảng Tac_Gia: 73

3.2.17.Bảng Sach_TacGia: 73

3.3.Giao diện một số màn hình: 74

CHƯƠNG 4CÀI ĐẶT, ĐÁNH GIÁ KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN 76

4.1.Môi trường cài đặt: 77

4.2.Đánh giá kết quả: 77

4.2.1.Kết quả đạt được: 77

4.2.2.Việc chưa làm được: 78

4.3.Hướng phát triển: 78

DANH MỤC TÀI LIỆU THAM KHẢO 79

Trang 8

LỜI CẢM ƠN

Em xin chân thành cảm ơn Khoa Công Nghệ Thông Tin Trường Cao Đẳng Nguyễn Tất Thành, đã tạo điều kiện tốt cho chúng thực hiện tốt đề tài tốt nghiệp này

Em xin chân thành cảm ơn thầy Nguyễn Duy Thái đã tận tình hướng dẫn, chỉ bảo em trong suốt thời gian thực hiện đề tài Mong thầy nhận ở em lời cảm ơn sâu sắc

Chúng em xin chân thành cảm ơn quý thầy cô trong khoa đã tận tình giảng dạy, trang bị cho chúng em những kiến thức quý báu trong những năm học vừa qua Chúng tôi xin chân thành cảm ơn các bạn bè, người đồng hành tốt đã chân thành đóng góp ý kiến để chúng tôi hoàn chỉnh khóa luận này

Chúng con xin gởi lời cảm ơn sâu sắc đến ba mẹ, ông bà đã sinh thành, nuôi dưỡng, giáo dục chúng con thành người Chúng con nghĩ hàng triệu lời cảm ơn cũng không bù đắp được công lao ấy Chúng con hứa sẽ cố gắng hết sức để luôn là niềm tự hào của ba mẹ

Mặc dù chúng em đã cố gắng hoàn thành khóa luận trong phạm vi và khả năng cho phép nhưng chắc chắn sẽ không tránh khỏi những thiếu xót, kính mong sự cảm thông và tận tình chỉ bảo của quý thầy cô và các bạn

Tp.HCM, ngày 25 tháng 07 năm 2009 Sinh viên thực hiện

Giang Bội Linh

Trang 9

ĐỀ CƯƠNG CHI TIẾT

Tên đề tài: SỬ DỤNG NHIBERNATE (OQL -OBJECT QUERY LANGUAGE) ĐỂ

HIỆN THỰC CHƯƠNG TRÌNH QUẢN LÝ VIỆC MUA BÁN SÁCH CHO MỘT CỬA HIỆU SÁCH (ỨNG DỤNG WEB)

Giáo viên hướng dẫn: Thầy Nguyễn Duy Thái

Thời gian thực hiện: từ 09/03/2008 đến cuối 21/06/2008

Loại đề tài: Ứng dụng Web

Nội Dung Đề Tài:

SỬ DỤNG NHIBERNATE (OQL -OBJECT QUERY LANGUAGE) ĐỂ HIỆN THỰC CHƯƠNG TRÌNH QUẢN LÝ VIỆC MUA BÁN SÁCH CHO MỘT CỬA HIỆU SÁCH (ỨNG DỤNG WEB)

Phương pháp thực hiện:

 Hệ thống lại kiến thức về ngôn ngữ lập trình C#, ASP.NET, SQL Server 2005

và phương pháp lập trình hướng đối tượng theo kiến trúc 3 tầng

 Tìm hiểu ngôn ngữ truy vấn NHIBERNATE

 Khảo sát hiện trạng, xác định các yêu cầu của đề tài:

 Yêu cầu chức năng

 Yêu cầu phi chức năng

 Phân tích các yêu cầu

Trang 10

 Hiểu phương pháp lập trình hướng đối tượng theo kiến trúc 3 tầng

 Hiểu được cách thức truy vấn trên nền NHIBERNATE

Kết quả đạt được:

 Viết báo cáo

 Trình bày kết quả đạt được

2 (29/3 – 4/4) 1 Điều chỉnh lại kết quả tuần 1

2 Xác định các actor, mục tiêu của từng actor

3 Xác định các use case trong hệ thống

4 Vẽ sơ đồ use case

5 Mô tả cho các use case quan trọng

6 Xây dựng sườn khóa luận

GIANG BỘI LINH

3 (5/4 – 11/4) 1 Điều chỉnh lại kết quả tuần 2

2 Tìm hiểu Domain model

3 Xây dựng domain model(sơ đồ lớp quan niệm)

4 Bắt đầu viết quyển báo cáo

GIANG BỘI LINH

4 (12/4– 18/4) 1 Điều chỉnh lại kết quả tuần 3 GIANG BỘI

Trang 11

2 Điều chỉnh lại Domain Model và use case

3 Viết quyển báo cáo

LINH

5 (19/4– 25/4) 1 Điều chỉnh lại kết quả tuần 4

2 Thiết kế cơ sở dữ liệu

3 Viết quyển báo cáo

GIANG BỘI LINH

6 (26/4– 2/5) 1 Điều chỉnh lại kết quả tuần 5

2 Thiết kế giao diện

3 Viết quyển báo cáo

GIANG BỘI LINH

7 (3/5–9/5) 1 Điều chỉnh lại kết quả tuần 6

1 Hoàn chỉnh các thiết kế

2 Bổ sung vào quyển báo cáo

GIANG BỘI LINH

8(10/5 – 16/5) 1 Cài đặt cơ sở dữ liệu

2 Lập trình

GIANG BỘI LINH

9 (17/5 – 23/5) 1 Điều chỉnh lại kết quả tuần 8

2 Lập trình

3 Bổ sung kết quả vào quyển báo cáo

GIANG BỘI LINH

10(24/5– 30/5) 1 Điều chỉnh lại kết quả tuần 9

2 Lập trình

3 Bổ sung kết quả vào quyển báo cáo

GIANG BỘI LINH

11(31/5-6/6) 1 Điều chỉnh lại kết quả tuần 10

2 Lập trình

3 Bổ sung kết quả vào quyển báo cáo

GIANG BỘI LINH

12(7/6-13/6) 1 Điều chỉnh kết quả tuần 11

2 Lập trình

3 Bổ sung vào quyển báo cáo

GIANG BỘI LINH

Trang 12

14(21/6- 27/6) 1 Cài đặt thử nghiệm, chỉnh sửa GIANG BỘI

LINH 15(28/6- 4/7) 1 Nộp báo cáo cho Khoa

2 Báo cáo PowerPoint

3 Chuẩn bị bảo vệ

GIANG BỘI LINH

Trang 13

LỜI NÓI ĐẦU Trên thị trường kinh tế cạnh tranh, quảng cáo, thời gian và hiệu quả kinh

doanh là các vấn đề mà doanh nghiệp cần quan tâm.Việc ứng dụng thương mại điện

tử để xậy dựng website bán sách là hình thức khá phổ biến hiện nay.Làm sao để quảng cáo sản phẩm một cách bắt mắt, rộng rãi mà không cần mất nhiều chi phí ? Làm sao để khách hàng có thể tham gia mua sản phẩm ở bất cứ nơi nào mà không cần phải đến trực tiếp cửa hàng ? Làm sao để doanh nghiệp có thể đáp ứng các yêu cầu đặt hàng của khách hàng một cách nhanh chóng và chính xác đó là các mục tiêu của ứng dụng : WEBSITE QUẢN LÝ CỬA HÀNG BÁN SÁCH.Bên cạnh đó, trang web còn trợ một số chức năng sau:

 Quản lý hóa đơn, chi tiết hóa đơn

 Quản lý thông tin khuyến mãi (tiền mặt)

 Thống kê

Trang 14

TÓM TẮT KHÓA LUẬN I-HƯỚNG GIẢI QUYẾT

-Xây dựng ứng dụng theo kiến trúc 3 tầng

-Khảo sát các website bán sách

-Xây dựng sơ đồ Use Case và đặc tả Use Case

-Xây dựng Domain Model

-Cài đặt cơ sở dữ liệu và ứng dụng

II- YÊU CẦU CHỨC NĂNG VÀ PHI CHỨC NĂNG

1.Yêu cầu chức năng:

 Đăng nhập

 Tìm kiếm sách: chi tiết,đơn giản

 Đặt mua hàng

 Thay đổi thông tin cá nhân, mật khẩu

 Đăng ký tài khoản

Trang 15

2.Yêu cầu phi chức năng:

 Chương trình phải đảm bảo đáp ứng các yêu cầu: lưu trữ và khai thác dữ liệu

 Thông tin được cung cấp chính xác

 Giao diện hài hòa

Trang 16

CHƯƠNG 1 TÓM LƯỢC NHIBERNATE

Nội dung:

1.1.Khái niệm Persistence

1.2.Khái niệm NHibernate

Trang 17

1.1-Khái niệm Persistence:

Persistence là nói đến khả năng một đối tượng duy trì sự tồn tại sau thời gian sống của chương trình tạo ra nó Nếu không có khả năng này, dữ liệu chỉ tồn tại trong bộ nhớ và sẽ mất đi khi bộ nhớ tắt hoặc máy tính shutdown

Có một vài loại persistence, ví dụ: khi bạn hiệu chỉnh một file source thì file đó sẽ được persist xuống đĩa để lần sau rút trích và sử dụng Các file được lưu trên đĩa là hình thức phổ biến nhất của persistence Trong ứng dụng, ví dụ như shopping cart thì persist dữ liệu trong một CSDL quan hệ

CSDL quan hệ là một sự chọn lựa phổ biến để lưu dữ liệu vì dữ liệu dễ dàng được tạo và truy cập bằng SQL Mô hình được sử dụng bởi CSDL quan hệ được gọi

là mô hình quan hệ, biểu diễn dữ liệu dưới dạng bảng hai chiều Các table có thể liên quan nhau thông qua việc sử dụng khóa chính và khóa ngoại Khóa chính đảm bảo không có hai record trong bảng có cùng giá trị Khóa ngoại tham chiếu đến khóa chính được lưu trong một bảng khác

CSDL quan hệ được thiết kế để quản lý dữ liệu theo mô hình quan hệ Tuy nhiên khi làm việc với các ứng dụng hướng đối tượng, bạn có thể gặp một số vấn đề khi bạn cố gắng persist các đối tượng vào trong mô hình quan hệ Với sự khác biệt của hai mô hình, làm thế nào để chúng làm việc được với nhau Để giải quyết vấn

đề này object/relational mapping (ORM) ra đời

1.2-Khái niệm Nhibernate:

Nhibernate là một giải pháp Object-relational mapping (ORM) cho nền NET, được hiểu như là kỹ thuật ánh xạ từ mô hình đối tượng với các table trong cơ

sở dữ liệu quan hệ Trong đó các đối tượng ánh xạ với các bảng và quan hệ trong database sẽ được ánh xạ với sự ràng buộc liên quan trong đối tượng và làm giảm công việc lập trình của người lập trình viên, 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

Trang 18

Chức năng chính của Nhibernate là ánh xạ những lớp đối tượng xuống cơ sở

dữ liệu quan hệ Ngoài ra Nhibernate còn cho phép người sử dụng có thể thực hiện những câu truy vấn xuống cơ sở dữ liệu thông qua các đối tượng

Hình 1 - Ứng dụng NET với ADO.NET

Hình 2 - Ứng dụng NET với NHibernate

1.3-Lịch sử phát triển Nhibernate:

Nhibernate là biến thể từ Hibernate bên Java, được bắt đầu bởi Tom Barrett

và hiện nay là một thư viện mã nguồn mở

Phiên bản 1.0 gồm các tính năng của Hibernate 2.1 và một số tính năng của Hibernate 3.0

Nhibernate 1.2.1 phát hành vào tháng 11-2007, được giới thiệu với nhiều tính năng của Hibernate 3.0 hỗ trợ cho NET 2.0

Nhibernate 2.0 được phát hành vào 8-2008 Nó tương đương với các tính năng của phiên bản Hibernate 3.2 Với phiên bản này, Nhibernate không hỗ trợ cho NET 1.1

Trang 19

Nhibernate 2.1 hiện đang được phát triển và sẽ được phát hành vào giữa năm

2009

Nhibernate 3.0 sẽ là phiên bản đầu tiên hỗ trợ NET 3.5

1.4-Các đặc tính

Hỗ trợ trên nhiều hệ quản trị cơ sở dữ liệu khác nhau

Ánh xạ các đối tượng quan hệ xuống cơ sở dữ liệu : Sử dụng file xml để mô

tả cách thức mapping trực tiếp từ đối tượng tương ứng với các bảng trong cơ sở dữ liệu

Hỗ trợ tốt các kiểu quan hệ như one-to-many, many-to-many giữa các đối tượng, quản lý các mối kết hợp, kế thừa giữa các đối tượng Ngoài ra, Nhibernate còn hỗ trợ các kiểu dữ liệu người dùng, truy xuất dữ liệu theo nhóm(Collection), danh sách(List)…

Hỗ trợ ngôn ngữ truy vấn đối tượng (HQL - Hibernate Query Language) cho phép người dùng thực hiện các câu truy vấn tương tự SQL.Ngoài ra, Nhibernate còn

hỗ trợ Criteria API thực hiện truy vấn theo cách của người lập trình hướng đối tượng

Trang 20

Được dùng để cấu hình Nhibernate, các ứng dụng sử dụng đối tượng Configuration

để chỉ rõ vị trí của các tài liệu ánh xạ

ITransaction

Trang 21

Có tác dụng nhóm nhiều thao tác vào trong một đơn vị làm việc Nếu bất kỳ thao tác nào thất bại thì tất cả các thao tác trước đều bị roll back và đơn vị làm việc đó sẽ dừng lại

IQuery và ICriteria

Hỗ trợ đa dạng hình thức truy vấn dữ liệu khác nhau Các câu truy vấn được viết bằng HQL hoặc SQL Ngoài ra, chúng còn cho phép xây dựng các câu truy vấn động, điều khiển tham số đầu vào, giới hạn số lượng kết quả trả về

1.6-Các bước xây dựng ứng dụng NHibernate:

 Tạo bảng trong cơ sở dữ liệu

 Tạo các lớp đối tượng cần persist

 Tạo file ánh xạ có đuôi là hbm.xml cung cấp các thông tin để NHibernate persist các thuộc tính trong đối tượng với các trường trong bảng dữ liệu tương ứng, đồng thời chọn thuộc tính Build Action của file là EmBedded Resource

 Tạo file cấu hình có đuôi là config để Nhibernate kết nối với database

 Xây dựng các câu truy vấn và sử dụng các phương thức Nhibernate hỗ trợ để truy vấn trên các đối tượng

Trang 22

private string _machude;

private string _tenchude;

private bool _xoa;

public string Id

{

get { return _machude; }

set { _machude = value; }

}

public string TenChuDe

{

get { return _tenchude; }

set { _tenchude = value; }

}

public bool Xoa

{

get { return _xoa; }

set { _xoa = value; }

<class name="DTO.ChuDe,DTO" table="Chu_De" lazy="false">

<id name="Id" column="MaChuDe">

<generator class="assigned" />

</id>

<property name="TenChuDe" column="TenChuDe" />

<property name="Xoa" column="Xoa" />

Trang 23

NHibernate.Connection.DriverConnectionProvider</property>

<propertyname="connection.driver_class">

NHibernate.Driver.SqlClientDriver</property>

<property name="connection.connection_string">Data Source=GIANGBOILINH\SQLEXPRESS;Initial Catalog=BookDB;Integrated Security=True</property>

Bước 5 : Truy vấn với Nhibernate

Using namepace Nhibernate

 Đối tượng Configuration sẽ tìm kiếm các file hbm.xml trong assembly

Tạo đối tượng session

Cho phép persist các đối tượng, truy vấn các đối tượng persistent

ITransaction quản lý các Transaction trong Nhibernate

Sử dụng SessionFactory để tạo thể hiện của Session:

ISessionFactory factory = fg.BuildSessionFactory();

ISession session = factory.OpenSession();

ITransaction transaction = session.BeginTransaction();

ChuDe chude = new ChuDe();

Trang 24

Qui ướ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

<?xml version="1.0"?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true">

Trang 25

<class name="Event" table="events">

<id name="id" column="uid" type="long" unsaved-value="null">

<generator class="native"/>

</id>

<property name="name" type="string" length="100"/>

<property name="startDate" column="start_date" type="date"/>

<property name="duration" type="integer"/>

<many-to-one name="location" column="location_id" class="Location"/> <set name="speakers">

File ánh xạ được bắt đầu bằng thẻ hibernate-mapping

Thuộc tính set khai báo tên của các lớp persistent như: Speaker và Attendee

Thẻ class đị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

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 Nhibernate:

Trang 26

 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 đó

Thẻ property

<property name="name" type="string" length="100"/>

<property name="startDate" column="start_date" type="date"/>

<property name="duration" type="integer"/>

Mỗi thẻ property này tương ứng với một thuộc tính trong đối tượng Event

Thuộc tính name là tên thuộc tính

Thuộc tính type xác định kiểu dữ liệu của thuộc tính

Column là tên cột tương ứng trong database

Trang 27

<?xml version="1.0"?>

<hibernate-mapping package="com.manning.hq.ch03">

<class name="Location" table="locations">

<id name="id" column="uid" type="long">

<generator class="native"/>

</id>

<property name="name" type="string"/>

<property name="address" type="string"/>

</class>

</hibernate-mapping>

Đối với Event, element many-to-one định nghĩa tham chiếu giữa các đối tượng persistent Ánh xạ mối quan hệ many-to-one như sau:

<many-to-one name="location" column="location_id" class="Location"/>

Thuộc tính name cung cấp tên của thuộc tính trong đối tượng và thuộc tính column xác định column được sử dụng để lưu khóa ngoại đến bảng location Thuộc tính class cung cấp tên của lớp persistent cần quan hệ

Một câu hỏi phổ biến được đặt ra là: làm thế nào để tạo mối quan hệ many-to-one lazy - nghĩa là đối tượng được kết hợp với nó sẽ không được rút trích khi đối tượng cha được rút trích Các giải quyết là sử dụng proxied objects

Proxy:

Object proxy là cách tránh rút trích một đối tượng cho đến khi cần đến nó Định nghĩa nó bằng 2 cách:

1 Thêm thuộc tính proxy vào thẻ class:

<class name="Location" proxy="com.manning.hq.ch03.Location" >

Trang 28

</class>

2.Sử dụng thuộc tính lazy = "true" là cách ngắn nhất để định nghĩa lớp

persistent như proxy:

<class name="Location" lazy="true" > </class>

Cách sử dụng thể hiện proxied Location:

Session session = factory.openSession();

Event ev = (Event) session.load(Event.class, myEventId);

Location loc = ev.getLocation();

String name = loc.getName();

session.close();

Trả về thể hiện của Location là proxy Nhibernate lấy thể hiện Location khi

getName() được gọi

Trang 29

public class Event {

private Set speakers;

Cascade:

Các thao tác lan truyền theo tầng trên một bảng (như delete) đến các bảng kết hợp Giả sử, khi delete Event, bạn cũng muốn delete các thể hiện Speaker kết hợp với Event Thay vì code trong ứng dụng sẽ thực hiện, Nhibernate có thể quản lý nó thay cho bạn

Các loại cascade: all, save-update, delete, delete-orphan

Element cascade được thêm vào many-to-one hoặc element collection Ví dụ cấu hình sau sẽ hướng dẫn Hibernate delete các Speaker con khi Event cha bị delete:

<set name="speakers" cascade="delete">

<key column="event_id"/>

Trang 30

<one-to-many class="Speaker"/>

</set>

Duyệt các đối tượng kết hợp:

Bạn có thể rút trích các đối tượng kết hợp sử dụng outer join hoặc bằng câu lệnh SELECT Thuộc tính fetch cho phép bạn xác định các phương thức để sử dụng:

<many-to-one name="location" class="Location" fetch="join"/>

Khi thể hiện Event được load thì đối tượng Location kết hợp cũng sẽ được load bằng outer join Nếu muốn sử dụng câu lệnh select thì sẽ cài đặt như sau:

<many-to-one name="location" class="Location" fetch="select"/>

Association:

Giả sử trong ứng dụng của bạn, mỗi Event được tổ chức ở chỉ một Location Cách

mà biểu diễn điều này trong net là đối tượng Event có một trường Location Khi bạn rút trích Event, bạn muốn cả Location nữa Vì thế bạn phải liên kết Event và Location với nhau sử dụng quan hệ many-to-one

Định nghĩa các lớp Event và Location như sau:

public class Event {

private Long id;

private int duration;

private String name;

private DateTime startDate;

private Location location;

Trang 31

public Event() { }

public Event(String name) {

this.name = name;

}

public Long getId() { return id; }

public void setId(Long id) {

this.id = id;

}

public String getName() { return name; }

public void setName(String name) {

this.name = name;

}

public DateTime getStartDate() { return startDate; }

public void setStartDate(DateTime startDate) {

this.startDate = startDate;

}

public int getDuration() { return duration; }

public void setDuration(int duration) {

this.duration = duration;

}

public Location getLocation() { return location; }

public void setLocation(Location location) {

this.location = location;

Trang 32

}

}

public class Location {

private Long id;

private String name;

private String address;

public Location() { }

public Location(String name) {

this.name = name;

}

public Long getId() { return id; }

public void setId(Long id) {

this.id = id;

}

public String getName() { return name; }

public void setName(String name) {

this.name = name;

}

public String getAddress() { return address; }

public void setAddress(String address) {

Trang 33

Mỗi lớp này sẽ cần một file ánh xạ tương ứng, trong trường hợp này là

Event.hbm.xml và Location.hbm.xml để định nghĩa các trường persistent và mối quan hệ giữa hai file này Đặt các file này cùng thư mục với Event.cs và

Location.cs Sau đây là hai file ánh xạ này:

Location.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">

<class name="Location" table="locations">

<id name="id" column="uid" type="long">

<generator class="native"/>

</id>

<property name="name" type="string"/>

<property name="address" type="string"/>

<class name="Event" table="events">

<id name="id" column="uid" type="long">

<generator class="native"/>

</id>

<property name="name" type="string"/>

<property name="startDate" column="start_date"

type="date"/>

<property name="duration" type="integer"/>

<many-to-one name="location" column="location_id" class="Location" />

Trang 34

Chúng ta có một trường address trong Location Do thiết kế không tốt nên chúng ta

sẽ chia nhỏ địa chỉ thành 4 cột: street, city, state và zip code Và khi đó đối tượng Location sẽ như thế này:

public class Location{

private Long id;

private String name;

private String streetAddress;

private String city;

private String state;

private String zipCode;

// getters and setter omitted

Trang 35

private Long id;

private String name;

private Address address = new Address();

// Other getter/setters omitted

public Address getAddress() { return address; }

public void setAddress(Address address) {

<class name="Location" table="locations">

<id name="id" column="uid" type="long">

<generator class="native"/>

</id>

<property name="name" type="string"/>

<component name="address" class="Address" >

<property name="streetAddress"

column="street_address" type="string"/>

<property name="city" type="string"/>

<property name="state" type="string"/>

Trang 36

Bây giờ bạn có thể chèn dữ liệu vào đối tượng Location như sau:

Location location = new Location();

location.setName("Hilton Convention Center");

location.getAddress().setStreetAddress("950 North Stafford St.");

Trang 37

</class>

</hibernate-mapping>

Lớp Event tương ứng như sau:

public class Event {

private Set speakers;

private Set attendees;

public void setSpeakers(Set speakers) {

Trang 38

Quan hệ nhiều-nhiều:

Quan hệ nhiều-nhiều yêu cầu một bảng collection lưu tập hợp các đối tượng tham chiếu Giả sử Attendees có thể tham dự nhiều hơn một Event Ánh xạ many-to-many cho tập hợp các Attendees như sau:

<set name="attendees" table="event_attendees">

Rút trích lazy collection (cụ thể là attendees) như sau:

Session session = factory.openSession();

Event event = session.get(Event.class, eventId);

Set attendees = event.getAttendees();

session.close();

Persistent collection được lazy mặc định bởi Hibernate 3 Để làm cho collection không lazy, bạn phải khai báo rõ ràng như sau: lazy="false" trong mapping file:

Trang 39

<set name="attendees" lazy="false">

<key column="event_id"/>

<one-to-many class="Attendee"/>

</set>

Ánh xạ quan hệ hai chiều:

Lớp Event cho phép bạn định vị từ thể hiện Event cha đến thể hiện Attendee con Tuy nhiên giả sử bạn muốn tại mối quan hệ hai chiều, cho phép một Attendee định

vị đến Event cha của nó Để thực hiện được điều này, đầu tiên bạn phải xác định thuộc tính Event trong lớp Attendee và cung cấp định nghĩa many-to-one trong file ánh xạ Attendee Kế tiếp định nghĩa inverse trong Event - thiết lập thuộc tính

inverse="true" để thông báo cho Nhibernate runtime mối quan hệ hai chiều này

Các bước được thực hiện như sau:

public class Attendee {

private Event event;

Trang 40

Thêm thuộc tính inverse="true" trong file ánh xạ của Event như sau:

<set name="attendees" inverse="true">

<key column="event_id"/>

<one-to-many class="Attendee"/>

</set>

Show SQL:

Khi debug, bạn cần xem SQL được phát sinh Thiết lập thuộc tính show_sql là true

để phát sinh ra SQL trên console

Thiết lập thuộc tính trong file config

<property name="show_sql">true</property>

Joins:

Có 4 loại:

 left join: lấy tất cả các thể hiện bên trái của mệnh đề join

 right join: tất cả các thể hiện bên phải của mệnh đề join

 full join: trả về các đối tượng hai bên của mệnh đề join

Ngày đăng: 05/05/2015, 15:43

HÌNH ẢNH LIÊN QUAN

Hình 1 - Ứng dụng .NET với ADO.NET - Khóa luận tốt nghiệp Sử dụng NHIBERNATE (OQL - OBJECT QUERY LANGUAGE) để thực hiện chương trình quản lý việc mua bán sách cho một cửa hiệu sách
Hình 1 Ứng dụng .NET với ADO.NET (Trang 18)
Hình 3 – Sơ đồ kiến trúc Nhibernate. - Khóa luận tốt nghiệp Sử dụng NHIBERNATE (OQL - OBJECT QUERY LANGUAGE) để thực hiện chương trình quản lý việc mua bán sách cho một cửa hiệu sách
Hình 3 – Sơ đồ kiến trúc Nhibernate (Trang 20)
Hình 5 – Sơ đồ Use Case khách hàng. - Khóa luận tốt nghiệp Sử dụng NHIBERNATE (OQL - OBJECT QUERY LANGUAGE) để thực hiện chương trình quản lý việc mua bán sách cho một cửa hiệu sách
Hình 5 – Sơ đồ Use Case khách hàng (Trang 45)
Hình 4 – Sơ đồ Use Case người dùng - Khóa luận tốt nghiệp Sử dụng NHIBERNATE (OQL - OBJECT QUERY LANGUAGE) để thực hiện chương trình quản lý việc mua bán sách cho một cửa hiệu sách
Hình 4 – Sơ đồ Use Case người dùng (Trang 45)
Hình 6 – Sơ đồ Use Case nhân viên quản lý sách. - Khóa luận tốt nghiệp Sử dụng NHIBERNATE (OQL - OBJECT QUERY LANGUAGE) để thực hiện chương trình quản lý việc mua bán sách cho một cửa hiệu sách
Hình 6 – Sơ đồ Use Case nhân viên quản lý sách (Trang 46)
Hình 7 – Sơ đồ Use Case nhân viên quản lý đơn đặt hàng. - Khóa luận tốt nghiệp Sử dụng NHIBERNATE (OQL - OBJECT QUERY LANGUAGE) để thực hiện chương trình quản lý việc mua bán sách cho một cửa hiệu sách
Hình 7 – Sơ đồ Use Case nhân viên quản lý đơn đặt hàng (Trang 46)
Hình 8 – Sơ đồ Use Case admin. - Khóa luận tốt nghiệp Sử dụng NHIBERNATE (OQL - OBJECT QUERY LANGUAGE) để thực hiện chương trình quản lý việc mua bán sách cho một cửa hiệu sách
Hình 8 – Sơ đồ Use Case admin (Trang 47)
Hình 9- Sơ đồ Domain Model. - Khóa luận tốt nghiệp Sử dụng NHIBERNATE (OQL - OBJECT QUERY LANGUAGE) để thực hiện chương trình quản lý việc mua bán sách cho một cửa hiệu sách
Hình 9 Sơ đồ Domain Model (Trang 57)
Hình 10 – Sơ đồ cơ sở dữ liệu quan hệ - Khóa luận tốt nghiệp Sử dụng NHIBERNATE (OQL - OBJECT QUERY LANGUAGE) để thực hiện chương trình quản lý việc mua bán sách cho một cửa hiệu sách
Hình 10 – Sơ đồ cơ sở dữ liệu quan hệ (Trang 64)
Hình 11 – Màn hình trang chủ - Khóa luận tốt nghiệp Sử dụng NHIBERNATE (OQL - OBJECT QUERY LANGUAGE) để thực hiện chương trình quản lý việc mua bán sách cho một cửa hiệu sách
Hình 11 – Màn hình trang chủ (Trang 74)
Hình 12 – Màn hình trang quản lý chủ đề - Khóa luận tốt nghiệp Sử dụng NHIBERNATE (OQL - OBJECT QUERY LANGUAGE) để thực hiện chương trình quản lý việc mua bán sách cho một cửa hiệu sách
Hình 12 – Màn hình trang quản lý chủ đề (Trang 74)
Hình 14 – Màn hình trang đăng ký - Khóa luận tốt nghiệp Sử dụng NHIBERNATE (OQL - OBJECT QUERY LANGUAGE) để thực hiện chương trình quản lý việc mua bán sách cho một cửa hiệu sách
Hình 14 – Màn hình trang đăng ký (Trang 75)
Hình 13 – Màn hình trang thêm sách - Khóa luận tốt nghiệp Sử dụng NHIBERNATE (OQL - OBJECT QUERY LANGUAGE) để thực hiện chương trình quản lý việc mua bán sách cho một cửa hiệu sách
Hình 13 – Màn hình trang thêm sách (Trang 75)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w