Thứ Năm, 11 tháng 8, 2016

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

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

 

Tác giả: Nguyễn Anh Khoa

 

Mục đích: Trong phần này, chúng ta sẽ thực hiện cấu hình hibernate cho quan hệ 1-1 giữa 2 table.

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

 

Tác giả: Nguyễn Anh Khoa

 

Mục đích: Trong phần này, chúng ta sẽ thực hiện cấu hình hibernate cho quan hệ 1-1 giữa 2 table.

Yêu cầu:

Trước khi thực hiện bài demo này các bạn nên làm trước bài demo Hibernate ở phần trước:

            Hibernate 3.2.5 in MVC Web Application with NetBean 6.9.1 and MySQL Server. (https://www.facebook.com/TrongKhanh.Kieu/posts/276063232766390)

 

Để thực hiện được bài demo này, các bạn cần những tool sau đây:

·         NetBean IDE 6.9.1

·         JDK 6 update 22

·         Apache Tomcat v6

·         My SQL Database Server v5.x

 

Với bài này, chúng ta sẽ dùng 2 table là Student và StudentDetail để mô tả quan hệ 1-1. Cả hai table đều có primary key là id. Column id của table StudentDetail reference đến column id của table Student.

Bài demo này có 2 chức năng là insert data vào 2 table và search student khi biết một kí tự trong firstname.

Hibernate sẽ được cấu hình với 2 kiểu mapping bằng file xml và annotation.

_____________________________________________________________________________________

Tạo database

Chúng ta cần tạo table Student và StudentDetail như sau vào MySQL Server (Khóa chính và khóa quan hệ của chúng ta là cột id):

 

1.png

 

1.       Mở command line  để login vào MySQL Server

 

1.png

 

2.       Copy đoạn SQL script này vào cửa sổ command line:

 

 

USE java ;

 

DROP TABLE IF EXISTS java.studentdetail;

DROP TABLE IF EXISTS java.student ;

 

 CREATE  TABLE IF NOT EXISTS java.student (

  id INT(11) NOT NULL  AUTO_INCREMENT,

  username VARCHAR(45) NOT NULL ,

  password VARCHAR(45) NOT NULL ,

  PRIMARY KEY (id),

  UNIQUE INDEX id_UNIQUE (id ASC)

 );

 

CREATE  TABLE IF NOT EXISTS java.studentdetail (

  id INT(11) NOT NULL AUTO_INCREMENT,

  firstname VARCHAR(45) NOT NULL ,

  lastname VARCHAR(45) NOT NULL ,

  sex BIT NOT NULL,

  PRIMARY KEY (id),

  UNIQUE INDEX id_UNIQUE (id ASC),

  CONSTRAINT FOREIGN KEY(id) references student(id)

 );

 

INSERT INTO student(username,password) values('khoana60113','123456');

INSERT INTO student(username,password) values('Antt60999','123456');

INSERT INTO student(username,password) values('khand60134','123456');

 

INSERT INTO studentdetail(firstname,lastname,sex) values('Khoa','Nguyen Anh',true);

INSERT INTO studentdetail(firstname,lastname,sex) values('An','Tran Thi',false);

INSERT INTO studentdetail(firstname,lastname,sex) values('Kha','Nguyen Duong',true);

 

 

Kết quả là table Student and StudentDetail được tạo:

 

 

3.       Khởi động NetBean.

Trong cửa sổ Services chọn Database à Drivers.

 

Click chuột phải vào Drivers và chọn New Driver:

 

 

4.       Click chuột phải vào driver vừa add và chọn Connect Using

 

Nhập data cho chuỗi kết nối như hình vẽ dưới đây .

Click OK.

8.png

 

Kết quả trong cửa sổ Service:

9.png

_____________________________________________________________________________________

 

Tạo Web Application Project

1.       Click File à New à Project. Chọn Web Application trong mục Java Web.

Click Next.

2.       Nhập tên project là Hibernate_One_One_Demo. Click Next.

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

Click Next.

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

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

10.png

Click Finish.

 

_____________________________________________________________________________________ Configure file hibernate.cfg.xml

1.       Mở file hibernate.cfg.xml và chuyển sang mode design.

12.png

2.       Trong node SessionFactory à Optional Properties à Configuration Properties, click Add để mở dialog box Add Hibernate Property.

Chọn Property Name: hibernate.show_sql và Property value: true

13.png

 

Click OK.

Property này sẽ enable chế độ debug các câu lệnh SQL khi thao tác với database. Khi run project, các câu lệnh này sẽ hiển thị trong cửa sổ Console.

 

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

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

14.png

Click OK.

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

15.png

Click OK.

 

6.       Lưu lại file và đổi sang mode XML, bạn sẽ thấy các property vừa mới được add:

_____________________________________________________________________________________

Tạo file HiberntaeUtil.java - Helper file

1.       Chọn File à New File àOther

2.       Chọn đến Category Hibernate và chọn HibernateUtil,java.

3.       Đặt tên cho class là HibernateUtil và tên package.

 

4.       Click Finish.

File này chúng ta không cần chỉnh sửa gì vì NetBean đã generate ra method mà ta cần dùng.

_____________________________________________________________________________________

Tạo Hibernate Mapping File và POJO

·        Tạo Hibernate Reverse Engineering file

1.       Chọn File à New Fileà Other

2.       Chọn Category Hibernate và chọn Hibernate Reverse Engineering Wizard

Click Next.

3.       Nhập tên file là hibernate.reveng và Folder là src/java.

Click Next.

4.       Available Tables chứa tất cả các table có trong database mà ta đang kết nối.

Chọn table muốn sử dụng và click Add hoặc chọn tất cả các table Add all.

Ở đây chúng ta chọn StudentDetail.

Vì StudentDetail refence đến table Student nên khi StudentDetail được add thì Student cũng phải được add theo.

Click Finish.

 

·        Tạo Hibernate Mapping File và POJO

1.       Chọn File à New File à Other (Ctr + N).

2.       Chọn Category Hibernate và chọn Hibernate Mapping File and POJOs

Click Next.

3.       Tên file config và file reverse engineering phải được load trong combo box.

Check vào JDK 5 Language Features.

Nhập vào tên package.

Tất cả như hình vẽ bên dưới.

            Click Finish.

_____________________________________________________________________________________

Cấu hình cho quan hệ 1-1

NetBean hiểu quan hệ giữa 2 table này la One-to-Many nên code được generate có phần không đúng với mục đích của chúng ta. Chúng ta cần sửa lại những file sau:

1.       File Student.java:

 

Các bạn sửa lại kiểu dữ liệu, tên, constructor và get/set của thuộc tính studentdetails như sau:

 

 

2.       File Student.hbm.xml

File Student.hbm.xml đang được cấu hình cho quan hệ One-to-Many như trong phần khoanh đỏ:

 

Chúng ta cấu hình lại như sau:

 

 

3.       File StudentDetail.hbm.xml

Chúng ta cấu hình lại như sau:

Ý nghĩa của các element trong property <one-to-one> theo cách cấu hình như trên:

·         Name: Tên của quan hệ

·         Class: Tên đầy đủ của class (có tên package) có quan hệ với class này .

·         Cascade: Xác định những operation(Update, Delete, Insert,… ) được chuyển tiếp qua lại giữa 2 table trong một quan hệ. Ví dụ như với cách cấu hình như trên thì khi insert một StudentDetail vào database thì Student có quan hệ với StudentDetail này cũng được insert theo.

·         Constraint: Giá tri true có nghĩa là table mapping với class này đang reference đến primary key của table kia.Ví dụ với cách cấu hình như trên mô tả StudentDetail reference đến primary key của Student.

Để đảm bảo primary key của 2 instance bằng nhau khi thực hiện persist dữ liệu vào database, chúng ta dùng identifier generator là “foreign”.

           

_____________________________________________________________________________________

Tạo Web Application

           

·        Create DAO class

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

 

2.       Implement class DAO như sau:

·         Thuộc tính session và hàm tạo không tham số:

·         Hàm save() để insert data:

·         Hàm Update:

·         Hàm delete:

·         Hàm findByFirstName để tìm kiếm student theo firstname:

·        Sửa file index.jsp để tạo trang input dữ liệu cho chức năng Search:

 

·        Tạo Servlet

·         Chọn File à New File à Other (Ctr + N)

·         Chọn Category Web và chọn Servlet. Click Next.

·         Đặt tên cho servlet là Controller và package là sample.servlet. Click Next.

·         Click Finish.

·         Sửa lại file Controller.java như sau:

 

·        Tạo file show.jsp

1.       Add thư viện JSTL

2.       Tạo file show.jsp với nội dung như sau:

_____________________________________________________________________________________

 

Cấu trúc Source của Project:

Clean and build, run project.

Khi click Add, Delete hoac Update trên trang show.jsp, trang show.jsp sẽ load lại và hiển thị kết quả vừa được sửa.

Kết quả khi run như sau:

1.       Trang index:

2.       Kết quả Search:

Nhập thông tin cho student mới và add:

 

 

_____________________________________________________________________________________

Cấu hình Hibernate bằng Annotation

Cấu hình hibernate bằng annotation trên NetBean chỉ khác với cách dùng file xml ở chỗ phát sinh mapping file and pojo.

Vì là demo nên chúng ta cứ tạo trên project ban đầu luôn. Sau khi config xong thì đổi tên package ở nhũng file import Student và Studentdetail để test. Từ file hibernate.cfg.xml và hibernate.reveng.xml đã tạo:

1.       Chọn File à New File à Other (Ctr + N).

2.       Chọn Category Hibernate và chọn Hibernate Mapping File and POJOs

Click Next.

3.       Tên file config và file reverse engineering phải được load trong combo box.

Check vào JDK 5 Language Features và EJB 3 Annotations

Nhập vào tên package.

Tất cả như hình vẽ bên dưới.

 

4.       Mở file Student.java trong package sample.entity.annotation vừa được tạo:

5.       Sửa lại những chỗ khoanh đỏ ở trên như sau:

6.       Mở file Studentdetail:

 

Sửa lại những chỗ khoanh đỏ như sau:

 

 

7.       Đổi tên package ở những file import 2 class này và test thử như trên.

_____________________________________________________________________________________

Chúc mừng các bạn đã vừa hoàn thành xong bài Demo Hibernate One-to-One relationship với NetBean 6.9.1! Nội dung thực hiện trên DBMS MS. SQL Server 2005 cũng sẽ tương tự như trên My SQL mà chúng tôi đã nêu ra ở trên, do vậy, các bạn tự làm để thực hành và nâng cao kỹ năng cho riêng mình.

Hẹn gặp lại ở các chủ đề  tương tự liên quan đến các loại quan hệ khác trong CSDL!

 

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

Đăng nhận xét