Linq n hibernate net-tier

Preview:

DESCRIPTION

 

Citation preview

04/09/23 1

LINQN-HIBERNATENET-TIER

Nhóm D

GVLT: Th.S Lâm Quang Vũ

GVHD: Nguyễn Huy Khánh

04/09/23 2

Giới thiệu về ORM• Object – Relational Mapping (ORM, O/RM,

O/R mapping)

• Là một kỹ thuật lập trình để chuyển đổi dữ liệu giữa các hệ thống không tương thích trong cơ sở dữ liệu quan hệ và các ngôn ngữ lập trình hướng đối tượng.

04/09/23 3

LINQNhóm D1 + D2

GVLT: Th.S Lâm Quang Vũ

GVHD: Nguyễn Huy Khánh

04/09/23 4

Thành viên nhóm• Nhóm D1: Phạm Ngọc Phú – 0612352 Phan Vũ Liêm – 0612207 Thái Ngân Phụng – 0612358 Nguyễn Thành Luân – 0612234 Lữ Thị Mỹ Phương – 0612339

• Nhóm D2: Lê Thành Dũng – 0512103 Hứa Chí Châu – 0512080 Bùi Việt Dũng – 0512101 Trương Hữ Giang – 0512110 Nguyễn Phước Hiền – 0512113

04/09/23 5

Giới thiệu về LINQ

Lợi ích sử dụng LINQ

Ưu, khuyết điểm của LINQ

Hình ảnh Demo4

1

2

3

Nội dung chính

04/09/23 6

Giới thiệu về LINQ1

LINQ

04/09/23 7

Giới thiệu về LINQ• LINQ (Language Integrated Query) – Ngôn ngữ

truy vấn tích hợp - Ngôn ngữ thống nhất cách thức truy xuất dữ liệu trong .NET.

• Được phát triển từ năm 2003, và được công bố tại Hội nghị Microsoft Professional Developers vào 2005 do Anders Hejlsberg và nhóm của ông đã trình bày.

• Được tích hợp sẵn trong Visual Studio 2008 (.NET 3.5).

04/09/23 8

Giới thiệu về LINQ

• LINQ được phân thành 3 loại:

– LINQ to Objects

– LINQ to XML

– LINQ to SQL

04/09/23 9

Giới thiệu về LINQ

Lợi ích sử dụng LINQ

Ưu, khuyết điểm của LINQ

Hình ảnh Demo4

1

2

3

LINQ

04/09/23 10

Lợi ích sử dụng LINQ2

LINQ

04/09/23 11

Lợi ích sử dụng LINQ• Nó cung cấp một cách chung để truy xuất dữ

liệu từ bất kỳ nguồn nào với cùng một cú pháp.

• Giúp thực hiện truy vấn một cách dễ dàng hơn.

• Được tích hợp như cú pháp của ngôn ngữ lập trình.

04/09/23 12

Giới thiệu về LINQ

Lợi ích sử dụng LINQ

Ưu, khuyết điểm của LINQ

Hình ảnh Demo4

1

2

3

LINQ

04/09/23 13

Ưu, khuyết điểm của LINQ3

LINQ

04/09/23 14

Ưu, khuyết điểm của LINQƯu điểm:

• Lập trình với cơ sở dữ liệu một cách dễ dàng.

• Không cần biết nhiều ngôn ngữ truy vấn khác mà vẫn có thể làm việc.

• Đơn giản hóa việc viết truy vấn.

Khuyết điểm:

• Lệ thuộc vào môi trường lập trình .NET

04/09/23 15

Giới thiệu về LINQ

Lợi ích sử dụng LINQ

Ưu, khuyết điểm của LINQ

Hình ảnh Demo LINQ to SQL4

1

2

3

LINQ

04/09/23 16

Hình ảnh Demo LINQ to SQL4

LINQ

04/09/23 17

Thêm CSDL vào Project

04/09/23 18

Thêm CSDL vào Project

04/09/23 19

Thêm CSDL vào Project

04/09/23 20

Thêm lớp LINQ to SQL

