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

Xây dựng ứng dụng hỗ trợ quản lý lịch của giảng viên cho cán bộ phụ trách bộ môn khoa CN ĐTTT

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 (2.73 MB, 61 trang )

LỜI CẢM ƠN
Trước hết em xin bày tỏ lòng cảm ơn sâu sắc đến Cô giáo Ngô Thị Vinh đã
tận tình chỉ bảo em để em hoàn thành đồ án tốt nghiệp này.
Em xin chân thành cảm ơn các thầy giáo, cô giáo trường Đại học Công nghệ
thông tin và truyền thông – Đại học Thái Nguyên đã cho em những kiến thức, kinh
nghiệm quý báu trong suốt thời gian học tập tại trường.
Đồng thời em xin chân thành cảm ơn bạn bè đã động viên khích lệ em rất
nhiều trong quá trình em làm đồ án tốt nghiệp này.
Mặc dù đã cố gắng hết sức, nhưng do chưa có kinh nghiệm nên đồ án của em
không thể tránh khỏi những thiếu sót nhất định. Em rất mong nhận được những ý
kiến đóng góp quý báu của các thầy cô giáo và bạn bè để em có thể hoàn thiện đề
tài này.
Em xin chân thành cảm ơn!
Thái Nguyên, tháng 06 năm 2016
Sinh viên

Nguyễn Thị Thảo

i


LỜI CAM ĐOAN
Để hoàn thành đồ án tốt nghiệp đúng thời gian quy định và đáp ứng được yêu
cầu đề ra, em đã cố gắng tìm hiểu, học hỏi, tích lũy kiến thức từ trường học cũng
như từ quá trình tìm đọc tài liệu khi làm đồ án tốt nghiệp. Em có tham khảo một số
tài liệu đã nêu trong phần “Tài liệu tham khảo” không sao chép nội dung từ bất kỳ
đồ án nào khác. Toàn bộ đồ án do bản thân nghiên cứu, xây dựng dưới sự hướng
dẫn của cô Ths. Ngô Thị Vinh.
Em xin cam đoan những lời khai trên là đúng, mọi thông tin sai lệch em xin
hoàn toàn chịu trách nhiệm trước Hội đồng.


Sinh viên

Nguyễn Thị Thảo

ii


MỤC LỤC
LỜI CẢM ƠN ......................................................................................................... i
LỜI CAM ĐOAN................................................................................................... ii
MỤC LỤC............................................................................................................. iii
DANH MỤC HÌNH ẢNH ..................................................................................... iv
LỜI NÓI ĐẦU.........................................................................................................1
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT.........................................................................2
1.1. Cơ sở dữ liệu MySQL ...................................................................................2
1.1.1. Giới thiệu cơ sở dữ liệu MySQL ............................................................2
1.1.2. Mục đích sử dụng cơ sở dữ liệu..............................................................3
1.1.3. Các kiểu dữ liệu trong cơ sở dữ liệu MySQL..........................................4
1.1.4. Các thao tác cập nhật dữ liệu..................................................................7
1.1.5. Các hàm thông dụng trong MySQL........................................................7
1.2. Tổng quan công nghệ Hibernate framework..................................................8
1.2.1. Giới thiệu về Hibernate framework ........................................................8
1.2.2. Kiến trúc Hibernate ..............................................................................10
1.3. Tổng quan về ngôn ngữ lập trình Java.........................................................12
1.3.1. Lịch sử phát triển của ngôn ngữ lập trình Java......................................12
1.3.2. Một số đặc điểm nổi bật của ngôn ngữ lập trình Java ...........................12
1.3.3. Hướng đối tượng trong Java .................................................................14
CHƯƠNG 2: PHÂN TÍCH, THIẾT KẾ BÀI TOÁN .............................................20
2.1. Bài toán quản lý lịch của giảng viên............................................................20
2.2. Phân tích bài toán........................................................................................20

2.2.1. Biểu đồ dữ liệu mức khung cảnh ..........................................................20
2.2.2. Biểu đồ dữ liệu mức đỉnh .....................................................................21
2.2.3. Thiết kế cơ sở dữ liệu ...........................................................................22
2.3. Thiết kế module chương trình .....................................................................23
CHƯƠNG 3: KẾT QUẢ THỰC NGHIỆM ...........................................................40
KẾT LUẬN ...........................................................................................................54
TÀI LIỆU THAM KHẢO .....................................................................................55

iii


DANH MỤC HÌNH ẢNH
Hình 1.1: Mô hình ORM/Hibernate .........................................................................9
Hình 1.2: Kiến trúc tổng quát của Hibernate ..........................................................10
Hình 1.3: Kiến trúc của Hibernate..........................................................................11
Hình 2.1: Biểu đồ dữ liệu mức khung cảnh ............................................................20
Hình 2.2: Biểu đồ dữ liệu mức đỉnh .......................................................................21
Hình 2.3: Sơ đồ lớp dữ liệu....................................................................................22
Hình 2.4: Default package .....................................................................................23
Hình 2.5: Module data ...........................................................................................23
Hình 2.6: Module db..............................................................................................28
Hình 2.7: Module main..........................................................................................31
Hình 2.8: Module model ........................................................................................35
Hình 3.1. Bảng kết quả 1 .......................................................................................40
Bảng 3.2: Bảng kết quả 2.......................................................................................40
Bảng 3.3: Bảng kết quả 3.......................................................................................41
Bảng 3.4: Bảng kết quả 4.......................................................................................41
Bảng 3.5: Bảng kết quả 5.......................................................................................42
Bảng 3.6: Bảng kết quả 6.......................................................................................42
Bảng 3.7: Bảng kết quả 7.......................................................................................43

