1. Trang chủ
  2. » Công Nghệ Thông Tin

Thực hành Java Web Lab 11

20 224 2

Đ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 20
Dung lượng 1,36 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

IT Research Department @BKAP 2015 Page [1/20] Lab 11 Java Persistence API Mục tiêu - Sử dụng JPA với Java Application - Sử dụng JPA với EJB - JPA Queries Phần I Bài tập step by step

Trang 1

IT Research Department @BKAP 2015 Page [1/20]

Lab 11

Java Persistence API

Mục tiêu

- Sử dụng JPA với Java Application

- Sử dụng JPA với EJB

- JPA Queries

Phần I Bài tập step by step

Bài 1.1:

Mục tiêu:

- Xây dựng Java Application

- Sử dụng Database service do Netbeans cung cấp

- Dùng JPA để thao tác với CSDL

STEP 1

Tạo CSDL PlayerDB với Java DB tích hợp sẵn trong Netbeans

Mở Service Tab -> Mở rộng Databases -> Chọn Java DB -> Start Server

Trên Output Console: kết nối tới Java DB server ở cổng 1527

Tạo CSDL PlayerDB

Java DB -> Create Database

Trang 2

Password: 123456

Để connect tới CSDL PlayerDB: chọn jdbc:derby://localhost:1527/PlayerDB -> Connect

Đi kèm với bài thực hành này là file sql playerDB.sql để tạo tables và data

File -> Open File -> Browser to playerDB.sql

Trang 3

IT Research Department @BKAP 2015 Page [3/20]

File playerDB.sql sẽ tự động mở ra với SQL Editor

Ở scroll box Connection -> Chọn jdbc:derby://localhost:1527/PlayerDB[root on ROOT] -> Run SQL

Câu lệnh SQL được thực hiện và tạo ra 2 table: Player và Team

ROOT -> Tables -> Player -> View Data

ROOT -> Tables -> Team -> View Data

Để xem dữ liệu của 2 bảng này

STEP 2

Với mỗi table trong CSDL chúng ta sẽ tạo ra các Entity class tương ứng để có thể sử dụng JPA

Trang 4

File -> New Project -> Java -> Java Application -> JPAFirstExample -> Bỏ chọn Create Main Class -> Finish

Tạo các Entity Class:

New -> Entity Class from Database

Database Connection chọn: jdbc:derby://locahost:1527/PlayerDB[root on ROOT]

Chọn Add All để add cả 2 tables -> Next

Trang 5

IT Research Department @BKAP 2015 Page [5/20]

Trang 6

Ở package chọn entity -> Next -> Ở cửa sổ Mapping Options -> Chọn Finish

Mở package entity, sẽ có 2 classes được tạo ra: Player và Team

Mở thư mục META-INF sẽ thấy file persistence.xml chứa configuration của persistence unit

<?xml version="1.0" encoding="UTF-8"?>

<persistence version = "2.1" xmlns = "http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation = "http://xmlns.jcp.org/xml/ns/persistence

http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">

<persistence-unit name = "JPAFirstExamplePU"

transaction-type = "RESOURCE_LOCAL">

<provider> org.eclipse.persistence.jpa.PersistenceProvider </provider> <class> entity.Player </class>

<class> entity.Team </class>

<properties>

<property name = "javax.persistence.jdbc.url"

value = "jdbc:derby://localhost:1527/PlayerDB"/>

<property name = "javax.persistence.jdbc.user" value = "root"/>

<property name = "javax.persistence.jdbc.driver"

value = "org.apache.derby.jdbc.ClientDriver"/>

Trang 7

IT Research Department @BKAP 2015 Page [7/20]

<property name = "javax.persistence.jdbc.password" value = "123456"/>

</properties>

</persistence-unit>

</persistence>

Chúng ta cần chú ý, tên của persistence unit này là JPAFirstExamplePU

STEP 3

Tạo main class để test với persistence unit đã tạo

New -> Java Class -> Test

Tạo main method, trong hàm main, chúng ta sẽ sử dụng EntityManager để thực hiện thao tác với CSDL

package entity;

import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.Persistence;

Trang 8

public class Test {

public static void main(String[] args) {

EntityManagerFactory emf =

Persistence.createEntityManagerFactory("JPAFirstExamplePU" );

EntityManager em = emf.createEntityManager();

em.getTransaction().begin();

Player p1 = new Player();

p1.setId(5);

p1.setFirstname( "Ian" );

p1.setJerseynumber(30);

p1.setLastname( "Thorpe" );

p1.setLastspokenwords( "I am in the best form" );

em.persist(p1);

Player p2 = new Player();

p2.setId(6);

p2.setFirstname( "Deigo" );

p2.setJerseynumber(40);

p2.setLastname( "Maradona" );

p2.setLastspokenwords( "I will be back" );

em.persist(p2);

em.getTransaction().commit();

em.close();

emf.close();

}

}

em.persist() sẽ thực hiện add thêm 2 bản ghi vào CSDL

Trước khi chạy ứng dụng, cần thêm library của Java DB

Libraries -> Add Library -> Java DB Driver

Trang 9

IT Research Department @BKAP 2015 Page [9/20]

Build và Run project

Mở Service Tab -> View data của table Player -> Xác nhận CSDL đã thêm 2 bản ghi mới

Bài 1.2

Mục tiêu:

- Sử dụng JPA với Java EE Application

STEP 1

File -> New Project -> Java Web -> Web Application -> BookStore

Trang 10

