Tải bản đầy đủ (.pptx) (37 trang)

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

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.61 MB, 37 trang )

LOGO

Phát triển UD CSDL 2

Chương 5:

Lập trình theo mô hình 2 lớp với
JAVA


Nội dung







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ô hình 2 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 thanh 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 ra của môi tầng nen ro rang va dê sư dụng.
Khi một tầng bi thay đôi thì khả nang ảnh hương của no đến cac tầng khac th âp nh ât nh ât co thê co.


Vai trò của 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 nguôn
Dê bảo trì hẹ thống
Dê dang phân chia công viẹc trong nhom


Một số mô hình phân tầng






2 Layer / 2 Tier
3 Layer / 3 Tier
N Layer / N Tier


Mô hình 2 tầng đơn giản
Tầng giao diện
Đối tượng trao đôi dư
liẹu: POJO

Tầng truy cập dữ liệu

Cơ sở dữ 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 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)


Đố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

1

package pojo;

2

import java.io.Serializable;

3

public class PhongBan implements Serializable {
private int MAPHG;

4

private String TENPHG;

5

//Các phương thức khởi tạo

6

public PhongBan() {


7

}

8

public PhongBan(int maPhongBan, String tenPhongBan) {

9

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

}
}


POJO: NhanVien

1

package pojo;

2

import java.io.Serializable;

3


public class NhanVien implements Serializable {

4

//Các thuộc tính

5

private int MANV;

6

private String HOTEN;

7

private String PHAI;

8

private Date NGAYSINH;

9

private String DIACHI;

10

private float LUONG;


11

private int PHONG;

12

private Boolean TRANGTHAI;

13
14

//Các phương thức khởi tạo

15



16



17

// Các phương thức get/set

18




19



20

}


Tầng dữ liệu (DAO)




Môi DAO đại diẹn cho một bảng ben dưới CSDL
Môi DAO thường chứa nhưng phương thức như:







Thêm, xoá, sửa dữ liệu
Rut trích dữ liệu
Cac phương thức truy xuât dư liẹu hô trợ cho nghiẹp vụ

Môi phương thức trong DAO co cac tham số đầu vao va cac kết quả trả ra la:





Đối tượng POJO, mang POJO (ArrayList<POJO>)
Kiêu dư liẹu đơn giản như: boolean,int, String, float, ...


Tầng dữ liệu (DAO)

*.java

XXXDAO

YYYDAO

ZZZDAO

POJOs
JDBC

DB

XXXTable

YYYTable

ZZZTable


Tầng dữ liệu (DAO)


*.java
NhanVienDAO.java

NhanVienDAO

PhongBanDAO.java

PhongBanDAO

POJOs
JDBC

DB

NhanVien

PhongBan


Xây dựng lớp hỗ trợ kết nối và truy xuất CSDL – MySQLDataHelper



Mục đích:



Tập trung hoa cac thao tac mơ kết nối cơ sơ dư liẹu, thực hiẹn cac truy vân (them, xoa, s ưa, đọc, tìm ki ếm, …) do
một lớp quản ly  nâng cao khả nang tai sư dụng va bảo trì.


Xây dựng lớp MySQLDataHelper
Một số tên gọi khác: DataService, DataProvider

Một số phương thức cơ bản cần xây dựng:

-

Mở kết nối
Đóng kết nối
Thực thi câu lệnh SQL
Thực thi stored procedure



MySQLDataHelper – Overview

1

package dao;

2

 

3

import …;

4
5

6

public class MySQLDataAccessHelper {
 
private Connection connection;

7

public void open() {

8



9

}

10

public void close() {

11



12

}


13

public ResultSet executeQuery(String sql) {

14



15

}

16

public int executeUpdate(String sql) {


17
}

18
19
20

}


MySQLDataHelper – Details (1)

1


package dao;

2

import java.sql.Connection; import java.sql.Driver;

3

import java.sql.DriverManager; import java.sql.ResultSet;

4

import java.sql.Statement; import java.util.Properties;

5

public class MySQLDataAccessHelper {

6

    private Connection connection;

7

    public void open() {

8
9
10

11
12
13
14
15
16
17
18
19
20

        try {
            Driver d = new org.gjt.mm.mysql.Driver();
            DriverManager.registerDriver(d);
            String url = "jdbc:mysql://localhost:3306/nhanviendb";
            Properties info = new Properties();
            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());
        }
    }


MySQLDataHelper – Details (2)
21
22
23