Bảng 3.8: Bảng kết quả 8.......................................................................................43
Bảng 3.9: Bảng kết quả 9.......................................................................................44
Bảng 3.10: Bảng kết quả 10 ...................................................................................44
Bảng 3.11: Bảng kết quả 11 ...................................................................................45
Bảng 3.12: Bảng kết quả 12 ...................................................................................45
Bảng 3.13: Bảng kết quả 13 ...................................................................................46
Bảng 3.14: Bảng kết quả 14 ...................................................................................46
Bảng 3.15: Bảng kết quả 15 ...................................................................................47
Bảng 3.16: Bảng kết quả 16 ...................................................................................47
Bảng 3.17: Bảng kết quả 17 ...................................................................................48
Bảng 3.18: Bảng kết quả 18 ...................................................................................48
Bảng 3.19: Bảng kết quả 19 ...................................................................................49
iv


Bảng 3.20: Bảng kết quả 20 ...................................................................................49
Bảng 3.21: Bảng kết quả 21 ...................................................................................50
Bảng 3.22: Bảng kết quả 22 ...................................................................................50
Bảng 3.23: Bảng kết quả 23 ...................................................................................51
Bảng 3.24: Bảng kết quả 24 ...................................................................................51
Bảng 3.25: Bảng kết quả 25 ...................................................................................52
Bảng 3.26: Bảng kết quả 26 ...................................................................................52
Bảng 3.27: Bảng kết quả 27 ...................................................................................53
Bảng 3.28: Bảng kết quả 28 ...................................................................................53

v


LỜI NÓI ĐẦU
Với sự phát triển nhảy vọt của công nghệ thông tin hiện nay, Internet ngày

càng giữ vai trò quan trọng trong các lĩnh vực khoa học kĩ thuật và đời sống.
Internet, nói một cách đơn giản, Internet là một tập hợp máy tính nối kết với nhau,
là một mạng máy tính toàn cầu mà bất kì ai cũng có thể kết nối bằng máy PC của
họ. Với mạng Internet, tin học thật sự tạo nên một cuộc cách mạng trao đổi thông
tin trong mọi lĩnh vực văn hóa, xã hội, chính trị, kinh tế...
Trong thời đại ngày nay, thời đại mà ngôn ngữ java là ngôn ngữ lập trình
mạnh và được sử dụng đông đảo trong phát triển phần mềm, các trang web, game
hay ứng dụng trên các thiết bị di động thì việc có một chương trình để quản lý lịch
của giảng viên sử dụng ngôn ngữ lập trình java không còn khó khăn nữa. Thông qua
chương trình có thể dễ dàng quản lý lịch của giảng viên một cách nhanh chóng và
hiệu quả.
Với công nghệ Mysql để lưu cơ sở dữ liệu, công nghệ Hibernate framework
giúp cho java kết nối với Mysql, sẽ giúp xem lịch của giảng viên một cách dễ dàng
nhờ các công cụ hỗ trợ và ngôn ngữ lập trình java. Sự ra đời của các ngôn ngữ lập
trình cho phép xây dựng được chương trình đáp ứng được các yêu cầu của người sử
dụng.
Với lí do đó, được sự hướng dẫn và giúp đỡ của cô Th.S Ngô Thị Vinh, em
đã chọn đề tài “Xây dựng ứng dụng hỗ trợ quản lý lịch của giảng viên cho cán
bộ phụ trách bộ môn Khoa CN ĐT&TT” làm đề tài cho đồ án tốt nghiệp của
mình.
Trong quá trình thực hiện đồ án này em đã nhận được sự giúp đỡ chỉ bảo tận
tình của các thầy, cô giáo, Em xin chân thành cảm ơn cô Th.S Ngô Thị Vinh đã
hướng dẫn trong quá trình làm đồ án.

1


CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1. Cơ sở dữ liệu MySQL
1.1.1. Giới thiệu cơ sở dữ liệu MySQL

MySQL là hệ quản trị cơ sở dữ liệu tự do nguồn mở phổ biến nhất thế giới và
được các nhà phát triển rất ưa chuộng trong quá trình phát triển ứng dụng.
MySQL là cơ sở dữ liệu tốc độ cao, ổn định và dễ sử dụng, có tính khả
chuyển, hoạt động trên nhiều hệ điều hành cung cấp một hệ thống lớn các hàm tiện
ích rất mạnh. Với tốc độ và tính bảo mật cao, MySQL rất thích hợp cho các ứng
dụng có truy cập CSDL trên internet.
MySQL miễn phí hoàn toàn cho nên có thể tải về MySQL từ trang chủ. Nó
có nhiều phiên bản cho các hệ điều hành khác nhau: phiên bản Win32 cho các hệ
điều hành dòng Windows, Linux, Mac OS X, Unix, FreeBSD, NetBSD, SGI Irix,
Novell NetWare, Solaris, SunOS,...
MySQL là một trong những ví dụ rất cơ bản về Hệ Quản trị Cơ sở dữ liệu
quan hệ sử dụng Ngôn ngữ truy vấn có cấu trúc (SQL).
MySQL được sử dụng cho việc bổ trợ PHP, Perl, và nhiều ngôn ngữ khác, nó
làm nơi lưu trữ những thông tin trên các trang web viết bằng PHP hay Perl,..
Đặc điểm của MySQL:
 MySQL

là một phần mềm quản trị CSDL dạng server-based.

 MySQL

quản lý dữ liệu thông qua các CSDL, mỗi CSDL có thể có nhiều

