Thứ Tư, 10 tháng 8, 2016

Hibernate One-to-Many Relationship dùng DB SQL Server – Mối quan hệ 1-n giữa 02 đối tượng sử dụng Hibernate trên CSDL SQL Server

Hibernate One-to-One Relationship – Mối quan hệ 1-1 giữa 02 đối tượng sử dụng Hibernate

Hibernate One-to-Many Relationship dùng DB SQL Server – Mối quan hệ 1-n giữa 02 đối tượng sử dụng Hibernate trên CSDL SQL Server

 

Mục đích: Mục đích của chủ đề này nhằm mở rộng chủ đề “Hibernate One-to-Many Relationship” sử dụng DB MySQL. Ở đây, chúng tôi sẽ thực hiện mối quan hệ 1-n giữa 02 object cũng dùng Hibernate nhưng sử dụng DB SQL Server. Bên cạnh đó, chúng tôi sẽ đưa ra một số thủ thuật và lưu ý khi thực hiện cài đặt Hibernate có quan hệ trên CSDL dùng SQL Server. Ngoài ra, chúng tôi cho thấy sự khác nhau khi cài đặt Hibernate có mối quan hệ giữa DB SQL Server và My SQL

Hibernate One-to-Many Relationship dùng DB SQL Server – Mối quan hệ 1-n giữa 02 đối tượng sử dụng Hibernate trên CSDL SQL Server

 

Mục đích: Mục đích của chủ đề này nhằm mở rộng chủ đề “Hibernate One-to-Many Relationship” sử dụng DB MySQL. Ở đây, chúng tôi sẽ thực hiện mối quan hệ 1-n giữa 02 object cũng dùng Hibernate nhưng sử dụng DB SQL Server. Bên cạnh đó, chúng tôi sẽ đưa ra một số thủ thuật và lưu ý khi thực hiện cài đặt Hibernate có quan hệ trên CSDL dùng SQL Server. Ngoài ra, chúng tôi cho thấy sự khác nhau khi cài đặt Hibernate có mối quan hệ giữa DB SQL Server và My SQL

 

Yêu cầu:

·         Nắm vững cách cài đặt đối tượng sử dụng Hibernate 3.2.5 (vui lòng xem lại bài Hibernate 3.2.5 in MVC Web Application with NetBeans 6.9.1 and SQL Server 2005)