24
25
26
27
28

    public void close() {
        try {
            this.connection.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

29
30

    public ResultSet executeQuery (String sql) {

31

        ResultSet rs = null;

32

        try {

33

            Statement sm = this.connection.createStatement();


34

            rs = sm.executeQuery(sql);

35

        } catch (Exception ex) {

36

            System.out.println(ex.getMessage());

37

        }

38

        return rs;
    }


MySQLDataHelper – Details (3)

39
40
41
42
43

44
45
46
47
48
49
50
51

    public int executeUpdate(String sql) {
        int n = -1;
        try {

            Statement sm = this.connection.createStatement();
            n = sm.executeUpdate(sql);

        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
        return n;
    }
}


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<PhongBan> layDanhSachPhongBan()
public static ArrayList<PhongBan> timKiemPhongBanTheoTen (String tenPhongBan)
public static boolean themPhongBan(PhongBan pb)
public static boolean xoaPhongBan(int maPhongBan)
public static boolean capNhatPhongBan(PhongBan pb)
public static PhongBan layPhongBan (int maPhong)

Lưu y: Tuỳ theo nghiẹp vụ ma lớp truy cập dư liẹu co nhưng phương th ức khac. VD:




public static boolean kiemTraTonTai(int maPhongBan)



1

package dao;

2

import java.sql.ResultSet;


3

import java.util.ArrayList;

4

import pojo.PhongBan;

5

public class PhongBanDAO {

6

PhongBanDAO.java (1)

public static ArrayList<PhongBan> layDanhSachPhongBan() {

7

ArrayList<PhongBan> ds = new ArrayList<PhongBan>();

8

try {

9

String sql = "SELECT * FROM PHONGBAN";


10

MySQLDataAccessHelper helper = new MySQLDataAccessHelper();
helper.open();

11

ResultSet rs = helper.executeQuery(sql);

12

while (rs.next()) {

13

PhongBan pb = new PhongBan();

14

pb.setMAPHG(rs.getInt("MAPHG"));

15

pb.setTENPHG(rs.getString("TENPHG"));

16

ds.add(pb);


17
}

18

helper.close();

19

} catch (Exception ex) {

20

System.out.println(ex.getMessage());

21

}

22
23
24

return ds;
}


1
2
3


public static ArrayList<PhongBan> timKiemPhongBanTheoTen(
String tenPhongBan) {

4
5

ArrayList<PhongBan> ds = new ArrayList<PhongBan>();

6

try {

7

String sql = "SELECT * FROM phongban WHERE TENPHG LIKE '%" + tenPhongBan + "%'";

8

MySQLDataAccessHelper helper = new MySQLDataAccessHelper();

9

helper.open();

10

ResultSet rs = helper.executeQuery(sql);
while (rs.next()) {


11

PhongBan pb = new PhongBan();

12

pb.setMAPHG(rs.getInt("MAPHG"));

13

pb.setTENPHG(rs.getString("TENPHG"));

14

ds.add(pb);

15
}

16

helper.close();

17

} catch (Exception ex) {

18

System.out.println(ex.getMessage());


19

}

20
21
22
23
24

return ds;
}

PhongBanDAO.java (2)


PhongBanDAO.java (3)
1
2

public static boolean themPhongBan(PhongBan pb) {

3

boolean kq = false;

4

String sql = String.format(

"INSERT INTO phongban(TENPHG) VALUES ('%s');", pb.getTENPHG());

5
6

MySQLDataAccessHelper helper = new MySQLDataAccessHelper();

7

helper.open();

8

int n = helper.executeUpdate(sql);

9

if (n == 1) {

10

kq = true;
}

11

helper.close();

12


return kq;

13
14
15

}


PhongBanDAO.java (4)
1
2

public static boolean xoaPhongBan(int maPhongBan) {

3

boolean kq = false;

4

String sql = String.format("DELETE FROM PHONGBAN WHERE MAPHG=%d", maPhongBan);

5

MySQLDataAccessHelper helper = new MySQLDataAccessHelper();

6

helper.open();


7

int n = helper.executeUpdate(sql);

8

if (n == 1) {

9

kq = true;
}

10

helper.close();

11

return kq;

12
13
14

}


PhongBanDAO.java (5)

1
2

public static boolean capNhatPhongBan(PhongBan pb) {

3

boolean kq = false;

4

String sql = String.format(

5

"UPDATE PHONGBAN SET TENPHG ='%s' WHERE MAPHG = %d",

6

pb.getTENPHG(), pb.getMAPHG());

7

MySQLDataAccessHelper helper = new MySQLDataAccessHelper();

8

helper.open();

9


int n = helper.executeUpdate(sql);

10

if (n == 1) {
kq = true;

11
}

12

helper.close();

13

return kq;

14
15
16

}


×