bảng quan hệ chứa dữ liệu.
 MySQL

có cơ chế phân quyền người sử dụng riêng, mỗi người dùng có thể

được quản lý một hoặc nhiều CSDL khác nhau, mỗi người dùng có một tên truy cập
(user name) và mật khẩu tương ứng để truy xuất đến CSDL.

 MySQL
 Người

được sử dụng cho các ứng dụng web.

dùng có thể sử dụng giao diện đồ họa hay dùng dòng lệnh để thực

hiện các thao tác trên CSDL.
 Khi

truy vấn tới CSDL MySQL phỉ cung cấp tên truy cập và mật khẩu của

tài khoản có quyền sử dụng CSDL đó. Nếu không sẽ không làm gì được cả giống
như quyền chứng thực người dùng trong SQL Server vậy.

2


1.1.2. Mục đích sử dụng cơ sở dữ liệu
Mục đích sử dụng cơ sở dữ liệu bao gồm các chức năng như: chức năng lưu
trữ (storage), chức năng truy cập (accessibility), chức năng tổ chức (organization)
và chức năng xử lí (manipulation).
Chức năng lưu trữ:
Lưu trữ trên đĩa và có thể chuyển đổi dữ liệu từ cơ sở dữ liệu này sang cơ sở
dữ liệu khác, nếu bạn sử dụng cho quy mô nhỏ, bạn có thể chọn cơ sở dữ liệu nhỏ
như: Microsoft Exel, Microsoft Access, MySQL, Microsoft Visual FoxPro… Nếu
ứng dụng có quy mô lớn, bạn có thể chọn cơ sở dữ liệu có quy mô lớn như: Oracle,
SQL Server…
Chức năng truy cập:
Truy cập dữ liệu phụ thuộc vào mục đích và yêu cầu của người sử dụng, ở

mức độ mang tính cục bộ, truy cập cơ sở dữ liệu ngay trong cơ sở dữ liệu với nhau,
nhằm trao đổi hay xử lí dữ liệu ngay bên trong chính nó, nhưng do mục đích và yêu
cầu người dùng vượt ra ngoài cơ sở dữ liệu, nên cần có các phương thức truy cập dữ
liệu giữa các cơ sở dữ liệu với nhau như: Microsoft Access với SQL Server, hay
SQL Server và cơ sở dữ liệu Oracle....
Chức năng tổ chức:
Tổ chức cơ sở dữ liệu phụ thuộc vào mô hình cơ sở dữ liệu, phân tích và
thiết kế cơ sở dữ liệu tức là tổ chức cơ sở dữ liệu phụ thuộc vào đặc điểm riêng của
từng ứng dụng. Tuy nhiên khi tổ chức cơ sở dữ liệu cần phải tuân theo một số tiêu
chuẩn của hệ thống cơ sở dữ liệu nhằm tăng tính tối ưu khi truy cập và xử lí.
Chức năng xử lí:
Tùy vào nhu cầu tính toán và truy vấn cơ sở dữ liệu với các mục đích khác
nhau, cần phải sử dụng các phát biểu truy vấn cùng các phép toán, phát biểu của cơ
sở dữ liệu để xuất ra kết quả như yêu cầu. Để thao tác hay xử lí dữ liệu bên trong
chính cơ sở dữ liệu ta sử dụng các ngôn ngữ lập trình như: PHP, C++, Java, Visual
Basic…

3


1.1.3. Các kiểu dữ liệu trong cơ sở dữ liệu MySQL
1.1.3.1. Loại dữ liệu numeric
Kiểu dữ liệu số nguyên
Kiểu dữ liệu

Miền giá trị

Số bytes

Mô tả


Tinyint

-127 đến 128 hay 0 đến

1

Số nguyên rất nhỏ

2

Số nguyên nhỏ

3

Số nguyên vừa

4

Số nguyên

8

Số nguyên lớn

255
Smallint

-32768 đến 32767 hay
0 đến 65535


Mediumint

-8388608 đến 838860
hay 0.. 16777215
-231 đến 231-1 hay 0

Int

đến 232-1
-263 đến 263-1 hay 0

Bigint

đến 264-1

Kiểu dữ liệu số chấm động
Kiểu dữ liệu
Float

Miền giá trị

Số bytes

phụ thuộc số thập phân

4

Mô tả
Số thập phân dạng

Single hay Double

Float(M, D)

Double(M, D)

±1. 175494351E-38

2

Số thập phân dạng

±3. 40282346638

Single

±1. 7976931348623157308 8

Số thập phân dạng

±2. 2250738585072014E-

Double

308
Float(M[, D])

Số chấm động lưu
dưới dạng char


4


1.1.3.2. Loại dữ liệu kiểu Date and Time
Kiểu dữ liệu Date and Time cho phép bạn nhập dữ liệu dưới dạng chuỗi ngày
tháng hay dạng số.
Dữ liệu kiểu số nguyên
Kiểu dữ liệu

Miền giá trị

Mô tả

Date

1000-01-01

Date trình bày dưới dạng
yyyy-mm-dd.

Time

DateTime

00:00:00

Time trình bày dưới dạng

23:59:59


hh:mm:ss.

1000-01-01
00:00:00

Date và Time trình bày dưới
dạng yyyy-mm-dd hh:mm:ss.

9999-12-31
23:59:59
TimeStamp[(M)]

1970-01-01
00:00:00

Year[(2|4)]

TimeStamp trình bày dưới
dạng yyyy-mm-dd hh:mm:ss.

1970-2069

Year trình bày dưới dạng 2 số

1901-2155

hay 4 số

Trình bày đại diện của TimeStamp
Loại hiển thị

