hibernate introduction 02
TRANSCRIPT
GIỚI THIỆU HIBERNATE
CHUYÊN ĐỀ JAVA
Nguyễn Hoàng Anh
Email: [email protected]
ĐH KHTN, 2011
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Nội dung trình bày
Giới thiệu Hibernate
Xây dựng ứng dụng quản lý sinh viên đơn giản với
Hibernate
– Lấy danh sách sinh viên
– Lấy thông tin sinh viên
– Thêm sinh viên
– Cập nhật sinh viên
– Xóa sinh viên
2
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Hibernate
Cơ sở dữ liệu thường được thiết kế và lưu trữ theo
hướng quan hệ.
Tuy nhiên phần mềm thường được xây dựng theo
hướng đối tượng.
Đối với lập trình viên khi xây dựng phần mềm thường
muốn làm việc với các đối tượng và không phải nhớ
đến các dòng , các cột trong các bảng của cơ sở dữ
liệu.
3
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Kiến trúc Hibernate
5
Code
Hibernate Mappings Configuaration
POJOs
JDBC
DATABASE
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Các bước sử dụng hibernate
Bước 1: Tạo cơ sở dữ liệu
Bước 2: Tạo các POJO
Bước 3: Tạo file cấu hình hibernate.cfg.xml
Bước 4: Tạo các file mapping <POJO>.hbm.xml
Bước 5: Khai báo các file mapping vào hibernate.cfg.xml
Bước 6: Xây dựng lớp HibernateUtil
Bước 7: Xây dựng các DAO & Sử dụng
6
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Bước 1: Tạo cơ sở dữ liệu
7
CSDL: MySQL
QuanLySinhVien
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Bước 2: Tạo POJO SinhVien
8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package pojo; import java.util.Date;
public class SinhVien implements java.io.Serializable {
private String maSinhVien;
private String hoVaTen;
private Date ngaySinh;
private String diaChi;
public SinhVien() {
}
public SinhVien(String maSinhVien) {
this.maSinhVien = maSinhVien;
}
public SinhVien(String maSinhVien, String hoVaTen, Date
ngaySinh, String diaChi) {
this.maSinhVien = maSinhVien;
this.hoVaTen = hoVaTen;
this.ngaySinh = ngaySinh;
this.diaChi = diaChi;
}
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public String getMaSinhVien() {
return this.maSinhVien;
} public void setMaSinhVien(String maSinhVien) {
this.maSinhVien = maSinhVien;
} public String getHoVaTen() {
return this.hoVaTen;
} public void setHoVaTen(String hoVaTen) {
this.hoVaTen = hoVaTen;
} public Date getNgaySinh() {
return this.ngaySinh;
} public void setNgaySinh(Date ngaySinh) {
this.ngaySinh = ngaySinh;
} public String getDiaChi() {
return this.diaChi;
} public void setDiaChi(String diaChi) {
this.diaChi = diaChi;
}
}
Bước 2: Tạo POJO SinhVien
9
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Bước 3: Tạo file cấu hình hibernate.cfg.xml
10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-
//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-
3.0.dtd">
<hibernate-configuration>
<session-factory>
. . .
</session-factory>
</hibernate-configuration>
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Bước 3: Tạo file cấu hình hibernate.cfg.xml
11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<session-factory>
<property
name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/QuanLySinhVien?autoReconnect&
useUnicode=true&characterEncoding=UTF-8
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<mapping resource="pojo/SinhVien.hbm.xml"/>
<!—Mapping Resources-->
</session-factory>
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Bước 4: Tạo các file mapping SinhVien.hbm.xml
12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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>
...
</hibernate-mapping>
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Bước 4: Tạo file mapping SinhVien.hbm.xml
13
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<class catalog="quanlyhocsinh"
name="pojo.SinhVien" table="sinhvien">
<id name="maSinhVien" type="string">
<column length="7" name="MaSinhVien"/>
<generator class="assigned"/>
</id>
<property name="hoVaTen" type="string">
<column length="45" name="HoVaTen"/>
</property>
<property name="ngaySinh" type="date">
<column length="10"name="NgaySinh"/>
</property>
<property name="diaChi" type="string">
<column length="45" name="DiaChi"/>
</property>
</class>
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Bước 5: Khai báo mapping vào hibernate.cfg.xml
14
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-
//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-
3.0.dtd"> <hibernate-configuration> <session-factory>
<!—Property-->
... <mapping resource="pojo/SinhVien.hbm.xml"/>
</session-factory> </hibernate-configuration>
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Bước 6: Xây dựng lớp HibernateUtil
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.SessionFactory;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new
AnnotationConfiguration().configure().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory
creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class SinhVienDAO {
public static List<SinhVien> layDanhSachSinhVien() {
List<SinhVien> ds = null;
Session session = HibernateUtil.getSessionFactory()
.openSession();
try {
String hql = "select sv from SinhVien sv";
Query query = session.createQuery(hql);
ds = query.list();
} catch (HibernateException ex) {
//Log the exception
System.err.println(ex);
} finally {
session.close();
}
return ds;
}
. . .
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng
17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Main {
public static void main(String[] args) {
//<editor-fold defaultstate="collapsed" desc="1. Lấy
danh sách sinh viên">
List<SinhVien> ds=SinhVienDAO.layDanhSachSinhVien();
for(int i=0; i<ds.size(); i++){
SinhVien sv=ds.get(i);
System.out.println("MSSV: "+sv.getMaSinhVien());
System.out.println("Họ và tên: "+sv.getHoVaTen());
System.out.println("Ngày sinh: " +
sv.getNgaySinh());
System.out.println("Địa chỉ: "+ sv.getDiaChi());
}
//</editor-fold>
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng
18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class SinhVienDAO {
public static SinhVien layThongTinhSinhVien(String
maSinhVien) {
SinhVien sv = null;
Session session = HibernateUtil.getSessionFactory()
.openSession();
try {
sv = (SinhVien) session.get(SinhVien.class,
maSinhVien);
} catch (HibernateException ex) {
//Log the exception
System.err.println(ex);
} finally {
session.close();
}
return sv;
}
. . .
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng
19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Main {
public static void main(String[] args) {
//<editor-fold defaultstate="collapsed" desc="2. Lấy
thông tin sinh viên">
SinhVien sv =
SinhVienDAO.layThongTinSinhVien("0312143");
if(sv!=null){
System.out.println("MSSV: " + sv.getMaSinhVien());
System.out.println("Họ và tên: " +
sv.getHoVaTen());
System.out.println("Ngày sinh: " +
sv.getNgaySinh());
System.out.println("Địa chỉ: " + sv.getDiaChi());
}else{
System.out.println("Sinh viên 0312143 không tồn
tại");
}
//</editor-fold>
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng
20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class SinhVienDAO {
public static boolean themSinhVien(SinhVien sv) {
Session session = HibernateUtil.getSessionFactory().openSession();
if (SinhVienDAO.layThongTinSinhVien(sv.getMaSinhVien())!=null) {
return false;
}
Transaction transaction = null;
try {
transaction = session.beginTransaction();
session.save(sv);
transaction.commit();
} catch (HibernateException ex) {
//Log the exception
transaction.rollback();
System.err.println(ex);
} finally {
session.close();
}
return true;
}
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng
21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Main {
public static void main(String[] args) {
//<editor-fold defaultstate="collapsed" desc="3. Thêm
sinh viên">
SinhVien sv = new SinhVien();
sv.setMaSinhVien("0312171");
sv.setHoVaTen("Tạ Tấn Thêm");
Calendar calendar = Calendar.getInstance();
calendar.set(1985, 5, 18);
Date d = calendar.getTime();
sv.setNgaySinh(d);
sv.setDiaChi("Vũng Liêm – Vĩnh Long");
boolean kq = SinhVienDAO.themSinhVien(sv);
if (kq == true) {
System.out.println("Thêm thành công");
} else {
System.out.println("Thêm thất bại");
}
//</editor-fold>
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class SinhVienDAO { public static boolean capNhatThongTinSinhVien(SinhVien sv) {
Session session = HibernateUtil.getSessionFactory().openSession();
if (SinhVienDAO.layThongTinSinhVien(sv.getMaSinhVien()) == null) {
return false;
}
Transaction transaction = null;
try {
transaction = session.beginTransaction();
session.update(sv);
transaction.commit();
} catch (HibernateException ex) {
//Log the exception
transaction.rollback();
System.err.println(ex);
} finally {
session.close();
}
return true;
}
. . .
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng
23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Main {
public static void main(String[] args) {
//<editor-fold defaultstate="collapsed" desc="4. Cập nhật
sinh viên">
SinhVien sv = SinhVienDAO.layThongTinSinhVien("0312143");
if (sv != null) {
sv.setHoVaTen("Tạ Tấn Thêm");
Calendar calendar = Calendar.getInstance();
calendar.set(1985, 5, 18);
Date d = calendar.getTime();
sv.setNgaySinh(d);
sv.setDiaChi("Vũng Liêm – Vĩnh Long");
boolean kq = SinhVienDAO.capNhatThongTinSinhVien(sv);
if (kq == true) {
System.out.println("Cập nhật thành công");
} else {
System.out.println("Cập nhật thất bại");
}
}
//</editor-fold>
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng
24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class SinhVienDAO { public static boolean xoaSinhVien(String maSinhVien) {
Session session = HibernateUtil.getSessionFactory().openSession();
SinhVien sv = SinhVienDAO.layThongTinSinhVien(maSinhVien);
if(sv==null){
return false;
}
Transaction transaction = null;
try {
transaction = session.beginTransaction();
session.delete(sv);
transaction.commit();
} catch (HibernateException ex) {
//Log the exception
transaction.rollback();
System.err.println(ex);
} finally {
session.close();
}
return true;
}
} Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng
25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Main {
public static void main(String[] args) {
//<editor-fold defaultstate="collapsed" desc="5. Xóa
sinh viên">
boolean kq = SinhVienDAO.xoaSinhVien("0312143");
if (kq == true) {
System.out.println("Xóa thành công");
} else {
System.out.println("Xóa thất bại");
}
}
//</editor-fold>
}
}
Upload by Cafeitvn.com
Nguyễn Hoàng Anh – [email protected] – ĐH KHTN - 2011
Tài liệu tham khảo
Nguyễn Hoàng Anh, Tập bài giảng và video môn
chuyên đề Java, 2010
Marty Hall, Tập bài giảng về Servlet, 2010
– http://courses.coreservlets.com/Course-Materials/csajsp2.html
26
Upload by Cafeitvn.com