04/09/23 21

Thêm lớp LINQ to SQL

04/09/23 22

Thêm lớp LINQ to SQL

04/09/23 23

Thêm lớp LINQ to SQL

04/09/23 24

Thêm lớp LINQ to SQL

04/09/23 25

Cấu trúc quản lý của LINQ to SQL

04/09/23 26

Thêm, xóa, sửa dữ liệu

04/09/23 27

Load dữ liệu lên FormLoad tất cả thông tin các loại sách ở bảng LoaiSach trong cơ sở dữ liệu lên form.

04/09/23 28

Thêm dữ liệuThêm một loại sách mới vào bảng LoaiSach trong cơ sở dữ liệu.

04/09/23 29

Cập nhật dữ liệuCập nhật thông tin loại sách vào bảng LoaiSach trong cơ sở dữ liệu.

04/09/23 30

Xóa dữ liệuXóa một loại sách ra khỏi bảng LoaiSach trong cơ sở dữ liệu.

04/09/23 31

Truy vấn trên một bảng

Tra cứu thông tin loại sách theo mã loại sách.

04/09/23 32

Truy vấn trên nhiều bảng

Lấy thông tin tên sách, tên loại sách, tác giả, tên nhà xuất bản của tất cả các sách.

04/09/23 33

Sử dụng distinct

Lấy tất cả tên loại sách trong bảng LoaiSach. Mỗi tên chỉ xuất hiện 1 lần.

04/09/23 34

Sử dụng Order By

Sắp xếp tên các loại sách trong bảng LoaiSach theo thứ tự tăng dần.

04/09/23 35

Sử dụng Group By

Ứng với mã loại sách là 1, đếm số lượng sách theo tên sách.

04/09/23 36

Sử dụng joinLấy thông tin tên sách, tên loại sách, tác giả của tất cả các sách.

04/09/23 37

Tham khảo• LINQ for Visual C Sharp 2008 Jun 2008 –

Fabio Claudio Ferracchiati

• Professional LINQ - Scott Klein

04/09/23 38

NHibernateNhóm D3 + D5

GVLT: Th.S Lâm Quang Vũ

GVHD: Nguyễn Huy Khánh

04/09/23 39

Thành viên nhóm• Nhóm D3: Ngô Minh Nhựt – 0612322 Võ Quang Nhật – 0612318 Lê Nguyễn Hoài Nam – 0612276 Huỳnh Công Tín – 0612534 Nguyễn Văn Nhật – 0612314

• Nhóm D5: Trần Nguyễn Hướng – 0412310 Lê Văn Thắng – 0512335 Trương Hoàng Linh – 0412315 Huỳnh Minh Hoàng – 0512126 Tôn Long Thịnh – 0512344

04/09/23 40

Giới thiệu

Sử dụng NHibernate

Ưu, khuyết điểm4

1

2

Nội dung chính

04/09/23 41

Giới thiệu• Hibernate: là Framework mở nguồn mở hỗ

trợ truy xuất CSDL cho các ứng dụng hướng đối tượng sử dụng CSDL quan hệ

• NHibernate: dành cho ứng dụng .NET

• Là các DLL chứa các lớp đối tượng

04/09/23 42

NHibernate trong mô hình 3 lớp:

Giới thiệu

04/09/23 43

Giới thiệu

• NHiberate có nhiệm vụ chuyển đổi dữ liệu giữa ứng dụng và CSDL: – Đọc – Ghi• Ánh xạ CSDL vào NHibernate dựa vào tập tin

hibernate.cfg.xml• Ánh xạ giữa lớp và bảng dựa vào tập tin cấu

hình *.hbm.xml

04/09/23 44

Giới thiệu

Lịch sử:

- Được bắt đầu bởi: Tom Barrett

- 2005, JBoss, Inc. (thuộc Red Hat) đầu tư phát triển dựa án này

- 2006 JBoss ngừng hỗ trợ

- Hiện tại, NHibernate được phát triển chung

- www.hibernate.com/343.html

04/09/23 45