--------------------------------------------------------------TimeStamp

YYYYMMDDHHMMSS

TimeStamp (14)

YYYYMMDDHHMMSS

TimeStamp (12)

YYMMDDHHMMSS

TimeStamp (10)

YYMMDDHHMM

TimeStamp (8)

YYYYMMDD

TimeStamp (6)

YYMMDD

TimeStamp (4)

YYMM

TimeStamp (2)


YY

----------------------------------------------------------------(Y=năm, M=tháng, D=ngày)
5


1.1.3.3. Loại dữ liệu String
Kiểu dữ liệu String chia làm 3 loại: loại thứ nhất như char (chiều dài cố định)
và varchar (chiều dài biến thiên); loại thứ hai là Text hay Blob, Text cho phép lưu
chuỗi rất lớn, Blob cho phép lưu đối tượng nhị phân; loại thứ ba là Enum và Set.
Kiểu dữ liệu String
Kiểu dữ

Miền giá

liệu

trị

Char

1-255

Mô tả
Chiều dài của chuỗi lớn nhất 255 ký tự.

characters
Varchar

1-255


Chiều dài của chuỗi lớn nhất 255 ký tự.

characters
Tinyblob

28-1

Khai báo cho Field chứa kiểu đối tượng nhị phân cỡ
255 characters

Tinytext

28-1

Khai báo cho Field chứa kiểu chuỗi cỡ 255 characters.

Blob

216-1

Khai báo cho Field chứa kiểu blob cỡ 65, 535
characters..

Text

216-1

Khai báo cho Field chứa kiểu chuỗi dạng văn bản cỡ
65, 535 characters.


Mediumblob

224-1

Khai báo cho Field chứa kiểu blob vừa khoảng 16,
777, 215 characters

Mediumtext

224-1

Khai báo cho Field chứa kiểu chuỗi dạng văn bản vừa
khoảng 16, 777, 215
characters

Longblob

232-1

Khai báo cho Field chứa kiểu blob lớn khoảng 4, 294,
967, 295 characters.

Longtext

232-1

Khai báo cho Field chứa kiểu chuỗi dạng văn bản lớn
khoảng 4, 294, 967, 295 characters.


6


1.1.4. Các thao tác cập nhật dữ liệu
 SELECT (Truy vấn mẫu tin):Select dùng để truy vấn từ một hay nhiều
bảng khác nhau, kết quả trả về là một tập mẫu tin thỏa mãn các điều kiện cho trước
nếu có, cú pháp của phát biểu SQL dạng SELECT như sau:
SELECT<danh sách các cột>
[FROM<danh sách bảng>]
[WHERE<các điều kiện ràng buộc>]
[GROUP BY<tên cột/biểu thức trong SELECT>]
[HAVING<điều kiện bắt buộc của GROUP BY>]
[ORDER BY<danh sách các cột>]
[LIMIT FromNumber |ToNumber]
 INSERT(Thêm mẫu tin):
Cú pháp: INSERT INTO Tên_bảng VALUES(Bộ_giá_trị)
 UPDATE(Cập nhật dữ liệu):
Cú pháp: UPDATE TABLE Tên_bảng
SET Tên_cột=Biểu_thức,...
[WHERE Điều_kiện]
 DELETE(Xóa mẫu tin):
Cú pháp: DELETE FROM Tên_bảng
[WHERE Điều_kiện]
1.1.5. Các hàm thông dụng trong MySQL
1.1.5.1. Các hàm trong phát biểu GROUP BY
Hàm AVG: Hàm trả về giá trị bình quân của cột hay trường trong câu truy
vấn
Hàm MIN: Hàm trả về giá trị nhỏ nhất của cột hay trường trong câu truy vấn
Hàm MAX: Hàm trả về giá trị lớn nhất của cột hay trường trong câu truy vấn
Hàm Count: Hàm trả về số lượng mẩu tin trong câu truy vấn

Hàm Sum: Hàm trả về tổng các giá trị của trường, cột trong câu truy vấn.
1.1.5.2. Các hàm xử lí chuỗi:
Hàm ASCII: Hàm trả về giá trị mã ASCII của kí tự bên trái của chuỗi.

7


Hàm Char: Hàm này chuyển đổi kkiểu mã ASCII từ số nguyên sang dạng
chuỗi.
Hàm UPPER: Hàm này chuyển đổi chuỗi sang kiểu chữ hoa
Hàm LOWER: Hàm này chuyển đổi chuỗi sang kiểu chữ thường.
Hàm Len: Hàm này trả về chiều dài của chuỗi.
Thủ tục LTRIM: Thủ tục loại bỏ khoảng trắng bên trái của chuỗi
Thủ tục RTRIM: Thủ tục loại bỏ khỏang trắng bên phải của chuỗi
Hàm Left(str, n): Hàm trả về chuỗi bên trái tính từ đầu cho đến vị trí n
Hàm Right(str, n): Hàm trả về chuỗi bên phải tính từ đầu cho đến vị trí n
Hàm Instrt: Hàm trả về chuỗi vị trí bắt đầu của chuỗi con trong chuỗi xét.
1.1.5.3. Các hàm xử lí về thời gian
Hàm CurDate(): Hàm trả về ngày, tháng và năm hiện hành của hệ thống.
Hàm CurTime(): Hàm trả về giờ, phút và giây hiện hành của hệ thống.
Hàm Period_Diff: Hàm trả về số ngày trong khoảng thời gian giữa 2 ngày.
Hàm dayofmonth: Hàm trả về ngày thứ mấy trong tháng
1.1.5.4. Các hàm về toán học
Hàm sqrt: Hàm trả về là căn bậc hai của một biểu thức.
Hàm CurDate(): Hàm trả về ngày, tháng và năm hiện hành của hệ thống.
1.2. Tổng quan công nghệ Hibernate framework
1.2.1. Giới thiệu về Hibernate framework
Framework 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.
ORM (Object Relational Mapping) framework 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…
Peristence 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) và phần chứa dữ
8


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 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.
Hibernate là một giải pháp ORM cho Java , một dự án open source chuyên
nghiệp, một framework cho pesistence layer, 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ụ 24/7 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…
Hibernate ánh xạ các lớp Java với các bảng trong cơ sở dữ liệu và ánh xạ
giữa các kiểu dữ liệu trong Java với các kiểu dữ liệu SQL. Hibernate giúp giảm
thiểu các công việc liên quan đến nhiệm vụ xử lý dữ liệu thông thường trong phát
triển ứng dụng.
Hibernate nằm giữa các đối tượng Java truyền thống và cơ sở dữ liệu để giải
quyết tất cả các công việc trong lớp persistence dựa trên mô hình kỹ thuật ORM.