Chọn Glassfish -> Next -> Không chọn Frameworks -> Finish

STEP 2

Tạo CSDL BookStore giống bài trước dùng Database Server Java DB

Trang 11

IT Research Department @BKAP 2015 Page [11/20]

Chọn jdbc:derby://localhost:1527/BOOKSTORE[root on ROOT] -> Connect -> Execute Command

Paste câu lệnh SQL sau:

CREATE TABLE BOOKS (

ID INTEGER NOT NULL Primary key GENERATED ALWAYS AS IDENTITY ( START WITH 1, INCREMENT BY 1),

BOOKNAME VARCHAR (255),

SIGNINGDATE DATE

);

INSERT INTO BOOKS ( BOOKNAME , SIGNINGDATE ) VALUES ( 'Harry Potter' , '2012-01-10' );

INSERT INTO BOOKS ( BOOKNAME , SIGNINGDATE ) VALUES ( 'Howl Castle' , '2011-10-10' );

Tạo ra bảng BOOKS và 2 bản ghi

STEP 3

New -> Entity Classes from Database

Data Source -> New Data Source

Name: jdbc/BookStore

Connection: jdbc:derby://localhost:1527/BookStore[root on ROOT]

Trang 13

IT Research Department @BKAP 2015 Page [13/20]

Trang 14

Class Books.java được tạo ra trong package entity của ứng dụng

Mở persistence.xml trong Configuration Files

<?xml version="1.0" encoding="UTF-8"?>

<persistence version = "2.1" xmlns = "http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation = "http://xmlns.jcp.org/xml/ns/persistence

http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">

<persistence-unit name = "BookStorePU" transaction-type = "JTA">

<jta-data-source> jdbc/BookStore </jta-data-source>

<exclude-unlisted-classes> false </exclude-unlisted-classes>

<properties/>

</persistence-unit>

</persistence>

Tạo JDBC Resource tên jdbc/BookStore trên GlashFish server, sử dụng connection pool DerbyDB

STEP 4

Các thao tác với CSDL sẽ được thực hiện bởi một session bean

New -> Java EE -> Session Bean -> BooksDAO

package ejb;

import entity.Books;

import java.util.List;

import javax.ejb.Stateless;

import javax.persistence.EntityManager;

import javax.persistence.PersistenceContext;

import javax.persistence.TypedQuery;

@Stateless

public class BooksDAO {

// Injected database connection:

@PersistenceContext

private EntityManager em ;

Trang 15

IT Research Department @BKAP 2015 Page [15/20]

// Stores a new book:

public void persist(Books book) {

em persist(book);

}

// Retrieves all the books:

public List<Books> getAllGuests() {

TypedQuery<Books> query = em createQuery(

"SELECT g FROM Books g ORDER BY g.id" , Books class );

return query.getResultList();

}

}

Annotation @PersistenceContext sẽ tạo ra một instance của class EntityManager chứa persistence unit BookStorePU đã tạo ra ở STEP 3

STEP 5

Tạo BookServlet

New -> Servlet: BookServlet

Trang 17

IT Research Department @BKAP 2015 Page [17/20]

package ejb;

import entity.Books;

import java.io.IOException;

import java.io.PrintWriter;

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import javax.ejb.EJB;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.util.Date;

/**

*

* @author ThanDieu

*/

@ WebServlet(name = "BookServlet" , urlPatterns = { "/BookServlet" })

public class BookServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

// Injected DAO EJB:

@EJB

BooksDAO booksDao ;

@Override

protected void doGet(

HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// Display the list of guests:

request.setAttribute( "books" , booksDao getAllBooks());

Trang 18

request.getRequestDispatcher( "/book.jsp" ).forward(request, response); }

@Override

protected void doPost(

HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// Handle a new guest:

String name = request.getParameter( "name" );

Books books = new Books();

books.setBookname(name);

books.setSigningdate( new Date());

if (name != null )

booksDao persist(books);

// Display the list of guests:

doGet(request, response);

}

}

Chúng ta thực hiện inject EJB BooksDAO vào servlet bằng annotation @EJB

STEP 6

Tạo trang book.jsp chứa form nhập và hiển thị các bản ghi có trong CSDL

<%@page import = entity.Books " %>

<%@page import = java.util.List " %>

<%@page contentType = "text/html" pageEncoding = "UTF-8" %>

<!DOCTYPE html>

Trang 19

IT Research Department @BKAP 2015 Page [19/20]

<html>

<head>

<meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8">

<title>BookStore</title>

</head>

<body>

<form method = "POST" action = "BookServlet" >

Name: <input type = "text" name = "name" />

<input type = "submit" value = "Add" />

</form>

<hr><ol> <%

@SuppressWarnings ( "unchecked" )

List<Books> books = (List<Books>)request.getAttribute ( "books" );

if ( books != null) {

for (Books book : books) { %>

<li> <%= book %> </li> <%

}

} %>

</ol><hr>

</body>

</html>

Build và Chạy project được kết quả như sau:

Trang 20

PHẦN 2: BÀI TẬP LÀM THÊM

Hãy tạo thêm bảng mới Readers cho BookStore: readerID, firstName, lastName, address Tạo ReadersDAO cho phép thêm mới, getAll và xoá readers từ CSDL Nhập ID để xoá và hiển thị tất cả các dữ liệu có trong bảng ra

HẾT

Ngày đăng: 07/05/2018, 15:47

TỪ KHÓA LIÊN QUAN

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

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w