Giới thiệu

Lịch sử: các phiên bản

• NHibernate 1.2.1: 11/2007, hỗ trợ .NET 2.0

• NHibernate 2.1: đang được phát triển

• NHibernate 3.0: phiên bản dự kiến dành

cho .Net 3.5

04/09/23 46

Giới thiệu

Sử dụng NHibernate

Ưu, khuyết điểm4

1

2

Nội dung chính

04/09/23 47

Sử dụng NHibernate

Cài đặtTạo Project, add referenceTạo CSDL và các lớp đối tượngTạo các tập tin cấu hìnhTruy xuất dữ liệu

04/09/23 48

Sử dụng NHibernate

Cài đặtTạo Project, add referenceTạo CSDL và các lớp đối tượngTạo các tập tin cấu hìnhTruy xuất dữ liệu

04/09/23 49

Cài đặt

Download NHibernate tại: www.hibernate.com/6.html

Chép thư mục chứa DLL vào thư mục chứa Project

04/09/23 50

Sử dụng NHibernate

Cài đặtTạo Project, add referenceTạo CSDL và các lớp đối tượngTạo các tập tin cấu hìnhTruy xuất dữ liệu

04/09/23 51

Tạo Project, add reference

Tạo Project, Add reference, Browse đến thư mục chứa các DLL của NHibernate

04/09/23 52

Sử dụng NHibernate

Cài đặtTạo Project, add referenceTạo CSDL và các lớp đối tượngTạo các tập tin cấu hìnhTruy xuất dữ liệu

04/09/23 53

Tạo CSDL và các lớp đối tượng

Tạo CSDL quan hệ

04/09/23 54

Tạo CSDL và các lớp đối tượng

Tạo các lớp đối tượng tương ứng với các bảng của CSDL

04/09/23 55

Sử dụng NHibernate

Cài đặtTạo Project, add referenceTạo CSDL và các lớp đối tượngTạo các tập tin cấu hìnhTruy xuất dữ liệu

04/09/23 56

Tạo các tập tin cấu hìnhTạo tập tin cấu hình hibernate.cfg.xml

Giúp cho NHibernate biết cần phải liên kết với CSDL nào

<?xml version="1.0" ?>

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >

<session-factory>

<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>

<property name="dialect">NHibernate.JetDriver.JetDialect, NHibernate.JetDriver</property>

<property name="connection.driver_class">NHibernate.JetDriver.JetDriver, NHibernate.JetDriver</property>

<property name="connection.connection_string">Provider=Microsoft.Jet.OLEDB.4.0;Data Source=QuanLyThuVien.mdb</property>

</session-factory>

