Sử dụng datastore trong lưu trữ

Một phần của tài liệu LVTN công cụ thiết kế CSDL online- tập trung nghiêu cứu xây dựng một công cụ hỗ trợ thiết kế cơ sở dữ liệu trên nền tảng web (Trang 66)

Trong phần này chúng ta sẽ thảo luận về cách mà áp dụng datastore trong việc lưu trữ tài khoản người dùng và sơ đồ. Vì thời gian dự án có hạn, trong phần demo lần này chúng tôi thiết kế cơ sở dữ liệu thật nhỏ gọn đủ để đáp ứng việc lưu trữ tài khoản người dùng và mô hình.

Trong demo chúng ta chỉ có duy nhất một đối tượng được lưu trữ, đó là đối tượng Account trong gói com.luong.server.persistence.Account.java.

package com.luong.server.persistent; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; import javax.jdo.PersistenceManager; import javax.jdo.Query; import javax.jdo.annotations.Element; import javax.jdo.annotations.IdGeneratorStrategy; import javax.jdo.annotations.IdentityType; import javax.jdo.annotations.PersistenceCapable; import javax.jdo.annotations.Persistent; import javax.jdo.annotations.PrimaryKey; import com.luong.server.PMF; import com.luong.shared.UserAccountDTO; @PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")

public class UserAccount { @PrimaryKey

@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Long id;

@Persistent

private String uniqueId; @Persistent

private String name;

@Persistent

private String emailAddress;

@Persistent

private List<com.google.appengine.api.datastore.Text> diagram; Các chúng ta chú ý chúng ta cần import các gói cần thiết vào import javax.jdo.PersistenceManager;

import javax.jdo.Query;

Kiểu mối quan hệ phía endHead 0..1 1) Nếu không có phụ thuộc hàm Kéo khóa chính ở endEntity về làm khóa ngoại bên startEntity. Ngược lại kéo về endEntity làm khóa chính Các Khóa ngoại có thể null

Giống 1) Giống 1) Giống 1)

1..1 2)

Nếu không có phụ thuộc hàm kéo khóa chính ở endEntity về làm khóa ngoại bên startEntity

Ngược lại kéo về startEntity làm khóa chính

Các khóa ngoại không null

Giống 2)

Nhưng trong trường hợp này endEntity cũng có thể có phụ thuộc hàm nên khi có phụ thuộc hàm sẽ kéo về phía có phụ thuộc hàm Giống 2) Giống 2) 0..n 3) Kéo khóa chính về endEntity làm khóa ngoại, Khóa ngoại có thể null 4) Nếu không có phụ thuộc hàm kéo khóa chính về endEntity làm khóa ngoại , khóa ngoại không null

Ngược lại kéo khóa 5) Tạo một bảng mới, kéo các khóa chính của 2 bảng về bảng mới làm khóa chính Giống 5)

Các anotation @Persistence cho biết thuộc tính đó cần sẽ được lưu lại trong datastore, @PrimaryKey nói lên thuộc tính đó là khóa chính trong khóa chính có dòng valueStrategy = IdGeneratorStrategy.IDENTITY câu này xác định khóa chính sẽ được tự động sinh ra bởi datastore.

Để có thể tạo lưu trữ, cập nhật và truy vấn một đối tượng vào datastore ta cần sử dụng đối tượng PersistenceManager, và đối tượng này được tạo từ đối tượng PersistenceManagerFactory. Nhưng để tạo một đối tượng PersistenceManagerFactory mất rất nhiều thời gian, nên chúng ta sẽ sử dụng mẫu Singleton pattern bằng cách tạo ra một lớp ở gói com.luong.server.PMF.

import javax.jdo.JDOHelper;

import javax.jdo.PersistenceManagerFactory; public final class PMF {

private static final PersistenceManagerFactory pmfInstance =

JDOHelper.getPersistenceManagerFactory("transactions-optional"); private PMF() {}

public static PersistenceManagerFactory get() { return pmfInstance;

} } (adsbygoogle = window.adsbygoogle || []).push({});

Sau đây là một đoạn code mà chúng tôi sử dụng để lưu trữ một đối tượng useraccount

PersistenceManager pm = PMF.get().getPersistenceManager(); Query q = pm.newQuery(UserAccount.class, "uniqueId == :uniqueId");

q.setUnique(true);

UserAccount result = (UserAccount) q.execute(currentUser.getUniqueId()); if(result == null) { pm.makePersistent(currentUser); detached = pm.detachCopy(currentUser); } else detached = pm.detachCopy(result); pm.close(); q.closeAll();

Đoạn code trên đầu tiên là tạo get một đối tượng PersistenceManager() để tạo một querry, câu lệnh querry này làm nhiệm vụ lấy lên một đối tượng user trong datastore có uniqueId, nếu đối tượng đó có tồn tại thì ta ko lưu nó vào nữa mà chỉ

lấy nó ra, còn nếu chưa tồn tại thì ta lưu nó lại bằng cách gọi hàm pm.makePersistent().

JDO là một công nghệ tương đối phức tạp nếu các chúng ta thực sự muốn tìm hiểu chi tiết có thể tham khảo chương 4 và chương 5 của tài liệu số [3] trong danh sách tài liệu tham khảo.

Một phần của tài liệu LVTN công cụ thiết kế CSDL online- tập trung nghiêu cứu xây dựng một công cụ hỗ trợ thiết kế cơ sở dữ liệu trên nền tảng web (Trang 66)