Bài giảng Lập trình Java Chương 5: Lập trình theo mô hình 2 lớp với Java cung cấp cho người học các kiến thức: Hướng tiếp cận phân tầng trong phần mềm, vai trò của hướng tiếp cận phân tầng, một số hướng tiếp cận phân từng thông dụng,... Mời các bạn cùng tham khảo.
Trang 1Phát triển UD CSDL 2
Lập trình theo mô hình 2 lớp với JAVA
Trang 2Nội dung
• H ướng tiếp cận phân tầng trong phần mềm ng ti p c n phân t ng trong ph n m m ếp cận phân tầng trong phần mềm ận phân tầng trong phần mềm ầng trong phần mềm ầng trong phần mềm ềm
• Vai trò c a h ủa hướng tiếp cận phân tầng ướng tiếp cận phân tầng trong phần mềm ng ti p c n phân t ng ếp cận phân tầng trong phần mềm ận phân tầng trong phần mềm ầng trong phần mềm
• M t s h ột số hướng tiếp cận phân từng thông dụng ố hướng tiếp cận phân từng thông dụng ướng tiếp cận phân tầng trong phần mềm ng ti p c n phân t ng thông d ng ếp cận phân tầng trong phần mềm ận phân tầng trong phần mềm ừng thông dụng ụng
• Mô hình 2 t ng đ n gi n ầng trong phần mềm ơn giản ản
• M t s ví d ột số hướng tiếp cận phân từng thông dụng ố hướng tiếp cận phân từng thông dụng ụng
Trang 3Hướng tiếp cận phân tầng
• Chia ph n m m thành các t ng (layer) ầng trong phần mềm ềm ầng trong phần mềm
• Khi thi t k c n l u ý: ếp cận phân tầng trong phần mềm ếp cận phân tầng trong phần mềm ầng trong phần mềm ư
– M i t ng ch u trách nhi m riêng ỗi tầng chịu trách nhiệm riêng ầng trong phần mềm ịu trách nhiệm riêng ệm riêng
– D li u đ u vào và đ u ra c a m i t ng nên rõ ràng và d s ệm riêng ầng trong phần mềm ầng trong phần mềm ủa hướng tiếp cận phân tầng ỗi tầng chịu trách nhiệm riêng ầng trong phần mềm ễ sử ử
d ng ụng
– Khi m t t ng b thay đ i thì kh năng nh h ột số hướng tiếp cận phân từng thông dụng ầng trong phần mềm ịu trách nhiệm riêng ổi thì khả năng ảnh hưởng của nó đến các ản ản ưởng của nó đến các ng c a nó đ n các ủa hướng tiếp cận phân tầng ếp cận phân tầng trong phần mềm
t ng khác th p nh t nh t có th có ầng trong phần mềm ấp nhất nhất có thể có ấp nhất nhất có thể có ấp nhất nhất có thể có ể có
Trang 4Vai trò của hướng tiếp cận phân tầng
• S n sàng cho vi c m r ng h th ng ẵn sàng cho việc mở rộng hệ thống ệm riêng ởng của nó đến các ột số hướng tiếp cận phân từng thông dụng ệm riêng ố hướng tiếp cận phân từng thông dụng
• Tái s d ng mã ngu n ử ụng ồn
• D b o trì h th ng ễ sử ản ệm riêng ố hướng tiếp cận phân từng thông dụng
• D dàng phân chia công vi c trong nhóm ễ sử ệm riêng
Trang 5Một số mô hình phân tầng
• 2 Layer / 2 Tier
• 3 Layer / 3 Tier
• N Layer / N Tier
Trang 6Mô hình 2 tầng đơn giản
Tầng giao diện
Tầng truy cập dữ
liệu
Cơ sở dữ liệu
Đ i tố hướng tiếp cận phân từng thông dụng ượng ng
trao đ i d ổi thì khả năng ảnh hưởng của nó đến các
li u: ệm riêng POJO
Trang 7Đối tượng trao đổi dữ liệu (POJO) đơn giản
• POJO: Plain Old Java Object
• Mỗi lớp POJO đại diện cho bảng trong cơ sở dữ liệu
• Mỗi lớp POJO gồm những thành phần sau:
– Các thuộc tính tương ứng với các cột trong bảng – Tối thiểu một phương thức khởi tạo mặc định
– Nên viết thêm phương thức khởi tạo đầy đủ tham số
– Các phương thức cung cấp và cập nhật thông tin cho từng thuộc tính (get/set)
Trang 8Đối tượng trao đổi dữ liệu (POJO) đơn giản
Trang 9Đối tượng trao đổi dữ liệu (POJO) đơn giản
nhanvien
phongban
NhanVien
PhongBan
Trang 10public class PhongBan implements Serializable {
private int MAPHG;private String TENPHG;
//Các ph ương thức khởi tạo ng th c kh i t o ức khởi tạo ởi tạo ạo
public PhongBan() {}
public PhongBan(int maPhongBan, String tenPhongBan) { this.MAPHG = maPhongBan;
this.TENPHG = tenPhongBan;
}
// Các ph ương thức khởi tạo ng th c get/set ức khởi tạo
public String getTenPhong() { return this.TENPHG;
}public void setTenPhong (String tenphong) { this.TENPHG = tenphong;
}}
Trang 11//Các ph ương thức khởi tạo ng th c kh i t o ức khởi tạo ởi tạo ạo
Trang 12Tầng dữ liệu (DAO)
• M i DAO đ i di n cho m t b ng bên d ỗi tầng chịu trách nhiệm riêng ại diện cho một bảng bên dưới CSDL ệm riêng ột số hướng tiếp cận phân từng thông dụng ản ướng tiếp cận phân tầng trong phần mềm i CSDL
• M i DAO th ỗi tầng chịu trách nhiệm riêng ường chứa những phương thức như: ng ch a nh ng ph ứa những phương thức như: ươn giản ng th c nh : ứa những phương thức như: ư
– Thêm, xoá, s a d li u ửa dữ liệu ữ liệu ệu
– Rút trích d li u ữ liệu ệu
– Các ph ươn giản ng th c truy xu t d li u h tr cho nghi p v ứa những phương thức như: ấp nhất nhất có thể có ệm riêng ỗi tầng chịu trách nhiệm riêng ợng ệm riêng ụng
• M i ph ỗi tầng chịu trách nhiệm riêng ươn giản ng th c trong DAO có các tham s đ u vào và các ứa những phương thức như: ố hướng tiếp cận phân từng thông dụng ầng trong phần mềm
k t qu tr ra là: ếp cận phân tầng trong phần mềm ản ản
– Đ i t ối tượng POJO, mảng POJO ượng POJO, mảng POJO ng POJO, m ng POJO ảng POJO (ArrayList<POJO>)
– Ki u d li u đ n gi n nh : ể có ệm riêng ơn giản ản ư boolean,int, String, float,
Trang 13Tầng dữ liệu (DAO)
Trang 14Tầng dữ liệu (DAO)
Trang 15Xây dựng lớp hỗ trợ kết nối và truy xuất CSDL – MySQLDataHelper
• M c đích: ụng
– T p trung hoá các thao tác m k t n i c s d li u, th c hi n các ận phân tầng trong phần mềm ởng của nó đến các ếp cận phân tầng trong phần mềm ố hướng tiếp cận phân từng thông dụng ơn giản ởng của nó đến các ệm riêng ực hiện các ệm riêng truy v n (thêm, xoá, s a, đ c, tìm ki m, …) do m t l p qu n lý ấp nhất nhất có thể có ử ọc, tìm kiếm, …) do một lớp quản lý ếp cận phân tầng trong phần mềm ột số hướng tiếp cận phân từng thông dụng ớng tiếp cận phân tầng trong phần mềm ản nâng cao kh năng tái s d ng và b o trì ản ử ụng ản
Xây d ng l p ựng lớp ớp MySQLDataHelper
M t s tên g i khác: DataService, DataProvider ột số tên gọi khác: DataService, DataProvider ố tên gọi khác: DataService, DataProvider ọi khác: DataService, DataProvider
M t s ph ột số hướng tiếp cận phân từng thông dụng ố hướng tiếp cận phân từng thông dụng ươn giản ng th c c b n c n xây d ng: ứa những phương thức như: ơn giản ản ầng trong phần mềm ực hiện các
- M k t n i ở kết nối ết nối ố tên gọi khác: DataService, DataProvider
- Đóng k t n i ết nối ố tên gọi khác: DataService, DataProvider
- Th c thi câu l nh SQL ực thi câu lệnh SQL ệnh SQL
- Th c thi stored procedur ực thi câu lệnh SQL e
Trang 16private Connection connection;
public void open() {
Trang 17import java.sql.Connection; import java.sql.Driver;
import java.sql.DriverManager; import java.sql.ResultSet;
import java.sql.Statement; import java.util.Properties;
public class MySQLDataAccessHelper {
info.setProperty("characterEncoding", "utf-8");
info.setProperty("user", "root");
info.setProperty("password", "");
this.connection = DriverManager.getConnection(url, info); } catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
Trang 20PhongBanDAO.java
• Xây d ng l p truy c p d li u PhongBanDAO v i các ực hiện các ớng tiếp cận phân tầng trong phần mềm ận phân tầng trong phần mềm ệm riêng ớng tiếp cận phân tầng trong phần mềm
ph ươn giản ng th c: ứa những phương thức như:
(String tenPhongBan)
L u ý: Tuỳ theo nghi p v mà l p truy c p d li u có nh ng ph ư ệm riêng ụng ớng tiếp cận phân tầng trong phần mềm ận phân tầng trong phần mềm ệm riêng ươn giản ng
th c khác VD: ứa những phương thức như:
Trang 21public class PhongBanDAO {
public static ArrayList<PhongBan> layDanhSachPhongBan() {
ArrayList<PhongBan> ds = new ArrayList<PhongBan>();
try {
String sql = "SELECT * FROM PHONGBAN";
MySQLDataAccessHelper helper = new MySQLDataAccessHelper();
Trang 27NhanVienDAO.java
• L y danh sách nhân viên ấp nhất nhất có thể có
• L y thông tin chi ti t c a nhân viên d a trên mã nhân viên ấp nhất nhất có thể có ếp cận phân tầng trong phần mềm ủa hướng tiếp cận phân tầng ực hiện các
• Ki m tra xem nhân viên đã t n t i ch a ể có ồn ại diện cho một bảng bên dưới CSDL ư
• Thêm nhân viên
• Xóa nhân viên
• C p nh t nhân viên ận phân tầng trong phần mềm ận phân tầng trong phần mềm
Trang 28Tầng giao diện (GUI)
• Có nhi u lo i giao di n: ềm ại diện cho một bảng bên dưới CSDL ệm riêng
– Giao di n ệm riêng WEB
– Giao di n ệm riêng Window
– Giao di n ệm riêng Mobile
Trang 29Tầng giao diện (GUI)
Trang 30Tầng giao diện (GUI)
Trang 31VD 1: Chức năng Xem danh sách phòng ban
PhongBan
DB
PB1_GetListPhongBan GUI
Trang 32import javax.swing.table.DefaultTableModel; import pojo.PhongBan;
public class PB1_GetListPhongBan extends JInternalFrame {
initComponents();
ArrayList<PhongBan> dsPhongBan = PhongBanDAO.layDanhSachPhongBan();
String[] columns = new String [] { "Mã Phòng" , "Tên Phòng" };
DefaultTableModel model = new DefaultTableModel( null , columns);
for (PhongBan p: dsPhongBan) {
Object [] items = new Object [] {
Trang 33VD 2: Chức năng Thêm phòng ban
Trang 34private void initComponents() { … }
private void jbtnThemPhongActionPerformed(java.awt.event.ActionEvent evt) {
String tenphong = jtxtTENPHG.getText();
PhongBan p = newPhongBan();
private javax.swing.JButton jbtnThemPhong;
private javax.swing.JTextField jtxtTENPHG;
…
}
Trang 37int maphong = Integer.parseInt(jtxtMaPhong.getText());
String tenphong = jtxtTenPhong.getText();
PhongBan p = new PhongBan (maphong, tenphong);