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.
LOGO Phát triển UD CSDL Chương 5: Lập trình theo mơ hình lớp với JAVA Nội dung • • • • • Hướng tiếp cận phân tầng phần mềm Vai trò hướng tiếp cận phân tầng Một số hướng tiếp cận phân thông dụng Mô hình tầng đơn giản Một số ví dụ Hướng tiếp cận phân tầng • • Chia phần mềm cac tầng (layer) Khi thiết kế cần lưu y: – – – Môi tầng chiu trach nhiẹm rieng Dư liẹu đầu vao va đầu môi tầng nen ro rang va dê sư dụng Khi tầng bi thay đơi khả nang ảnh hương no đến cac tầng khac th âp nh ât nh ât co thê co Vai trò hướng tiếp cận phân tầng • • • • Săn sang cho viẹc mơ rộng hẹ thống Tai sư dụng ma ngn Dê bảo trì hẹ thống Dê dang phân chia công viẹc nhom Một số mơ hình phân tầng • • • Layer / Tier Layer / Tier N Layer / N Tier Mơ hình tầng đơn giản Tầng giao diện Đối tượng trao đôi dư liẹu: POJO Tầng truy cập liệu Cơ sở liệu Đố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 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 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) Đối tượng trao đổi dữ liệu (POJO) đơn giản Database XXXTable YYYTable ZZZTable *.java XXXPOJO YYYPOJO ZZZPOJO Đối tượng trao đổi dữ liệu (POJO) đơn giản nhanvien NhanVien phongban PhongBan POJO: PhongBan package pojo; import java.io.Serializable; public class PhongBan implements Serializable { private int MAPHG; private String TENPHG; //Các phương thức khởi tạo public PhongBan() { } public PhongBan(int maPhongBan, String tenPhongBan) { this.MAPHG = maPhongBan; 10 this.TENPHG = tenPhongBan; 11 } 12 // Các phương thức get/set 13 public String getTenPhong() { 14 return this.TENPHG; } 15 public void setTenPhong (String tenphong) { 16 this.TENPHG = tenphong; 17 18 19 } } PhongBanDAO.java (3) public static boolean themPhongBan(PhongBan pb) { boolean kq = false; String sql = String.format( "INSERT INTO phongban(TENPHG) VALUES ('%s');", pb.getTENPHG()); MySQLDataAccessHelper helper = new MySQLDataAccessHelper(); helper.open(); int n = helper.executeUpdate(sql); if (n == 1) { 10 kq = true; } 11 helper.close(); 12 return kq; 13 14 15 } PhongBanDAO.java (4) public static boolean xoaPhongBan(int maPhongBan) { boolean kq = false; String sql = String.format("DELETE FROM PHONGBAN WHERE MAPHG=%d", maPhongBan); MySQLDataAccessHelper helper = new MySQLDataAccessHelper(); helper.open(); int n = helper.executeUpdate(sql); if (n == 1) { kq = true; } 10 helper.close(); 11 return kq; 12 13 14 } PhongBanDAO.java (5) public static boolean capNhatPhongBan(PhongBan pb) { boolean kq = false; String sql = String.format( "UPDATE PHONGBAN SET TENPHG ='%s' WHERE MAPHG = %d", pb.getTENPHG(), pb.getMAPHG()); MySQLDataAccessHelper helper = new MySQLDataAccessHelper(); helper.open(); int n = helper.executeUpdate(sql); 10 if (n == 1) { kq = true; 11 } 12 helper.close(); 13 return kq; 14 15 16 } PhongBanDAO.java (6) public static PhongBan layPhongBan (int maPhong){ PhongBan pb = null; try { String sql = "SELECT * FROM phongban WHERE MAPHG =" + maPhong; MySQLDataAccessHelper helper = new MySQLDataAccessHelper(); helper.open(); ResultSet rs = helper.executeQuery(sql); if (rs.next()) { pb = new PhongBan(); 10 pb.setMAPHG(rs.getInt("MAPHG")); pb.setTENPHG(rs.getString("TENPHG")); 11 } 12 helper.close(); 13 } catch (Exception ex) { 14 System.out.println(ex.getMessage()); 15 } 16 return pb; } } NhanVienDAO.java • • • • • • Lây danh sach nhân vien Lây thông tin chi tiết nhân vien dựa tren ma nhân vien Kiêm tra xem nhân vien đa tôn chưa Them nhân vien Xoa nhân vien Cập nhật nhân vien Tầng giao diện (GUI) • Co nhiều loại giao diẹn: – – – Giao diẹn WEB Giao diẹn Window Giao diẹn Mobile Tầng giao diện (GUI) Màn hình giao diện *.java XXXDAO YYYDAO ZZZDAO POJOs JDBC DB XXXTable YYYTable ZZZTable Tầng giao diện (GUI) *.java NhanVienDAO.java NhanVienDAO PhongBanDAO.java PhongBanDAO POJOs JDBC DB NhanVien PhongBan VD 1: Chức Xem danh sách phòng ban PB1_GetListPhongBan GUI PhongBanDAO DAO DB PhongBan layDanhSachPhongBan(); GUI: PB1_GetListPhongBan package demo2layer; import dao.PhongBanDAO; import java.util.ArrayList; import javax.swing.JInternalFrame; import javax.swing.table.DefaultTableModel; import pojo.PhongBan; public class PB1_GetListPhongBan extends JInternalFrame { public PB1_GetListPhongBan() { initComponents(); ArrayList dsPhongBan = PhongBanDAO.layDanhSachPhongBan(); String[] columns = new String [] { "Ma Phòng", "Ten Phòng" }; 10 DefaultTableModel model = new DefaultTableModel(null, columns); 11 for(PhongBan p: dsPhongBan) { 12 Object [] items = new Object [] { 13 p.getMAPHG(), 14 p.getTENPHG() 15 }; 16 model.addRow(items); 17 } 18 jTable1.setModel(model); 19 } 20 … 21 } VD 2: Chức Thêm phòng ban PB2_InsertPhongBan GUI PhongBanDAO DAO DB PhongBan themPhongBan(); GUI: PB2_InsertPhongBan package demo2layer; import dao.PhongBanDAO; import javax.swing.JOptionPane; import pojo.PhongBan; public class PB2_InsertPhongBan extends javax.swing.JInternalFrame { public PB2_InsertPhongBan() { initComponents(); } private void initComponents() { … } private void jbtnThemPhongActionPerformed(java.awt.event.ActionEvent evt) { 10 11 String tenphong = jtxtTENPHG.getText(); 12 PhongBan p = new PhongBan(); 13 p.setTENPHG(tenphong); 14 PhongBanDAO.themPhongBan(p); 15 16 JOptionPane.showMessageDialog(this, "Them công", "Thông bao", JOptionPane.INFORMATION_MESSAGE); 17 } 18 private javax.swing.JButton jbtnThemPhong; 19 private javax.swing.JTextField jtxtTENPHG; 20 … 21 } VD 3: Chức Cập nhật phòng ban PB3_UpdatePhongBan GUI layPhongBan(); PhongBanDAO DAO DB PhongBan capNhatPhongBan(); GUI: PB3_UpdatePhongBan private void btnDocActionPerformed(java.awt.event.ActionEvent evt) { int maphg = Integer.parseInt(jtxtMaPhong.getText()); PhongBan p = PhongBanDAO.layPhongBan(maphg); if (p == null) { JOptionPane.showMessageDialog(this, "Not found !!!", "Error", JOptionPane.ERROR_MESSAGE); } else { jtxtTenPhong.setText(p.getTENPHG()); 10 11 12 13 } } GUI: PB3_UpdatePhongBan private void btnLuuActionPerformed(java.awt.event.ActionEvent evt) { int maphong = Integer.parseInt(jtxtMaPhong.getText()); String tenphong = jtxtTenPhong.getText(); PhongBan p = new PhongBan (maphong, tenphong); PhongBanDAO.capNhatPhongBan(p); JOptionPane.showMessageDialog(this, "Cập nhật công ", "Thông bao", JOptionPane.INFORMATION_MESSAGE); 10 11 } ... System.out.println(ex.getMessage()); } } MySQLDataHelper – Details (2) 21 22 23 24 25 26 27 28 public void close() { try { this.connection.close();... PhongBanDAO .java • Xây dựng lớp truy cập dư liẹu PhongBanDAO với cac phương thức: – – – – – – public static ArrayList layDanhSachPhongBan() public static ArrayList timKiemPhongBanTheoTen... catch (Exception ex) { 18 System.out.println(ex.getMessage()); 19 } 20 21 22 23 24 return ds; } PhongBanDAO .java (2) PhongBanDAO .java (3) public static boolean themPhongBan(PhongBan pb) { boolean