linq n hibernate net-tier
DESCRIPTION
TRANSCRIPT
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