Hình 1.1: Mô hình ORM/Hibernate

Ưu điểm của Hibernate:
Hibernate chịu trách nhiệm ánh xạ giữa các lớp Java đến các bảng trong
CSDL dùng các file XML mà không cần phải viết bất kỳ dòng mã lệnh nào.

9


Hibernate cung cấp các API đơn giản để lưu trữ, truy xuất trực tiếp các đối
tượng Java và CSDL. Nếu có bất kỳ thay đổi nào trong CSDL thì chỉ cần thay đổi
file XML. Ngoài ra, công nghệ này còn cung cấp đầy đủ các tiện ích, tính năng truy
vấn dữ liệu đơn giản, hiệu quả. Thao tác, xử lý được các quan hệ phức tạp của các
đối tượng trong CSDL. Hibernate giảm thiểu sự truy cập đến CSDL đến mức thấp
nhất nhờ có chiến lược tìm, nạp thông minh.
Hibernate hỗ trợ hầu hết các RDBMS quan trọng như: HSQL Database
Engine, DB2/NT, MySQL, PostgreSQL, Oracle, Microsoft SQL Server Database,…
Hibernate hỗ trợ một số công nghệ sau: XDoclet Spring, J2EE, Eclipse plugins, Maven
1.2.2. Kiến trúc Hibernate
Hibernate sử dụng các file cấu hình để cung cấp các dịch vụ và đối tượng
persistence cho ứng dụng.

Hình 1.2: Kiến trúc tổng quát của Hibernate

10


Hình dưới cho thấy chi tiết hơn kiến trúc của hibernate.

Hình 1.3: Kiến trúc của Hibernate
Hibernate dùng rất nhiều loại Java API có sẵn như JDBC, Java Transaction
API (JTA) và Java Naming and Directory Interface (JNDI). JDBC cung cấp các

chức năng làm việc với CSDL quan hệ ở mức thô sơ, trừu tượng, cho phép bất kỳ
một CSDL nào dùng JDBC driver đều được hỗ trợ bởi Hibernate. JNDI và JTA cho
phép hibernate được tích hợp với các server ứng dụng J2EE.
Các thành phần của Hibernate project (các thành phần thư viện
Hibernate)


Hibernate Core: Cung cấp các chức năng cơ bản của persistent 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 Anootations, bao gồm

Hibernate Validator.


Hibernate EntityManager : sử dụng EJB 3.0 API trong JSE hoặc với bất kỳ

JEE nào.


Hibernate Tools: các tool tích hợp với Eclipse và Ant giúp tạo ra các

persistent object từ 1 schema có sẵn trong database (reverse-engineering) và từ các
file hbm sinh ra các class java thực hiện các persistent object rồi Hibernate tự tạo
tác object trong database (forward-engineering).
11





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.
1.3. Tổng quan về ngôn ngữ lập trình Java
1.3.1. Lịch sử phát triển của ngôn ngữ lập trình Java
Java là ngôn ngữ lập trình hướng đối tượng (tựa C++) do Sun Microsystem
đưa ra vào giữa thập niên 90.
Chương trình viết bằng ngôn ngữ lập trình java có thể chạy trên bất kỳ hệ
thống nào có cài máy ảo java (Java Virtual Machine).
Ngôn ngữ lập trình Java do James Gosling và các công sự của Công ty Sun
Microsystem phát triển.
Đầu thập niên 90, Sun Microsystem tập hợp các nhà nghiên cứu thành lập
nên nhóm đặt tên là Green Team. Nhóm Green Team có trách nhiệm xây dựng công
nghệ mới cho ngành điện tử tiêu dùng. Để giải quyết vấn đề này nhóm nghiên cứu
phát triển đã xây dựng một ngôn ngữ lập trình mới đặt tên là Oak tương tự như C++
nhưng loại bỏ một số tính năng nguy hiểm của C++ và có khả năng chạy trên nhiều
nền phần cứng khác nhau. Cùng lúc đó world wide web bắt đầu phát triển và Sun đã
thấy được tiềm năng của ngôn ngữ Oak nên đã đầu tư cải tiến và phát triển. Sau
đó không lâu ngôn ngữ mới với tên gọi là Java ra đời và được giới thiệu năm 1995.
Java là tên gọi của một hòn đảo ở Indonexia, Đây là nơi nhóm nghiên cứu
phát triển đã chọn để đặt tên cho ngôn ngữ lập trình Java trong một chuyến đi tham
quan và làm việc trên hòn đảo này. Hòn đảo Java này là nơi rất nổi tiếng với nhiều

