1. Trang chủ
  2. » Trung học cơ sở - phổ thông

Bài giảng Lập trình Java 4 - Bài 7: Hibernate Mapping

20 4 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 20
Dung lượng 403 KB

Nội dung

sử dụng 2 câu truy vấn select để truy vấn cả lớp cha và con, cách này không hiệu quả vì phải truy xuất tới cơ sở dữ liệu 2 lần.. Cơ chế fetch – sử dụng select[r]

(1)(2)

Nôi dung học  Many - to - One  One to One

(3)

Mapping Many To One

• Một học sinh thuộc lớp • Một lớp có nhiều học sinh

Học sinh

- MaHocSinh: Int - TenHocSinh: Str - MaLop: Str

Lớp

- MaLop: String

(4)

Many to one: LopPOJO

1 2 3 4 5 6

package pojo;

public class LopPojo implements java.io.Serializable {

private String maLop;

private String tenLop;

}

(5)

Many to one: Lop.hbm.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

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

<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

<class name="pojo.LopPojo" table="lop">

<id name="maLop" type="string">

<column name="MaLop" length="10"/>

<generator class="assigned"/>

</id>

<property name="tenLop" type="string">

<column name="TenLop" length="45" />

</property>

</class>

</hibernate-mapping>

(6)

Many to one: HocSinhPOJO

1 2 3 4 5 6

package pojo;

public class HocSinhPojo implements java.io.Serializable {

private int maHocSinh;

private String tenHocSinh;

private LopPojo lop;

(7)

Many to one: HocSinh.hbm.xml 1 2 3 4 5 6 7 8 9 10 11 12 <hibernate-mapping>

<class name="pojo.HocSinhPojo" table="hocsinh">

<id name="maHocSinh" column="MaHocSinh" type="integer">

<generator class="assigned"/>

</id>

<property name="tenHocSinh" column="TenHocSinh"

type="string"/>

<many-to-one name="lop" class="pojo.LopPojo" >

<column name="MaLop" />

</many-to-one>

</class>

</hibernate-mapping>

<many-to-one

name="lop”  tên thuộc tính cần mapping

class="pojo.LopPojo" >  Tên lớp cần mapping tới

<column name="MaLop" />  Tên cột table HocSinh

(8)

Lấy thông tin học sinh 10 11 12 13 14 15 16 17 18 19 20

public class Main {

public static void main(String[] args) { HocSinhPojo hs = null;

SessionFactory ssFac = MyHibernateUtil.getSessionFactory(); Session ss = ssFac.openSession();

ss.getTransaction().begin(); try {

hs = (HocSinhPojo)ss.get(HocSinhPojo.class, 1);

System.out.println("Tên học sinh: " + hs.getTenHocSinh()); System.out.println("Mã lớp: " + hs.getLop().getMaLop());

System.out.println("Tên lớp: " + hs.getLop().getTenLop());

} catch (HibernateException ex ) { System.out.println(ex.getMessage());

} finally { ss.close(); } } } Thành công

(9)

Lấy thông tin học sinh 10 11 12 13 14 15 16 17 18 19 20

public class Main {

public static void main(String[] args) { HocSinhPojo hs = null;

SessionFactory ssFac = MyHibernateUtil.getSessionFactory(); Session ss = ssFac.openSession();

ss.getTransaction().begin(); try {

hs = (HocSinhPojo)ss.get(HocSinhPojo.class, 1); } catch (HibernateException ex ) {

System.out.println(ex.getMessage()); }

finally

{

ss.close(); }

System.out.println("Tên học sinh: " + hs.getTenHocSinh()); System.out.println("Mã lớp: " + hs.getLop().getMaLop());

System.out.println("Tên lớp: " + hs.getLop().getTenLop()); }

}

Lỗi

Lấy thông tin học sinh sau đóng Session

(10)

Lấy thơng tin học sinh

Lỗi

Lấy thông tin học sinh sau đóng Session

(11)

Lấy thông tin học sinh 10 11 12 13 14 15 16 17 18 19 20

public class Main {

public static void main(String[] args) { HocSinhPojo hs = null;

SessionFactory ssFac = MyHibernateUtil.getSessionFactory(); Session ss = ssFac.openSession();

ss.getTransaction().begin(); try {

hs = (HocSinhPojo)ss.get(HocSinhPojo.class, 1);

System.out.println("Tên lớp: " + hs.getLop().getTenLop()); } catch (HibernateException ex ) {

System.out.println(ex.getMessage()); }

finally

{

ss.close(); }

System.out.println("Tên học sinh: " + hs.getTenHocSinh()); System.out.println("Mã lớp: " + hs.getLop().getMaLop()); }

}

(12)

Lấy thông tin học sinh  Nguyên nhân lỗi:

• Cơ chế Lazy Initialization bật (= true)

Truy vấn đối tượng HocSinh không kèm theo truy

vấn đối tượng Lop (chỉ truy vấn mã lớp mà không truy vấn tên lớp)

