1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÀI THÍ NGHIỆM SỐ: XÂY DỰNG HIBERNATE CHO ỨNG DỤNG JAVA

51 165 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 51
Dung lượng 3,8 MB

Nội dung

Các thành phần của dự án Hibernate: * Hibernate Core: Cung cấp các chức năng cơ bản của một tầng bền vững cho các ứng dụng Java với các APIs và hỗ trợ ánh xạ XML metadata.. * Hibernate T

Trang 1

BÀI THÍ NGHIỆM SỐ: XÂY DỰNG HIBERNATE CHO ỨNG DỤNG JAVA   2 

I.  Lý thuyết   2 

II.  Thí nghiệm   2 

Thời gian thực hiện thí nghiệm: 60 phút  2 

Tiến trình thực hiện:   2 

Phần 1: Tạo CSDL "mydatabase"   2 

(0.1) Chạy máy chủ CSDL Java DB (Derby) nếu chưa được khởi động   3 

(0.2) Tạo CSDL lấy tên là “mydatabase" (nếu trên máy bạn chưa có)   3 

(0.3) Kiểm tra xem plug-in Hibernate đã được cài đặt chưa   5 

Phần 2: Xây dựng ứng dụng Hibernate "HelloWorld"   6 

(1.1) Tạo lớp POJO   7 

(1.2) Tạo file ánh xạ Hibernate cho các lớp POJO.   12 

(1.3) Tạo file cấu hình Hibernate   17 

(1.4) Tạo file Main.java và HibernateUtil.java  21 

(1.5) Thêm thư viện Hibernate và driver Java DB   26 

(1.6) Thêm file log4j.properties   29 

(1.7) Dịch và chạy ứng dụng   32 

Tổng kết   37 

Phần 3: Xây dựng ứng dụng "HibernateHelloWorld2"   37 

(2.1) Tạo dự án "HibernateHelloWorld2" sao chép từ dự án "HibernateHelloWorld"   37 

(2.2) Thêm lớp POJO mới   39 

(2.3) Viết file ánh xạ, Student.hbm.xml, cho lớp Student   40 

(2.4) Sửa file Main.java   41 

(2.5) Thay đổi file hibernate.cfg.xml   42 

(2.6) Dịch và chạy ứng dụng   43 

(2.7) Nhận lệnh SQL từ Hibernate   44 

Tổng kết   46 

Phần 3: Cấu hình Hibernate JavaDoc   46 

(3.1) Cấu hình thư mục Hibernate Javadoc cho NetBeans IDE   46 

(3.2) Hiển thị Javadoc của giao diện Session Hibernate một cách trực quan   50 

Tổng kết   51 

Trang 2

BÀI THÍ NGHIỆM SỐ: XÂY DỰNG HIBERNATE CHO ỨNG DỤNG JAVA

I Lý thuyết

1 Hibernate là gì

Hibernate là một dịch vụ lưu trữ và truy vấn dữ liệu quan hệ mạnh mẽ và nhanh chóng Hibernate giúp phát triển các lớp (class) dùng để lưu trữ dữ liệu theo cách thức hướng đối tượng: kết hợp (association), thừa kế (inheritance), đa hình (polymorphism), tổ hợp (composition) và tập hợp (collections) Hibernate cho phép ta thực hiện các câu truy vấn dữ liệu bằng cách sử dụng ngôn ngữ SQL mở rộng của Hibernate (HQL) hoặc là ngôn ngữ SQL nguyên thuỷ cũng như là sử dụng các API Không giống như các tầng bền vững (persistence layer) khác, Hibernate không ẩn đi sức mạnh của ngôn ngữ SQL mà Hibernate còn đảm bảo cho chúng ta việc đầu tư vào công nghệ và tri thức cơ sở

dữ liệu quan hệ là luôn luôn chính xác Và điều quan trọng hơn nữa là Hibernate được cấp phép theo LGPL (Lesser GNU Public License) Theo đó, bạn có thể thoải mái sử dụng Hibernate trong các dự

án mã nguồn mở (open source) hoặc các dự án thương mại (commercial)

Hibernate là một dự án mã nguồn mở chuyên nghiệp và là một thành phần cốt tuỷ của bộ sản phẩm JBoss Enterprise Middleware System (JEMS) JBoss, như chúng ta đã biết là một đơn vị của Red Hat, chuyên cung cấp các dịch vụ 24x7 về hỗ trợ chuyên nghiệp, tư vấn và huấn luyện sẵn sàng hỗ trợ trong việc dùng Hibernate

Các thành phần của dự án Hibernate:

* Hibernate Core: Cung cấp các chức năng cơ bản của một tầng bền vững cho các ứng dụng Java với các APIs và hỗ trợ ánh xạ XML metadata