khu vườn trồng cafe, đó chính là lý do thường thấy biểu tượng ly cafe trong nhiều
sản phẩm phần mềm, công cụ lập trình Java của Sun cũng như một số hãng phần
mềm khác đưa ra.
1.3.2. Một số đặc điểm nổi bật của ngôn ngữ lập trình Java
1.3.2.1. Máy ảo Java (JVM - Java Virtual Machine)
Tất cả các chương trình muốn thực thi được thì phải được biên dịch ra mã
máy. Mã máy của từng kiến trúc CPU của mỗi máy tính là khác nhau (tập lệnh mã
12


máy của CPU Intel, CPU Solarix, CPU Macintosh … là khác nhau), vì vậy trước
đây một chương trình sau khi được biên dịch xong chỉ có thể chạy được trên một
kiến trúc CPU cụ thể nào đó. Đối với CPU Intel chúng ta có thể chạy các hệ điều
hành như Microsoft Windows, Unix, Linux, OS/2, … Chương trình thực thi được
trên Windows được biên dịch dưới dạng file có đuôi .EXE còn trên Linux thì được
biên dịch dưới dạng file có đuôi .ELF, vì vậy trước đây một chương trình chạy được
trên Windows muốn chạy được trên hệ điều hành khác như Linux chẳng hạn thì phải
chỉnh sửa và biên dịch lại. Ngôn ngữ lập trình Java ra đời, nhờ vào máy ảo Java mà
khó khăn nêu trên đã được khắc phục. Một chương trình viết bằng ngôn ngữ lập
trình Java sẽ được biên dịch ra mã của máy ảo java (mã java bytecode). Sau đó máy
ảo Java chịu trách nhiệm chuyển mã java bytecode thành mã máy tương ứng. Sun
Microsystem chịu trách nhiệm phát triển các máy ảo Java chạy trên các hệ điều hành
trên các kiến trúc CPU khác nhau.
1.3.2.2. Thông dịch
Java là một ngôn ngữ lập trình vừa biên dịch vừa thông dịch. Chương trình
nguồn viết bằng ngôn ngữ lập trình Java có đuôi *.java đầu tiên được biên dịch thành
tập tin có đuôi *.class và sau đó sẽ được trình thông dịch thông dịch thành mã máy.
1.3.2.3. Độc lập nền
Một chương trình viết bằng ngôn ngữ Java có thể chạy trên nhiều máy tính có
hệ điều hành khác nhau (Windows, Unix, Linux, …) miễn sao ở đó có cài đặt máy ảo

java (Java Virtual Machine). Viết một lần chạy mọi nơi (write once run anywhere).
1.3.2.4. Hướng đối tượng
Hướng đối tượng trong Java tương tự như C++ nhưng Java là một ngôn ngữ
lập trình hướng đối tượng hoàn toàn. Tất cả mọi thứ đề cập đến trong Java đều liên
quan đến các đối tượng được định nghĩa trước, thậm chí hàm chính của một chương
trình viết bằng Java (đó là hàm main) cũng phải đặt bên trong một lớp. Hướng đối
tượng trong Java không có tính đa kế thừa (multi inheritance) như trong C++ mà thay
vào đó Java đưa ra khái niệm interface để hỗ trợ tính đa kế thừa. Vấn đề này sẽ
được bàn chi tiết trong chương 3.

13


1.3.2.5. Đa nhiệm - đa luồng (MultiTasking - Multithreading)
Java hỗ trợ lập trình đa nhiệm, đa luồng cho phép nhiều tiến trình, tiểu trình
có thể chạy song song cùng một thời điểm và tương tác với nhau.
1.3.2.6. Khả chuyển (portable)
Chương trình ứng dụng viết bằng ngôn ngữ Java chỉ cần chạy được trên máy
ảo Java là có thể chạy được trên bất kỳ máy tính, hệ điều hành nào có máy ảo Java.
“Viết một lần, chạy mọi nơi” (Write Once, Run Anywhere).
1.3.2.7. Hỗ trợ mạnh cho việc phát triển ứng dụng
Công nghệ Java phát triển mạnh mẽ nhờ vào “đại gia Sun Microsystem” cung
cấp nhiều công cụ, thư viện lập trình phong phú hỗ trợ cho việc phát triển nhiều loại
hình ứng dụng khác nhau cụ thể như: J2SE (Java 2 Standard Edition) hỗ trợ phát
triển những ứng dụng đơn, ứng dụng client-server; J2EE (Java 2 Enterprise Edition)
hỗ trợ phát triển các ứng dụng thương mại, J2ME (Java 2 Micro Edition) hỗ trợ phát
triển các ứng dụng trên các thiết bị di động, không dây, …
1.3.3. Hướng đối tượng trong Java
OOP là một trong những tiếp cận mạnh mẽ, và rất hiệu quả để xây dựng nên
những chương trình ứng dụng trên máy tính. Từ khi ra đời cho đến nay lập trình