 Truy vấn đối tượng cha không kèm theo truy vấn

(13)

Lazy Initialization & fetch

 Trong Hibernate, Lazy Initialization giúp

• Tránh câu truy vấn sở liệu khơng cần thiết

• Gia tăng hiệu suất thực thi

(14)

Cách

 Sau có mã lớp, ta dùng làm lấy thông tin lớp theo

mã lớp

(15)

Cách – Khai báo lazy = false Hocsinh.hbm.xml

1 10 11

<hibernate-mapping>

<classname="pojo.HocSinhPojo"table="hocsinh">

<idname="maHocSinh"column="MaHocSinh"type="integer">

<generatorclass="assigned"/>

</id>

<propertyname="tenHocSinh"column="TenHocSinh" type="string"/>

<many-to-onename="lop"class="pojo.LopPojo"lazy="false" >

<columnname="MaLop"/>

</many-to-one>

</class>

(16)

Cơ chế fetch

 Lazy =“false” truy vấn lớp cha kèm theo truy vấn lớp • Fetch = “select” sử dụng select để truy vấn lớp 

sử dụng câu truy vấn select để truy vấn lớp cha con, cách khơng hiệu phải truy xuất tới sở dữ liệu lần

• Fetch = “join” sử dụng phép kết để gọp truy vấn lớp cha

(17)

Cơ chế fetch – sử dụng select

1 10 11

<hibernate-mapping>

<classname="pojo.HocSinhPojo"table="hocsinh">

<idname="maHocSinh"column="MaHocSinh"type="integer">

<generatorclass="assigned"/>

</id>

<propertyname="tenHocSinh"column="TenHocSinh" type="string"/>

<many-to-onename="lop"class="pojo.LopPojo"lazy="false" fetch="select">

<columnname="MaLop"/>

</many-to-one>

</class>

</hibernate-mapping>

Hocsinh.hbm.xml

Chú ý: sữa lại file cấu hình xml (cấu hình hibernate, cấu hình mapping, …

(18)

Cơ chế fetch – sử dụng select

1 10 11

<hibernate-mapping>

<classname="pojo.HocSinhPojo"table="hocsinh">

<idname="maHocSinh"column="MaHocSinh"type="integer">

<generatorclass="assigned"/>

</id>

<propertyname="tenHocSinh"column="TenHocSinh" type="string"/>

<many-to-onename="lop"class="pojo.LopPojo"lazy="false" fetch="select">

<columnname="MaLop"/>

</many-to-one>

</class>

</hibernate-mapping>

Hocsinh.hbm.xml

Chú ý: mỗi sữa lại file cấu hình xml (cấu hình hibernate, cấu hình

mapping, …)

(19)

Cơ chế fetch – sử dụng select

Bản chất, câu truy vấn HQL chuyển SQL, hình có câu select được gọi  truy xuất CSDL lần

2 câu truy vấn select

(20)

Cơ chế fetch – sử dụng join

1 10 11

<hibernate-mapping>

<classname="pojo.HocSinhPojo"table="hocsinh">

<idname="maHocSinh"column="MaHocSinh"type="integer">

<generatorclass="assigned"/>

</id>

<propertyname="tenHocSinh"column="TenHocSinh" type="string"/>

<many-to-onename="lop"class="pojo.LopPojo"lazy="false" fetch=“join">

<columnname="MaLop"/>

</many-to-one>

</class>

</hibernate-mapping>

Hocsinh.hbm.xml

Chú ý: mỗi sữa lại file cấu hình xml (cấu hình hibernate, cấu hình

mapping, …)

Ngày đăng: 11/03/2021, 10:49

TỪ KHÓA LIÊN QUAN