Trong bài viết này tôi sẽ giới thiệu cách dùng JPA và Netbeans để giúp chúng ta xây dựng ứng dụng java để làm việc với cơ sở dữ liệu.

Chuẩn bị DB

[sourcecode language=”sql”]
create database FptGames
go
use FptGames
go
create table users(
username char(30) primary key,
full_name nvarchar(50),
password char(50) not null,
email char(50) unique,
description ntext
)
[/sourcecode]

Tạo project

  • Chọn New Project
  • Chọn Java
  • Chọn Java Application
  • Đặt tên FptGames

Tải và thêm thư viện jdbc vào project

  • Tải ở trang của Microsoft
  • Chạy file tải được để giải nén
  • Click chuột phải vào mục Library của project và chọn Add Jar/Folder


  • Chọn file jdbc4.jar ở thư mục giải nén

Tạo JPA

Tạo entity từ cơ sở dữ liệu:

  • Chọn: New File Persistence Entity from Database


  • Database Connection chọn New Database Connection.
  • Ở mục Driver chọn New Driver.
  • Click vào nút Add để tìm jdbc driver tương ứng
  • Điền các thông tin kết nối:


  • Ở mục Select Schema chọn dbo
  • Chọn Finish


  • Chọn các bảng mà bạn muốn làm việc ở Java sau đó chọn Next
  • Đổi tên các lớp và package (fpt.games.entity), sau đó chọn Next


Chú ý: Việc chọn Create Persistence Unit sẽ tạo ra file Persistence.xml ở thư mục META-INFO để lưu các thông số để kết nối với database và JPA

  • Ở mục Collection Type nên chọn là List để làm việc dễ dàng hơn.
  • Chọn Finish

Tạo JPA Controller

  • Chọn New File Persistence JPA Controller Classes from Entity Classes
  • Chọn các lớp mình muốn điều kiển (chúng ta chọn hết) và package (fpt.games.controller)

Tạo lớp Main để test ở package fpt.games.ui

Chú ý tên của Persistence Unit được dùng để lấy EntityManagerFactory được lấy ở file Persistence.xml ở thư mục META-INFO

[sourcecode language=”java”]
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fpt.games.ui;

import fpt.games.controller.UserJpaController;
import fpt.games.controller.exceptions.PreexistingEntityException;
import fpt.games.entity.User;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.Persistence;

/**
*
* @author cibervn
*/
public class Main {
public static void main(String[] args) {
try {
//Create a UserJpaController to work with database
UserJpaController controller = new UserJpaController(Persistence.createEntityManagerFactory("FptGamesPU"));
//Test to insert an user to database
User newUser = new User("admin","123456");
newUser.setEmail("admin@fpt.games.com");
newUser.setFullName("Administration");
newUser.setDescription("test");
controller.create(newUser);

//Test to retrieve all users from database
List<User> all = controller.findUserEntities();
for (User user : all) {
System.out.println(user);
}

//Update an user
User user = controller.findUser("admin");
user.setFullName("new Administration");
controller.edit(user);

//Delete an user
controller.destroy("admin");

} catch (PreexistingEntityException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (Exception ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
[/sourcecode]  

Mã nguồn

Qua ví dụ trên ta thấy các công việc cần phải làm để giúp chúng ta làm việc với cơ sở dự liệu trong java là đơn giản hơn là dùng trực tiếp jdbc. Hơn thế nữa là các làm việc với cơ sở dữ liệu là thông qua các đối tượng trong java chứ không phải dùng sql.
Nhưng một vấn đề khác khi làm việc với jpa đó là viết các câu lệnh truy vấn dữ liệu hay code của các entity cũng không phải đơn giản. Chúng ta sẽ quay lại với các câu lệnh truy vấn trên JPA ở một bài viết khác.