</hibernate-configuration>`

04/09/23 57

Tạo các tập tin cấu hìnhTạo tập tin cấu hình hibernate.cfg.xml

<property name="connection.connection_string“> Provider=Microsoft.Jet.OLEDB.4.0;Data Source=QuanLyThuVien.mdb</property>

- Chuỗi kết nối đến CSDL

04/09/23 58

Tạo các tập tin cấu hìnhTạo các tập tin ánh xạ *.hbm.xml• Mỗi lớp có một tập tin ánh xạ tương ứng:

[TenLop].hbm.xml

04/09/23 59

Tạo các tập tin cấu hìnhTạo các tập tin ánh xạ *.hbm.xml

<class name="DTO.SachDto,DTO" table="Sach“>

<id name="MSach" column="MSach" type="int“><generator class="increment" />

</id>

<property name="TenSach" column="TenSach" type="String" />

04/09/23 60

Sử dụng NHibernate

Cài đặtTạo Project, add referenceTạo CSDL và các lớp đối tượngTạo các tập tin cấu hìnhTruy xuất dữ liệu

04/09/23 61

Truy xuất dữ liệu

Ánh xạ lớp đối tượng và CSDL

Kết nối với CSDL

Thực hiện các thao tác với CSDL

Đóng kết nối với CSDL

04/09/23 62

Truy xuất dữ liệu

Ánh xạ lớp đối tượng và CSDL

Kết nối với CSDL

Thực hiện các thao tác với CSDL

Đóng kết nối với CSDL

04/09/23 63

Ánh xạ lớp đối tượng và CSDL

Load file cấu hình và file ánh xạ, thực hiện

ánh xạ và trả về đối tượng ISessionFactory.

04/09/23 64

Truy xuất dữ liệu

Ánh xạ lớp đối tượng và CSDL

Kết nối với CSDL

Thực hiện các thao tác với CSDL

Đóng kết nối với CSDL

04/09/23 65

Kết nối CSDL

Đối tượng session giữ kết nối với CSDL và

thực hiện các thao tác đọc ghi trên CSDL

04/09/23 66

Truy xuất dữ liệu

Ánh xạ lớp đối tượng và CSDL

Kết nối với CSDL

Thực hiện các thao tác với CSDL

Đóng kết nối với CSDL

04/09/23 67

Thực hiện các thao tác với CSDL

04/09/23 68

Thực hiện các thao tác với CSDL – select

IList lst = session.Find(“from DTO.DocGiaDto”);

// Đọc tất cả các record trong bảng DocGia

DocGiaDto dg = session.Load<DocGiaDto>(maDG);

dg.HoTen = “NMN”;

// Lấy ra một record từ bảng DocGia

04/09/23 69

Thực hiện các thao tác với CSDL – insert

DocGiaDto dg = new DocGiaDto();

dg.HoTen = “NMN”;

dg.GioiTinh = 1;

// …

session.Save(dg);

// Lưu đọc giả dg vào bảng DocGia

04/09/23 70

Thực hiện các thao tác với CSDL – delete

DocGiaDto dg = session.Load<DocGiaDto>(maDg);

session.Delete(dg);

// Xóa đọc giả “dg” khỏi bảng DocGia

04/09/23 71

Thực hiện các thao tác với CSDL – update

DocGiaDto dg = session.Load<DocGiaDto>(maDg);

dg.HoTen = “Cập nhật”;

session.Update(dg);

// Cập nhật thông tin đọc giả “dg”

04/09/23 72

Thực hiện các thao tác với CSDL – SqlQuery

String strSql = “select s.TenSach, ls.TenLoaiSach, s.TacGia from Sach s inner join LoaiSach ls on s.LoaiSach = ls.MLoaiSach where s.TrangThai=true”

/* Lấy về sách (Tên sách, tên loại sách, tác giả) chưa được mượn */

ISQLQuery query = session.CreateSQLQuery(strSql);

query.AddScalar(“TenSach",NHibernateUtil.String);

query.AddScalar(“TenLoaiSach",NHibernateUtil.String);

query.AddScalar(“TacGia",NHibernateUtil.String);

IList lst = query.List();

/* lst chứa danh sách những quyển sách tìm được */

04/09/23 73

Thực hiện các thao tác với CSDL – SqlQuery

String strSql = “select * from DocGia where HoTen = ?”

/* Tìm độc giả theo tên */

ISQLQuery query = session.CreateSQLQuery(strSql);

query.SetString(“NMN”); // Set Parameters

query. AddEntity(typeof(DocGiaDto));

IList lst = query.List();

/* lst chứa danh sách độc giả có tên “NMN”*/

04/09/23 74

Thực hiện các thao tác với CSDL

transaction.Commit();

Cập nhật các thay đổi xuống CSDL

transaction.Rollback();

Hủy bỏ các thay đổi

04/09/23 75

Truy xuất dữ liệu thông qua NHibernate

Ánh xạ lớp đối tượng và CSDL

Kết nối với CSDL

Thực hiện các thao tác với CSDL

Đóng kết nối với CSDL

04/09/23 76

Đóng kết nối với CSDL

04/09/23 77

Giới thiệu

Sử dụng NHibernate

Ưu, khuyết điểm4

1

2

Nội dung chính

04/09/23 78

Ưu, khuyết điểm

Ưu điểm• Hỗ trợ nhiều loại cơ sở dữ liệu (multi – database

support)• Giảm gánh nặng viết mã nguồn giao tiếp với cơ

sở dữ liệu• Cung cấp nhiều phương thức truy xuất CSDL

04/09/23 79

Ưu, khuyết điểm

Khuyết điểm:• Người dùng NHibernate phải học cách viết tập tin

mapping.• Việc truy xuất CSDL đôi khi không tối ưu, dẫn đến tốc độ

thực thi chậm, ảnh hưởng performance của phần mềm.• Khó debug phần truy xuất cơ sở dữ liệu• Gặp không ít khó khăn trong khi cấu hình

04/09/23 80

Tham khảo

http://www.hibernate.com

http://en.wikipedia.org/wiki/NHibernate

http://www.codeproject.com/KB/architecture/

NHibernateArchitecture.aspx

http://www.codeproject.com/KB/database/

Nhibernate_Made_Simple.aspx

04/09/23 81

NET – TIERNhóm D4 + D6

GVLT: Th.S Lâm Quang Vũ

GVHD: Nguyễn Huy Khánh

04/09/23 82

Thành viên nhóm• Nhóm D4: Nguyễn Hải Đăng - 0512438 Đào Duy Minh Đăng – 0512439 Phan Xuân Đình – 0512444 Nguyễn Lê Thanh Thảo – 0612418 Huỳnh Thanh Tuyền – 0612494

• Nhóm D6: Nguyễn Thành Trung – 0612468 Huỳnh Minh Trác – 0612482 Nguyễn Hữu Trí – 0612485 Vũ Ngọc Yến Vũ – 0612584

04/09/23 83

Giới thiệu công cụ CodeSmith

Giới thiệu netTiers

Demo netTiers3

1

2

Nội dung chính

04/09/23 84

CÔNG CỤ CODESMITH

Giới thiệu Công cụ phát sinh mã dựa trên template

có sẵn. Hỗ trợ ngôn ngữ: C#, VB.NET, Java, T-

SQL, FORTRAN. Cú pháp viết giống ASP.NET.

04/09/23 85

CÔNG CỤ CODESMITH

Template là gì? Là một khung mẫu do người dùng định

nghĩa theo ngôn ngữ của CodeSmith.

04/09/23 86

CÔNG CỤ CODESMITH STUDIO

Công cụ CodeSmith Studio Giúp soạn thảo, biên dịch và thực thi một

template. Hỗ trợ soạn thảo nhanh chóng giống như

Visual Studio.Net.

04/09/23 87

Menu bar

Tool bar

Cửa sổ chính

Templete Explorer

Tab Templetet

Tab Output

04/09/23 88

CÔNG CỤ CODESMITH EXPLORER

Công cụ CodeSmith Explorer Giúp phát sinh mã từ một template. Tổ chức, quản lý các thư mục chứa file

template (cst).

04/09/23 89

CÔNG CỤ CODESMITH EXPLORER

04/09/23 90

NETTIERSGiới thiệu Là một tập các template (nguồn mở)

dùng để phát sinh mã. Giúp đơn giản hóa việc tạo mới một ứng dụng chỉ trong vài phút.

Dựa trên công cụ CodeSmith để phát sinh ra mã.

Cung cấp cho người phát triển 1 framework đầy đủ để phát triển ứng dụng.

04/09/23 91

NETTIERS

Kiến trúc .netTiers

04/09/23 92

Demo

Bước 1: Khởi động CODESMITH EXPLORER, mở template

nettiers.

Bước 2: Nhập các thông tin của dự án.

Bước 3: genarate code.

04/09/23 93Company Name

04/09/23 94

04/09/23 95

Demo

Add >> New item >> Application Configuration File

Copy nội dung từ file: NetTiers\*.UnitTests\ *.UnitTests.dll.config

Bước 4: Thêm project mới vào cho dự án, cấu hình cho project:

04/09/23 96

Bước 5: Thiết kế giao diện

04/09/23 97

AccountService accountsService = new AccountsService();

//GetAll()

TList<Accounts> accountList = accountsService.GetAll();

//GetPagedl()

TList<Accounts> accountList = accountsService.GetPaged("IsActive = 1 AND AccountName LIKE 'smi%'");

//GetByFk()

TList<Accounts> accountList = accountsService.GetByCustomerId(25);

………………………………………………………………….

AccountService accountsService = new AccountsService();

//GetAll()

TList<Accounts> accountList = accountsService.GetAll();

//GetPagedl()

TList<Accounts> accountList = accountsService.GetPaged("IsActive = 1 AND AccountName LIKE 'smi%'");

//GetByFk()

TList<Accounts> accountList = accountsService.GetByCustomerId(25);

………………………………………………………………….

Bước 6: Viết code select, insert, delete, update dữ liệu

04/09/23 98

04/09/23 99

04/09/23 100

//Insert()

Account accountEntity = new Account();

accountEntity.AccountName = "MyAccountName";

accountEntity.CreatedDate = DateTime.Now;

accountsService.Insert(accountEntity);

//Insert()

Account accountEntity = new Account();

accountEntity.AccountName = "MyAccountName";

accountEntity.CreatedDate = DateTime.Now;

accountsService.Insert(accountEntity);

04/09/23 101

//Delete()

bool result = accountsService.Delete(23);

//Delete()

bool result = accountsService.Delete(23);

DangKyService dkSer = new DangKyService();

dkSer.Delete(m.Isbn, m.MaDocgia);

DangKyService dkSer = new DangKyService();

dkSer.Delete(m.Isbn, m.MaDocgia);

04/09/23 102

//Update()

accountEntity.AccountName = "MyAccountName 2"; accountsService.Update(accountEntity);

//Update()

accountEntity.AccountName = "MyAccountName 2"; accountsService.Update(accountEntity);

CuonSachService csSer = new CuonSachService();

CuonSach cs = csSer.GetByIsbnMaCuonSach(m.Isbn, m.MaCuonsach);

cs.TinhTrang = "Y";

csSer.Update(cs);

CuonSachService csSer = new CuonSachService();

CuonSach cs = csSer.GetByIsbnMaCuonSach(m.Isbn, m.MaCuonsach);

cs.TinhTrang = "Y";

csSer.Update(cs);

04/09/23 103

Vấn đề select từ nhiều bảng dữ liệu

Danh sách các độc giả đang đăng ký mượn sách, hiển thị các thông tin: họ tên độc giả, tựa sách, ngày giờ đăng ký

04/09/23 104

04/09/23 105

Tham Khảo

http://patternshare.org/default.aspx/Home.PP.Singleton

http://www.dofactory.com/Patterns/PatternDecorator.aspx

http://www.NetTiers.com

http://docs.nettiers.com/

http://msdn2.microsoft.com/en-us/library/aa480458.aspx

04/09/23 106

So sánh• Giống nhau:

Đều có cơ chế ORM

• Khác nhau:

LINQ không phải là 1 ORM tool hoàn chỉnh

Nhibernate là 1 ORM tool.

Net-Tier là 1 ORM tool.

04/09/23 107

So sánh• Khác nhau:

LINQ chủ yếu là ngôn ngữ truy vấn hỗ trợ intellisense, trình biên dịch sẽ check syntax của câu truy vấn.

Nhibernate có ngôn ngữ truy vấn khá giới hạn, không có intellisense.

Net-Tier không có ngôn ngữ truy vấn dữ liệu mà truy vấn được phát sinh tự động.

04/09/23 108

So sánh• Khác nhau:

LINQ chủ yếu dùng cho Microsoft SQL Server.

Nhibernate có thể được dùng với hầu hết bất kỳ hệ quản trị CSDL nào miễn là cung cấp DB provider.

Net-Tier chủ yếu dùng cho Microsoft SQL Server, nhưng vẫn có thể thao tác với các DBMS khác thông qua loại Generic.

04/09/23 109

So sánh• Khác nhau:

LINQ Closed source.

Nhibernate Open source.

Net-Tier Open source.

04/09/23 110

Recommended