OOP đã chứng tỏ được sức mạnh, vai trò của nó trong các đề án tin học.
1.3.3.1. Lớp (Class)
Khái niệm
Có thể xem lớp như một khuôn mẫu (template) của đối tượng (Object). Trong
đó bao gồm dữ liệu của đối tượng (fields hay properties) và các phương thức
(methods) tác động lên thành phần dữ liệu đó gọi là các phương thức của lớp.
Các đối tượng được xây dựng bởi các lớp nên được gọi là các thể hiện của lớp
(class instance).
Khai báo định nghĩa lớp
class <ClassName>
{
<kiểu dữ liệu> <field_1>;
<kiểu dữ liệu> <field_2>; constructor
method_1 method_2
14


}
class: là từ khóa của java
ClassName: là tên đặt cho lớp
field_1, field_2: các thuộc tính, các biến, hay các thành phần dữ liệu của lớp.
constructor: là sự xây dựng, khởi tạo đối tượng lớp.
method_1, method_2: là các phương thức/hàm thể hiện các thao tác xử lý,
tác động lên các thành phần dữ liệu của lớp.
Tạo đối tượng của lớp
ClassName objectName = new ClassName();
Thuộc tính của lớp
Vùng dữ liệu (fields) hay thuộc tính (properties) của lớp
được khai báo bên trong lớp như sau:
class <ClassName>

{
// khai báo những thuộc tính của lớp
<tiền tố> <kiểu dữ liệu> field1;
// …
}
Để xác định quyền truy xuất của các đối tượng khác đối với vùng dữ liệu của
lớp người ta thường dùng 3 tiền tố sau:
public: có thể truy xuất từ tất cả các đối tượng khác
private: một lớp không thể truy xuất vùng private của 1 lớp khác.
protected: vùng protected của 1 lớp chỉ cho phép bản thân lớp đó và những
lớp dẫn xuất từ lớp đó truy cập đến.
Lưu ý: Thông thường để an toàn cho vùng dữ liệu của các đối tượng tránh
dùng tiền tố public, mà thường chọn tiền tố private để ngăn cản quyền truy cập đến
vùng dữ liệu của một lớp từ các phương thức bên ngoài lớp đó.
Hàm – Phương thức lớp (Method)
Hàm hay phương thức (method) trong Java là khối lệnh thực hiện các chức
năng, các hành vi xử lý của lớp lên vùng dữ liệu.

15


Khai báo phương thức:
<Tiền tố> <kiểu trả về> <Tên phương thức> (<danh sách đối số>)
{
<khối lệnh>;
}
Để xác định quyền truy xuất của các đối tượng khác đối với các phương thức
của lớp người ta thường dùng các tiền tố sau:
public: phương thức có thể truy cập được từ bên ngoài lớp khai báo.
protected: có thể truy cập được từ lớp khai báo và những lớp dẫn xuất từ nó.

private: chỉ được truy cập bên trong bản thân lớp khai báo.
static: phương thức lớp dùng chung cho tất cả các thể hiện của lớp, có nghĩa là
phương thức đó có thể được thực hiện kể cả khi không có đối tượng của lớp chứa
phương thức đó.
final: phương thức có tiền tố này không được khai báo chồng ớ các lớp dẫn
xuất.
abstract: phương thức không cần cài đặt (không có phần source code), sẽ
được hiện thực trong các lớp dẫn xuất từ lớp này.
synchoronized: dùng để ngăn các tác động của các đối tượng khác lên đối
tượng đang xét trong khi đang đồng bộ hóa. Dùng trong lập trình miltithreads.
<kiểu trả về>: có thể là kiểu void, kiểu cơ sở hay một lớp.
<Tên phương thức>: đặt theo qui ước giống tên biến.
<danh sách thông số>: có thể rỗng
Lưu ý:
Thông thường trong một lớp các phương thức nên được khai báo dùng từ
khóa public, khác với vùng dữ liệu thường là dùng tiền tố private vì mục đích an
toàn.
Những biến nằm trong một phương thức của lớp là các biến cục bộ (local) và
nên được khởi tạo sau khi khai báo.
Khởi tạo một đối tượng (Constructor)
Contructor thật ra là một loại phương thức đặc biệt của lớp. Constructor dùng
gọi tự động khi khởi tạo một thể hiện của lớp, có thể dùng để khởi gán những giá trị
16


măc định. Các constructor không có giá trị trả về, và có thể có tham số hoặc không
có tham số.
Constructor phải có cùng tên với lớp và được gọi đến dùng từ khóa new.
Nếu một lớp không có constructor thì java sẽ cung cấp cho lớp một constructor
mặc định (default constructor). Những thuộc tính, biến của lớp sẽ được khởi tạo bởi

các giá trị mặc định (số: thường là giá trị 0, kiểu luận lý là giá trị false, kiểu đối
tượng giá trị null, …)
Lưu ý: Thông thường để an toàn, dễ kiểm soát và làm chủ mã nguồn chương
trình nên khai báo một constructor cho lớp.
Biến this
Biến this là một biến ẩn tồn tại trong tất cả các lớp trong ngông ngữ java. Một
class trong Java luôn tồn tại một biến this, biến this được sử dụng trong khi chạy và
tham khảo đến bản thân lớp chứa nó.
Khai báo chồng phương thức (overloading method)
Việc khai báo trong một lớp nhiều phương thức có cùng tên nhưng khác
tham số (khác kiểu dữ liệu, khác số lượng tham số) gọi là khai báo chồng phương
thức (overloading method).
1.3.3.2. Đặc điểm hướng đối tượng trong java
Hỗ trợ những nguyên tắc cơ bản của lập trình hướng đối tượng, tất cả các
ngôn ngữ lập trình kể cả java đều có ba đặc điểm chung: tính đóng gói
(encapsulation), tính đa hình (polymorphism), và tính kế thừa (inheritance).
Tính đóng gói (encapsulation)
Cơ chế đóng gói trong lập trình hướng đối tượng giúp cho các đối tượng dấu
đi một phần các chi tiết cài đặt, cũng như phần dữ liệu cục bộ của nó, và chỉ công bố
ra ngoài những gì cần công bố để trao đổi với các đối tượng khác. Hay chúng ta có
thể nói đối tượng là một thành tố hỗ trợ tính đóng gói.
Đơn vị đóng gói cơ bản của ngôn ngữ java là class. Một class định nghĩa hình
thức của một đối tượng. Một class định rõ những thành phần dữ liệu và các đoạn mã
cài đặt các thao tác xử lý trên các đối tượng dữ liệu đó. Java dùng class để xây
dựng những đối tượng. Những đối tượng là những thể hiện (instances) của một class.