* Hibernate Annotations: Các lớp ánh xạ với JDK 5.0 annotations, bao gồm Hibernate Validator

* Hibernate EntityManager: Sử dụng EJB 3.0 EntityManager API trong JSE hoặc với bất kỳ JEE server nào

* Hibernate Tools: Các công cụ tích hợp với Eclipse và Ant dùng cho việc sinh ra các đối tượng bền vững (persistence object) từ một lược đồ có sẵn trong CSDL và từ các file hbm sinh ra các lớp java để hiện thực các đối tượng bền vững, rồi Hibernate tự tạo các đối tượng trong CSDL

* NHibernate: Hibernate cho Net framework

* JBoss Seam: Một Java EE 5.0 framework cho phát triển các ứng dụng JSF, Ajax và EJB 3.0 với sự

hỗ trợ của Hibernate Seam khá mới và tỏ ra rất mạnh để phát triển các ứng dụng Web 2.0 Nó tích hợp đầy đủ tất cả các công nghệ mới nhất hiện nay

• Phần 2: Xây dựng ứng dụng Hibernate “HelloWorld” (20 phút)

• Phần 3: Xây dựng ứng dụng Hibernate “HelloWorld2” (20 phút)

• Phần 4: Cấu hình Javadoc cho Hibernate và hiển thị trực quan Javadoc

• Phần 5: Bài tập tự thí nghiệm

Phần 1: Tạo CSDL "mydatabase"

Sinh viên thực hiện tạo CSDL "mydatabase" trên máy theo thứ tự sau

1 Chạy máy chủ CSDL Java DB (trong tài liệu có tên là Derby)

2 Tạo CSDL lấy tên là “mydatabase”

Trang 3

3 Cài đặt plug-in Hibernate cho NetBeans IDE (phiên bản 6.1 trở lên)

Dưới đây là hướng dẫn thực thi từng bước trên

(0.1) Chạy máy chủ CSDL Java DB (Derby) nếu chưa được khởi động

1 Chọn máy chủ Java DB (như Hình-0.10)

1 Tạo CSDL

• Kích chuột phải vào Java DB và chọn Create Database (Hình-0.20)

Trang 4

Hình-0.20: Tạo CSDL mydatabase

2 Điền vào các mục trong hộp thoại Create Java DB Database

• Trong mục Database Name, gõ tên "mydatabase"

• Trong mục User name, gõ app

• Mục Password, gõ "app" (như Hình-0.21)

• Kích OK để hoàn tất

Hình-0.21: Tạo CSDL

Trang 5

3 Kết nối đến CSDL mydatabase Chú ý là lúc này bạn chưa cần tạo các bảng biểu trong CSDL

• Mở rộng mục Drivers

• Kích chuột phải vào jdbc:derby://localhost:1527/mydatabase [app on App] và chọn Connect

• Kích vào thẻ cửa sổ Projects để quay lại xem hiển thị của dự án (project)

(0.3) Kiểm tra xem plug-in Hibernate đã được cài đặt chưa

Trang 6

Nếu không thấy Hibernate trong danh sách các mục của thẻ Installed, điều đó có nghĩa là plug-in này chưa cài đặt trong NetBeans IDE của bạn Kích vào thẻ Available Plugins và lựa chọn Hibernate sau đó cài đặt bằng cách kích vào Install

Phần 2: Xây dựng ứng dụng Hibernate "HelloWorld"

Trang 7

Trong phần này, sinh viên sẽ viết và chạy ứng dụng Hibernate khá đơn giản "HelloWorld" Trong ứng dụng này, chúng ta sẽ làm việc với đối tượng Person kết nối CSDL thông qua Hibernate

Các bước lần lượt thực hiện như sau:

1 Tạo lớp POJO, Person.java

2 Tạo file ánh xạ (mapping) cho lớp POJO, Write Hibernate mapping files for the POJO classes, Person.hbm.xml in this example

3 Tạo file cấu hình cho Hibernate, hibernate.cfg.xml

4 Tạo file Main.java và HibernateUtil.java

5 Thêm thư viện Hibernate và Java DB

6 Thêm log4j.properties vào đường dẫn lớp

7 Dịch và chạy ứng dụng

8 Kiểm thử lại CSDL

(1.1) Tạo lớp POJO

Trong ứng dụng đơn giản này, chúng ta chỉ viết một lớp POJO Ta sẽ đặt tên lớp là Person.java

POJO là đại diện tiêu biểu cho lớp persistence Một POJO là tương tự như một JavaBean, có những getter và setter

để truy câp các thuộc tính của nó là những biến thực thể (instance variable) Lớp persistence có những đặc điểm dưới đây:

a Nó là thay thế hướng đối tượng cho bảng ở cơ sở dữ liệu

b Các thuộc tính của bảng trở thành những biến thực thể của lớp persistence

c Kiểu dữ liệu của biến thực thể là miền xác định của thuộc tính

d Đối tượng của lớp thay cho hàng của bảng

1 Tạo dự án NetBeans

• Chọn File->New Project (hoặc Ctrl+Shift+N) (như Hình-1.11 dưới đây)

Hình-1.11: Tạo dự án mới

Trang 8

• Sau khi xuất hiện cửa sổ New Project

• Trong cửa sổ nhỏ các bước công việc, thực hiện chọn Choose Project, chọn Java dưới Categories và Java Application dưới Projects (Hình-1.12)

• Sau đó kích chọn Next

Hình-1.12: Tạo dự án ứng dụng Java

• Ở bước Name and Location , trong mục Project Name, gõ tên HibernateHelloWorld

• Trong mục Create Main Class, gõ Main (Hình-1.13 ở dưới)

• Kích Finish để hoàn tất

Trang 9

Hình-1.13: Đặt tên cho dự án

• Bạn sẽ thấy cửa sổ dự án HibernateHelloWorld và IDE sinh ra cửa sổ sửa đổi mã nguồn của Main.java của NetBeans IDE

2 Xây dựng lớp Person.java như đoạn mã hiển thị trong Hình-1.14 dưới đây Chú ý đây là lớp POJO

• Kích chuột phải vào nút dự án HibernateHelloWorld và chọn New->Java Class

Trang 10

• Cửa sổ New Java Class xuất hiện

• Trong mục Class Name, gõ Person

• Bỏ trống mục Package Nếu bạn muốn dùng package mặc định thì bỏ trống trường này (Đối với

bài thí nghiệm đơn giản này chúng ta tạm sử dụng package mặc định.)

• Kích Finish để hoàn tất (Hình-1.14)

Trang 11

Hình-1.14: Cửa sổ đặt Name and Location

• Sửa đổi đoạn mã nguồn Person.java như hình Code-1.15 dưới đây

import java.io.Serializable;