·         Nắm vững cách cài đặt mối quan hệ 1-1 giữa 02 object sử dụng Hibernate (vui lòng xem lại bài Hibernate One-to-One Relationship cài đặt trên MySQL https://www.facebook.com/TrongKhanh.Kieu/posts/276354746070572) và cách cài đặt mối quan hệ 1-n giữa 02 object sử dụng Hibernate kết hợp MySQL (vui lòng xem lại bài Hibernate One-to-Many Relationship trên MySQL https://www.facebook.com/TrongKhanh.Kieu/posts/276357199403660 )

·         Nắm vững kiến thức về OOP

·         Nắm vững kiến thức về mối quan hệ giữa các object khi vận dụng và cài đặt

·         Tools yêu cầu

o   NetBean IDE 6.9.1

o   JDK 6 update 22

o   Apache Tomcat v6.0.26

o   MS. SQL Server 2005

 

Trong phần nội dung này chúng tôi sẽ làm ví dụ trên mối quan hệ một người làm công – employee có nhiều địa chỉ – address và một address chỉ có thuộc duy nhất một employee (ví dụ này tương tự như nội dung trong bài CMR 1_n của EJB). Dữ liệu mô tả như sau

Ở bài này, chúng tôi sẽ thực hiện hai chức năng chính đó là tạo mới thông tin 1 employee và thực hiện tìm kiếm thông tin liên quan đến employee khi biết một ký tự bất kỳ trong phần tên của employee – Name. Từ kết quả tìm kiếm, chúng ta sẽ thực hiện delete và update một số thông tin bất kỳ của một client được chọn lựa trên lưới của kết quả tìm kiếm

Lưu ý:

·         Kéo khóa chinh từ bảng tblEmp sang bảng tblEmpAddr

·         Chi tiết của các bảng trên được mô tả cụ thể như sau

·         Chi tiết của các bảng trên được mô tả cụ thể như sau

 

Trong phần tutorial này chúng tôi sẽ chưa một nhóm cách động thành các bước riêng biệt để tạo thuận lợi cho quí vị có thể tiếp cận dễ dàng và có thể thực hiện trong các bài hướng dẫn tiếp theo. Trong phần tutorial này chúng tôi sẽ thực hiện nhóm cách động tương tự các bước trong bài tutorial CMR 1:1 và Hibernate One-One Relationship sử dụng SQLServer

 

Bước 1: Đăng ký Datasource với Netbeans để Netbeans hỗ trợ chúng ta trong việc phát sinh datasource (bước này có thể bỏ qua nếu bạn đã có datasource rồi) (Vui lòng xem chi tiết Bước 1 trong tutorial CMR 1:1)

  • Nếu Datasource với DB mà có chứa các bảng mà chúng ta thao tác đã được đăng ký rồi,
    • Vào trong tab Services, mở rộng phần Database
    • Click phải chuột trên connection mà chúng ta cần làm việc, chọn Connect …

    • Chúng ta nhập username và password để kết nối DB, click OK

Lưu ý: Một Database Connection chỉ dùng cho một DB cụ thể, không thể áp dụng cho tất cả các Database vì mỗi Database Connect có 1 chuỗi kết nối đến một DB cụ thể

 

Bước 2: Tạo Web Application Project tương tự như bài Hibernate One-One relationship kết hợp với SQLServer

1.       Nhập tên project là HibernateOneMany

2.       Chọn Server là Apache Tomcat 6.0.26 và Java EE version là Java EE5.

3.       Chọn framework cho project là Hibernate 3.2.5

Chọn Database Connection và Database Dialect như hình vẽ:

Lưu ý: điểm khác biệt khi chọn SQL Server với MySQL đó là Database Dialect không được chọn sẵn, chúng ta phải chọn nội dung này bằng tay trực tiếp trong project

Project được tạo mới như sau

Configure file hibernate.cfg.xml tương tự như bài Hibernate 3.2.5 in MVC Web Application with NetBean 6.9.1 and SQL Server 2005

Mục Configuration Properties

Thêm mới Property Name hibernate.dialect, chọn Property Value phù hợp với SQL Server là org.hibernate.dialect.SQLServerDialect.

Thêm mới Property Name: hibernate.show_sql và Property value: true

Kết quả chúng ta thấy như sau

 

Trong node SessionFactory à Optional Properties à Miscellaneous Properties, click Add.

Chọn Property Name: hibernate.current_session_context_class và Property value: thread.

Click Add và chọn Property Name: hibernate.query.factory_class và Property value: org.hibernate.hql.ast.ASTQueryTranslatorFactory

Lưu lại file và đổi sang mode XML, chúng ta thấy tập tin hibernate.cfg.xml như sau

Tạo file HibernateUtil.java - Helper file tương tự như bài Hibernate kết hợp với SQLServer

Tạo Hibernate Mapping File và POJO tương tự như bài Hibernate kết hợp với SQLServer

·         Tạo Hibernate Reverse Engineering file hibernate.reveng.xml tương tự như bài Hibernate kết hợp với SQLServer nhưng chọn bảng là tblEmpAddr (đây là bảng con, nên khi nhấn Add qua thì bảng cha tblEmp sẽ được add qua theo với bảng tblEmpAddr)

·         Tạo Hibernate Mapping File và POJO tương tự như bài Hibernate kết hợp với SQLServer. Thực hiện các thao tác và nhập package là sampe.onemany

Lưu ý: Check vào JDK 5 Language Features.

            Chúng ta có cấu trúc project sau bước này như sau và tập tin hibernate.cfg.xml được cập nhật

Bước 3: Cấu hình quan hệ 1-n tương tự như bài Hibernate One-One relationship kết hợp với SQLServer

  • NetBean hiểu quan hệ giữa 2 table này la One-to-Many nên code được generate chính xác không cần phải chỉnh sửa như mối quan hệ One-to-One

1.       Phần TblEmp.java

2.       File TblEmp.hbm.xml

3.       File TblEmpAddr.java

4.       File TblAddress.hbm.xml: được cấu hình tương tự như bài Hibernate One-One relationship kết hợp với MySQL như sau

Bước 4: Tạo Data Access Object – DAO để hỗ trợ truy cập các thành phần của Hibernate tương tự khái niệm Session Bean của EJB (nội dung cài đặt tương tự như bài Hibernate One-One relationship kết hợp với SQLServer)

1.       Tạo mới class Java, đặt tên là EmpDAO , package là sample.onemany:

2.       Implement class DAO tương tự như bài Hibernate One-One relationship kết hợp với SQLServer như sau:

·         Tạo hàm insert() cho việc insert bảng một và bảng quan hệ nhiều chúng ta tạo 02 methods riêng biệt, một cho Employee và một cho Employee Address. Việc tạo 02 methods hỗ trợ chúng ta sử dụng riêng biệt vì không nhất thiết khi sử dụng phải insert bảng một phải insert luôn cả bảng nhiều và ngược lại. Các thứ tư thực hiện như sau

                                                              i.      Method insertEmp gồm 02 tham số userID và Name

1.       Chúng ta nên áp dụng transaction để hỗ trợ checking ràng buộc dưới DB để việc insert dữ liệu là toàn vẹn

2.       Tạo mới object của bảng một (ở đây là TblEmp)

                                                            ii.      Method insertAddress gồm 4 tham số addrID, addrName, phoneNo và đặc biệt tham số cuối cùng là userID dùng để xác định quan hệ của một đối tượng bảng nhiều với bảng một

1.       Chúng ta nên áp dụng transaction để hỗ trợ checking ràng buộc dưới DB để việc insert dữ liệu là toàn vẹn

2.       Tìm kiếm object quan hệ ở bảng 1 để, nếu có thì mới insert xuống bảng con – đây cũng chính là nguyên nhân, chúng ta áp dụng transaction

3.       Khi đã tìm thấy được object quan hệ ở bảng một, thực hiện tạo mới object của bảng con – bảng nhiều (ở đây là TblEmpAddr) và reference đến bảng cha – một để tham chiếu khóa chính của cha làm khóa ngoại của con - ở đây reference đến object của cha tạo ra ở trên thông qua hàm get

4.       Thực hiện reference cha đến con tương tự như khái niệm CMR của EJB và đây là mối quan hệ one – one trên cả 02 phía – bidirectional qua hàm get

5.       Chính hàm get này và cấu hình của cascade sẽ thực hiện đồng bộ nội dung bảng con mà không cần phải dùng lệnh save để đồng bộ bảng con từng instance một như khái niệm object thông thường (đó cũng là lý do, chúng ta phải dùng transaction)

·         Tạo hàm updateAddress cho phép cập nhật addrName, số phone khi biết id, ở đây chúng tôi thực hiện việc chỉnh sửa ở bảng quan hệ nhiều:

                                                              i.      Tìm ở đối tượng sử dụng hàm get của session

                                                            ii.      Thực hiện các hàm set để update dữ liệu

·         Tạo hàm delete để xóa một địa chi bất kỳ của employee khi biết idAddress: Thực hiện tương tự như khái niệm update là tìm kiếm nhưng thực hiện delete để xóa dữ liệu

·         Tạo hàm searchLikeName() để tìm tập các employee chỉ cần tên có chứa một ký tự trong field Name – ở đây chúng ta sẽ áp dụng câu lệnh truy vấn tương tự bài Hibernate cơ bản áp dụng chỉ với bảng một:

Bước 5: Tạo Giao diện để consume ứng dụng đã được thực hiện ở các bước trước

1.       Import thư viện JSTL 1.1 vào project để giao diện sử dụng JSTL để trình bày

2.       Tạo menu – menu.jsp có 02 link cho phép tạo mới user và tìm kiếm user mới.

·         Chỉnh sửa web.xml để tập tin này chạy đầu tiên khi ứng dụng khởi động

·         Tạo Servlet với tên Controller với package sample.web để thực hiện xử lý

3.       Tạo giao diện để thực hiện insert dữ liệu xuống DB – chỉnh sửa trang index.jsp

·         Cập nhật Controller cho việc insert, khi insert xong quay trở lại menu page

·         Thực hiện build, deploy và testing ứng dụng như sau

                                                              i.      DB trước khi insert

                                                            ii.      Thực hiện insert dữ liệu

                                                          iii.      DB sau khi insert

4.       Tạo giao diện để thực hiện việc search dưới DB – tập tin search.jsp

·         Cập nhật Controller cho việc xử lý search

·         Tạo trang show.jsp để trình bày kết quả

Lưu ý: giá trị lấy các hàng sử dụng EL và JSTL áp dụng như khái niện EJB, các giá trị sau thuộc tính rows là các attribute có tồn tại hàm cài đặt get tương ứng trong các class của Hibernate. Khi truy cập không cần dùng hàm get mà dùng dấu chấm “.”

·         Build and Clean, Deploy và Test gõ giá trị search là a

Cấu trúc của Project được cập nhật như sau

5.       Thực hiện chức năng update để cập nhật dữ liệu trên lưới tìm kiếm.

·         Chỉnh sửa tập tin show.jsp như sau (lưu ý phải thực hiện kỹ thuật lưu lại tham số để trang web refresh sau khi update)

·         Cập nhật Controller cho xử lý Update:

·         Clean and build, run project, chạy đến màn hình result với giá trị nhập là a.

 

Thực hiện xóa hàng ejbnew bằng cách click nút Delete

Nhấn Update, Database sẽ thực hiện update trên bảng EmpAddress và trang Result được hiển thị lại với giá trị cập nhật

6.       Thực hiện chức năng delete cho ứng dụng

·         Cập nhật trang show.jsp bổ sung nút Delete

·         Cập nhật Controller thực hiện xử lý delete

·         Clean and Build, Deploy và Test đến chỗ search với giá trị a

 

Nhấn xóa sẽ xóa hàng trong bảng Address của user đang chọn và DB được cập nhật, trang web quay lại chính nó

 

Chúc mừng các bạn đã hoàn tất việc cấu hình và sử dụng các chức năng sử dụng Hibernate để thực hiện đồng bộ dữ liệu giữa 02 đối tượng có quan hệ 1-n trên CSDL SQL Server 2005 sử dụng tập tin cấu hình

 

Hẹn gặp lại ở các chủ đề  tương tự liên quan việc cấu hình cũng mối quan hệ 1-n trên SQL Server 2005

 

Không có nhận xét nào:

Đăng nhận xét