17


Một lớp bao gồm thành phần dữ liệu và thành phần xử lý. Thành phần dữ

liệu của một lớp thường bao gồm các biến thành viên và các biến thể hiện của lớp.
Thành phần xử lý là các thao tác trên các thành phần dữ liệu, thường trong java
người gọi là phương thức. Phương thức là một thuật ngữ hướng đối tượng trong
java, trong C/C++ thường dùng thuật ngữ là hàm.
Tính đa hình (polymorphism)
Tính đa hình cho phép cài đặt các lớp dẫn xuất khác nhau từ một lớp nguồn.
Một đối tượng có thể có nhiều kiểu khác nhau gọi là tính đa hình.
Tính kế thừ (inheritance)
Một lớp con (subclass) có thể kế thừa tất cả những vùng dữ liệu và phương
thức của một lớp khác (siêu lớp - superclass). Như vậy việc tạo một lớp mới từ một
lớp đã biết sao cho các thành phần (fields và methods) của lớp cũ cũng sẽ thành các
thành phần (fields và methods) của lớp mới. Khi đó ta gọi lớp mới là lớp dẫn xuất
(derived class) từ lớp cũ (superclass). Có thể lớp cũ cũng là lớp được dẫn xuất từ
một lớp nào đấy, nhưng đối với lớp mới vừa tạo thì lớp cũ đó là một lớp siêu lớp trực
tiếp (immediate supperclass).
Dùng từ khóa extends để chỉ lớp dẫn xuất.
class A extends B
{
// …
}
1.3.3.3. Gói (packages)
Việc đóng gói các lớp lại tạo thành một thư viện dùng chung gọi là package.
Một package có thể chứa một hay nhiều lớp bên trong, đồng thời cũng có thể
chứa một package khác bên trong.
Để khai báo một lớp thuộc một gói nào đấy ta phải dùng từ khóa package.
Dòng khai báo gói phải là dòng đầu tiên trong tập tin khai báo lớp.
Các tập tin khai báo lớp trong cùng một gói phải được lưu trong cùng một
thư mục.
Lưu ý: Việc khai báo import tất cả các lớp trong gói sẽ làm tốn bộ nhớ.
Thông thường chỉ nên import những lớp cần dùng trong chương trình.

18


1.3.3.4. Giao diện (interface)
Khái niệm interface
Như đã biết một lớp trong java chỉ có một siêu lớp trực tiếp hay một cha duy
nhất (đơn thừa kế). Để tránh đi tính phức tạp của đa thừa kế (multi - inheritance)
trong lập trình hướng đối tượng, Java thay thế bằng giao tiếp (interface). Một lớp có
thể có nhiều giao tiếp (interface) với các lớp khác để thừa hưởng thêm vùng dữ liệu
và phương thức của các giao tiếp này.
Khai báo interface
Interface được khai báo như một lớp. Nhưng các thuộc tính của interface là
các hằng (khai báo dùng từ khóa final) và các phương thức của giao tiếp là trừu
tượng (mặc dù không có từ khóa abstract). Trong các lớp có cài đặt các interface
phải tiến hành cài đặt cụ thể các phương thức này.
Có một vấn đề khác với lớp là một giao diện (interface) không chỉ có một
giao diện cha trực tiếp mà có thể dẫn xuất cùng lúc nhiều giao diện khác (hay có
nhiều giao diện cha). Khi đó nó sẽ kế thừa tất cả các giá trị hằng và các phương thức
của các giao diện cha. Các giao diện cha được liệt kê thành chuỗi và cách nhau bởi
dấu phẩy “,”. Khai báo như sau:
public interface InterfaceName extends interface1, interface2, interface3
{
// …
}

19


CHƯƠNG 2: PHÂN TÍCH, THIẾT KẾ BÀI TOÁN
2.1. Bài toán quản lý lịch của giảng viên

Chương trình quản lý lịch cho cán bộ phụ trách khoa Công nghệ Điện tử và
truyền thông để cho người phụ trách dễ dàng trong tra cứu lịch của các giảng viên
để tiện cho việc quản lý và phân công công việc cho giảng viên khi cần thiết.
Trước khi bắt đầu học kỳ thì các giảng viên đều được phòng Đào tạo cung
cấp thời khóa biểu giảng dạy trong học kỳ đó.
Khi có đợt mở lớp mới trong học kỳ đó mà giảng viên có lịch dạy thì phòng
Đào tạo sẽ cung cấp cho giảng viên đó lịch giảng dạy đã được cập nhật gửi bằng file
excel. Trong chương trình sẽ sử dụng lịch giảng dạy đó là cơ sở dữ liệu để người
phụ trách quản lý.
Ngoài ra trong quá trình giảng dạy giảng viên còn nhận được nhiều lịch khác
như đi họp, coi thi, chấm thi… thì chương trình sẽ cho phép cập nhật vào danh sách
lịch của giảng viên để cán bộ quản lý dễ theo dõi.
2.2. Phân tích bài toán
2.2.1. Biểu đồ dữ liệu mức khung cảnh

Hình 2.1: Biểu đồ dữ liệu mức khung cảnh

20


×