public class Person implements Serializable {

private int id;

private String name;

Trang 12

Code-1.15: Person.java

(1.2) Tạo file ánh xạ Hibernate cho các lớp POJO

Trong ứng dụng này do chỉ có 1 lớp Person, nên chúng ta chỉ phải viết một file ánh xạ (Thực tế, một file ánh xạ

cũng có thể chứa các thông tin ánh xạ tới nhiều lớp trong ứng dụng nhưng để tránh nhầm lẫn ta nên viết từng file ánh xạ cho mỗi lớp trong ứng dụng.)

1 Tạo file Person.hbm.xml

Trong file ánh xạ này, bạn phải xác định lớp Person sẽ được ánh xạ tới bảng person Trường id của lớp Person sẽ được sử dụng như là khóa chính trong bảng CSDL person Trường name sẽ tương ứng với cột cname

• Kích chuột phải vào nút dự án HibernateHelloWorld và chọn New->Other (Hình-1.21)

Trang 13

Hình-1.21: Tạo file XML

• Xuất hiện cửa sổ Choose File Type

• Chọn XML dưới phần Categories bên trái và XML Document dưới File Types bên phải

(Hình-1.22)

• Kích Next

Trang 14

Hình-1.22: Tạo tài liệu XML

• Cửa sổ Name and Location xuất hiện

• Trong mục File Name, gõ Person.hbm (Hình-1.23)

• Kích Browse để chọn Folder

Hình-1.23: Xác định thư mục tạo file

• Xuất hiện cửa sổ lựa chọn thư mục

• Chọn src

• Kích Select Folder (Hình-1.24)

Trang 16

Hình-1.26: Kết thúc quá trình tạo tài liệu XML

• Cửa sổ IDE sẽ hiển thị file XML để có thể thay đổi

• Thay bằng đoạn mẫu XML như trong nội dung Code-1.27 ở dưới

<class name="Person" table="person">

<id name="id" type="int">

Trang 17

(1.3) Tạo file cấu hình Hibernate

File cấu hình dành riêng cho từng ứng dụng Trong file này người lập trình phải xác định thông tin kết nối CSDL với tên và file ánh xạ Ngoại trừ tên của file ánh xạ, hầu hết các ứng dụng Hibernate có cùng tên với file cấu hình Hibernate

1 Tạo file hibernate.cfg.xml

• Kích chuột phải vào nút dự án HibernateHelloWorld và chọn New->XML Document

• Cửa sổ Name and Location xuất hiện

• Trong trường File Name, gõ hibernate.cfg

• Kích Browse chọn thư mục

Trang 18

• Xuất hiện cửa sổ lựa chọn thư mục

• Chọn nút src

• Kích vào Select Folder

• Kích Next (trong cửa sổ Name and Location)

Trang 19

• Xuất hiện cửa sổ Select Document Type

• Kích Finish để hoàn tất

• Lúc này IDE sẽ hiển thị cửa sổ file XML để có thể thay đổi

• Thay thế bằng đoạn file mẫu XML với nội dung như trong Code-1.31

Trang 20

<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD//EN"

Trang 21

(1.4) Tạo file Main.java và HibernateUtil.java

1 Thay đổi nội dung của file Main.java trong IDE như đoạn mã nguồn trong Code-1.21 Chú ý ý nghĩa đoạn mã in

public class Main {

public static void main(String[] args) {

// Set up database tables

HibernateUtil.droptable("drop table person");

HibernateUtil.setup("create table person ( id int, cname VARCHAR(20))");

// Create SessionFactory and Session object

SessionFactory sessions = new Configuration().configure().buildSessionFactory();

Session session = sessions.openSession();

// Perform life-cycle operations under a transaction

Transaction tx = null;

try {

tx = session.beginTransaction();

// Create a Person object and save it

Person p1 = new Person();

p1.setName("Sang Shin");

session.save(p1);

// Create another Person object and save it

Person p2 = new Person();

p2.setName("Young Shin");

session.save(p2);

// Retrieve the person objects

Person person = (Person)session get(Person.class, p1.getId());

System.out.println("First person retrieved = " + person.getName());

person = (Person)session.get(Person.class, p2.getId());

System.out.println("Second person retrieved = " + person.getName());

Trang 22

Code-1.41: Person.hbm.xml

2 Viết file HibernateUtil.java như trong Code-1.42

Đây là lớp tiện ích giúp người lập trình có thể kiểm thử và gỡ rối chương trình mình viết Trong bài thí nghiệm này, sinh viên sẽ được hướng dẫn sử dụng lớp tiện ích này để tạo và hiển thị bảng trong CSDL Có thể sử dụng một cách thuật tiện lớp tiện ích này cho các dự án Hibernate khác mà không cần quan tâm hiểu rõ đoạn mã của nó

• Kích chuột phải nút dự án HibernateHelloWorld và chọn New->Java Class

• Xuất hiện cửa sổ nhỏ Name and Location

• Trong mục Class Name, gõ HibernateUtil (Hình-1.42)

• Kích Finish để hoàn tất

Trang 23

Hình-1.42: Tạo file HibernateUtil.java

• Thay thế đoạn mã file HibernateUtil.java bằng đoạn mã trong Code-1.43

public static String url = "jdbc:derby://localhost:1527/mydatabase";

public static String dbdriver = "org.apache.derby.jdbc.ClientDriver";

public static String username = "app";

public static String password = "app";

// Create the SessionFactory from hibernate.cfg.xml

sessionFactory = new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) {

// Make sure you log the exception, as it might be swallowed

System.err.println("Initial SessionFactory creation failed." + ex);

throw new ExceptionInInitializerError(ex);

}

}

public static final ThreadLocal session = new ThreadLocal();

public static Session currentSession() throws HibernateException {

Session s = (Session) session.get();

// Open a new Session, if this thread has none yet

if (s == null) {

Trang 24

public static void closeSession() throws HibernateException {

Session s = (Session) session.get();

// Drop table if exists

public static void droptable(String sql) {

public static void checkData(String sql) {

String[] starray = sql.split(" ");

System.out.println("\n******** Table: " + starray[starray.length-1] + " *******"); try {

Trang 25

public static void outputResultSet(ResultSet rs) throws Exception{ ResultSetMetaData metadata = rs.getMetaData();

int numcols = metadata.getColumnCount();

String[] labels = new String[numcols];

int[] colwidths = new int[numcols];

int[] colpos = new int[numcols];

colwidths[i] = size + 1; // save the column the size

linewidth += colwidths[i] + 2; // increment total size

}

StringBuffer divider = new StringBuffer(linewidth);

StringBuffer blankline = new StringBuffer(linewidth);

for (int i = 0; i < linewidth; i++) {

// The next line of the table contains the column labels

// Begin with a blank line, and put the column names and column // divider characters "|" into it overwrite() is defined below StringBuffer line = new StringBuffer(blankline.toString()); line.setCharAt(0, '|');

for (int i = 0; i < numcols; i++) {

int pos = colpos[i] + 1 + (colwidths[i] - labels[i].length()) / 2; overwrite(line, pos, labels[i]);

overwrite(line, colpos[i] + colwidths[i], " |");

for (int i = 0; i < numcols; i++) {

Object value = rs.getObject(i + 1);

Ngày đăng: 18/03/2019, 00:58

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w