CHƯƠNG 1. NỀN TẢNG ỨNG DỤNG 1.1 Giới thiệu nền tảng ứng dụng: Ngôn ngữ lập trình Java là ngôn ngữ hướng đối tượng (tựa C++) do SUN đưa ra vào thập niên 90. Khác với phần lớn các ngôn ngữ lập trình thông thường, thay vì biên dịch mã nguồn thành mã máy hoặc thông dịch mã nguồn khi chạy, Java được thiết kế biên dịch mã nguồn thành bytecode, bytecode sau đó sẻ được môi trường thực thi (runtime environment) chạy. Bằng cách này, Java thường chạy nhanh hơn những ngôn ngữ lập trình thông dịch khác như Python, Perl, PHP… và khả chuyển hơn các ngôn ngữ lập trình biên dịch như C++.
Ngày nay Java người ta không còn nhắc đến như là một ngôn ngữ lập trình nữa mà nhắc đến như một công nghệ hay một nền tảng phát triển, nó bao gồm các bộ phận: - Máy ảo Java: JVM - Bộ công cụ phát triển: J2SDK - Các đặc tả chi tiết kỹ thuật (specifications) - Ngôn ngữ lập trình (Programming language) - Các công nghệ đi kèm như JSP, Servlet, JDBC, JNDI, RMI… và các framework như Struts, Sping, JSF, Hibernate … Công nghệ Java được chia làm ba bộ phận 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 Standard Edition) Gồm các đặc tả, công cụ, API của nhân Java giúp phát triển ứng dụng trên desktop và định nghĩa các phần thuộc nhân của Java: flatform cho phat triển và thực thi các ứng dụng Java trên desktop và server, cũng như các thiết bị nhúng, môi trường thời gian thực. Bộ phận hay được nhắc đến nhiều nhất của công nghệ này là công nghệ Servlet/JSP: sử dụng Java để làm ứng dụng web. - J2ME (Java Micro Edition) Gồm các đặc tả công cụ, API mở rộng để phát triển các ứng dụng chạy trên điện thoại di động, thẻ thông minh, thiết bị cầm tay, robo và những ứng dụng điện tử khác.2 Công nghệ được sử dụng trong ứng dụng: 1.1 Mô hình MVC 2: Trong J2EE thì công nghệ Servlet rất mạnh trong quá trình xử lý nghiệp vụ và điều phối nhưng lại rất yếu trong hiển thị, còn công nghệ JSP mạnh về xử lý hiển thị nhưng lại yếu về xử lý nghiệp vụ và điều phối, với kinh nghiệm trên người ta đã kết hợp sức mạnh của Servlet và Jsp vào mô hình MVC 2 (Model – View – Controller) để tăng tối đa khả năng của chúng. Mô hình MVC 2 (Model – View – Controler): Gửi sự kiện (Controller) (View) Servlet JSP Chọn view Gửi dữ liệu Cập nhật dữ liệu Hiển thị dữ liệu Rút trích dữ liệu (Model) DAO + POJO Hình 1: Hình minh họa mô hình MVC 2 - Các Servlet đóng vai trò làm Controller.
o Gọi Model cập nhật dữ liệu, rút trích dữ liệu. o Chọn view và gửi dữ liệu cho View. - Các trang Jsp đóng vai trò làm View. o Gửi các sự kiện cho Controller.
o Nhận dữ liệu từ controller và hiển thị. - Các thành phần DAO, POJO đóng vai trò làm Model. o Cập nhật dữ liệu, rút trích dữ liệu. Luan van 6 o DAO là các class xử lý để cập nhật rút trích dữ liệu.
o POJO là các lớp đối tượng được mapping từ Database. Các ưu điểm khi sử dụng mô hình MVC 2: - Tính tin cậy: việc chia từng phần riêng biệt giúp chúng ta sửa dồi từng thành phần riêng biệt, không ảnh hưởng, có thể thay thế thành phần tương đương, có thể chia công việc theo nhóm, biên dịch độc lập, tăng cướng khả năng tích hợp, khả năng đúng đắn cao. - Tính tương thích cao: có khả năng sử dụng các loại công nghệ khác nhau không lệ thuộc vì chúng ta đã được tách biệt và khái niệm cho từng phần riêng biệt. - Tính tái sử dụng: chúng ta có thể sử dụng các thành phần chia cắt lại trong các ứng dụng khác hay sử dụng lại nhiều lần trong cùng một ứng dụng, tăng tính hiệu quả trong lập trình.
- Khả năng triển khai nhanh chóng và bảo trì nhanh chóng vì các thành phần là độc lập với nhau.2 Hibernate Framework: Với JDBC cần tốn nhiều thời gian để viết kiểm thử cho câu lệnh SQL Select, Insert, Update, Delete cho mổi bảng dữ liệu, nếu ứng dụng có khả năng kết nối với nhiều hệ quản trị cơ sở dữ liệu khác nhau, thì câu truy vấn trong mổi hệ quản trị có thể có cú pháp khác nhau tao nên sự khó khăn cho người phát triển. Hibernate là một framework cho từng lưu trữ dữ liệu, là một dịch vụ truy vấn dữ liệu quan hệ mạnh mẽ và nhanh chóng. Hibernate giúp người phát triển các class dùng để lưu trử dữ liệu theo cách hướng đối tượng: association, inheritence, polymorphism, composition và collections. Hibernate cho phép thực hiện các truy vấn dữ liệu bằng cách sử dụng ngôn ngữ SQL mở rộng của Hibernate là HQL (Hibernate Query Language) hoặc là ngôn ngữ SQL nguyên thủy cũng như là sử dụng API.
Hibernate không ẩn đi sức mạnh của ngôn ngữ SQL thuần túy mà Hibernate còn đảm bảo cho người phát triển đầu tư vào công nghệ và tri thức cơ sở dữ liệu quan hệ là 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 Licence). Do đó chúng ta 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. Luan van 7 Hibernate thực hiên nhanh nhất có thể các tao tác thêm, xóa, cập nhật, lây thông tin, và nếu ứng dụng tương tác nhiều hệ quản trị cơ sở dữ liệu như mysql, oracle, db2, sql server.
quá trình chuyển đổi cơ sở dữ liệu sẻ dể dàng hơn nhanh chóng hơn thông qua file cấu hình. Hình 2: Hình minh họa mô hình Hibernate Các ORM framework mang đến cho người phát triển 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 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ó.
Để tao nên ứng dụng Hibernate, có 3 điều cần phải có đó là: - Persistence Class: là một Plain Old Java Object hay POJO model. Một POJO là tương tự như JavaBean, có những getter, 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: o Nó là thay thế hướng đối tượng cho bảng ở cơ sở dữ liệu. o Các thuộc tính của bảng trở thành nhưng instance của persistence class.
o Kiểu dữ liệu của cac instance variable là domain của các thuộc tính. o Đối tượng của persistence class thay thế cho các trường của bảng. - Mapping file: là một file XML chứa ánh xạ chi tiết giữa persistence class và bảng thay thế. Các thành phần bắt buộc của file XML này là: o Hibernate mapping: đây là thành phần gốc bao gồm tất cả các thành phần khác.
Luan van 8 o Class: Được sử dụng để ánh xạ tên bảng thành persistence class. Tên thuộc tính được sử dụng để xác định tên lớp, và thuộc tính bảng được sử dụng để xác định bảng mà lớp thay thế. Ví dụ: <class name="pojo.Giangvien" table="giangvien" catalog="nckh"> … </class> o ID: Thành phần này dùng để ánh xạ khóa chính của bảng thành một 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áo 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 <id name="maGiangVien" type="string"> <column name="MaGiangVien" length="45" /> <generator class="assigned" /> </id> sử dụng ở đâu để tự động tạo id, hoặc id được gán bở ứng dụng. Ví dụ: o Property: thành phần này thuộc về các cột thành phần con của nó, ánh xạ những thuộc tính khác (hoặc các cột thành phần instance variable) của presistence 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. Ví dụ: <property name="ten" type="string"> <column name="Ten" length="45" /> </property> - Hibernate configuration file: File này có thể được 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ụng bởi một ứng dụng được công bố. Định 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à: o Property: Thuộc tính name của thành phần property có thể sử dụng để 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 nhay. Để đặt chúng vào trong mã. Ví dụ: Luan van 9 <session-factory> <property name="hibernate.MySQLDialect</property> <property name="hibernate.driver_class">com.Driver</property> <property name="hibernate.url"> jdbc:mysql://localhost:3306/nckh?useUnicode=true&characterEncoding=UTF-8 </property> <property name="hibernate.username">sa</property> … </session-factory> 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 resourse được cho giá trị của đường dẩn file hbm.
Ví dụ: <mapping resource="pojo/Tainguyenlink.xml"/> - Hibernate Query Language: HQL độc lập hệ quản trị cơ sở dữ liệu và được Hibernate thông dịch sang SQL tương ứng trong quá trình thực thi, HQL là ngôn ngữ truy vấn theo hướng đối tượng, Kết quả truy vấn là đối tượng. HQL không phân biệt thường hoa ngoại trừ: tên các lớp đối tượng, các thuộc tính trong lớp đối tượng. o HQL – Aggregate functions. o HQL – Where o HQL – Expression o HQL – Order by o HQL – Group by & having o HQL – Subquery.
Luan van 10 CHƯƠNG 2. XÂY DỰNG HỆ THỐNG ỨNG DỤNG 2.1 Mô hình hệ thống tổng thể: Sinh viên Khóa học Giảng viên Hình 3: Hình minh họa mô hình hệ thống tổng thể Trước tiên chúng tội định nghĩa cho các bạn biết một một khóa học là gì? Khóa học do giảng viên tạo ra khi giảng viên phụ trách giảng dạy một lớp nào đó với một môn học nhất định. Ví dụ: Thầy Nguyễn Đăng Quang dạy môn Lập Trình Mạng ở lớp 08110CL2 thì tương úng với một khóa học sẽ được tạo ra. Đối với hệ thống quản lý như hình vẻ trên chúng tôi đã đưa ra bài toán cụ thể như sau: Luan van 11 - Đối với ban quản lý Khoa: Có nhiêm vụ Quản lý toàn bộ sinh viên đang theo học ở Khoa, Quản lý toàn bộ giảng viên đang giảng dạy tại đây, Có nhiệm vụ bổ sung danh sách sinh viên cho khóa học, Gửi thông báo đếm giảng viên, sinh viên, lớp học khi cần thiết.