天天看點

初學hibernate架構 初學hibernate架構

初學hibernate架構

  今天初次學習了hibernate,學習了hibernate的一些原理性知識。hibernate是基于ORM的持久層架構,它對JDBC進行了非常輕量級的對象封裝,使得Java程式員可以随心所欲的使用對象程式設計思維來操縱資料庫。ORM(Object Relation Map)即對象關系映射,其映射方式有兩種:①注解映射,②xml配置檔案映射,其中第一種方式比較簡單,但是耦合對要高,第二種方式雖然要複雜一點但是耦合度相對低了很多,因為我們開發系統都追求高内聚、低耦合,是以第二種方式較常用。

  使用hibernate要做到“三拷三配、六個準備,七個步驟”,這是口訣。

  三拷三配、六個準備:三拷是指拷JDBC驅動包、hibernate開發包、log4j包,三配是指配置pojo類、配置類與資料庫表之間的映射、配置總配置檔案(用于資料庫連接配接的)。

  首先講三拷三配、六個準備,拷JDBC驅動包不用多講,因為hibernate也是基于JDBC的,隻是對其進行了封裝,是以JDBC驅動包必不可少。既然是使用hibernate,那hibernate開發包也必不可少,用來提供各種類的。log4j包用來記錄日志資訊的,這個也是非常有用的,因為以後做的系統都要釋出到伺服器上面去的,你不可能每時每刻都守在伺服器旁邊看有沒有出問題,有了日志就可以省很多事了。隻要定期去檢視日志檔案就好了,所有問題都會記錄在日志檔案中。                  三配中配置pojo也不用多講,跟以前差不多,一個表對應一個pojo類就ok了。因為hibernate是基于對象關系映射的架構,是以pojo類對象與關系表的映射配置必不可少,需要配置三個東西:表和類的映射、屬性和字段的映射、表和表的關系(如果兩個表有主外鍵關系的話,這裡隻有一個表是以不用配置),配置代碼如下:

pojo中Student類

初學hibernate架構 初學hibernate架構
1 package com.pojo;
 2 
 3 import java.io.Serializable;
 4 import java.util.Date;
 5 
 6 public class Student implements Serializable {
 7     private int sid;
 8     private String sname;
 9     private Date sage;
10     public int getSid() {
11         return sid;
12     }
13     public void setSid(int sid) {
14         this.sid = sid;
15     }
16     public String getSname() {
17         return sname;
18     }
19     public void setSname(String sname) {
20         this.sname = sname;
21     }
22     public Date getSage() {
23         return sage;
24     }
25     public void setSage(Date sage) {
26         this.sage = sage;
27     }
28     
29 }      
初學hibernate架構 初學hibernate架構

Student類與student表的映射student.hbm.xml代碼:

初學hibernate架構 初學hibernate架構
1 <?xml version="1.0" encoding="utf-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 
 5 
 6 <hibernate-mapping>
 7     <!-- 表與類的映射 -->
 8     <class name="com.pojo.Student" table="student">
 9         <!-- 字段與屬性映射之主鍵映射 -->
10         <id name="sid" column="sid">
11             <generator class="native"></generator>
12         </id>
13         <!-- 字段與屬性映射 -->
14         <property name="sname" column="sname"></property>
15         <property name="sage" column="sage"></property>
16     </class>
17 </hibernate-mapping>      
初學hibernate架構 初學hibernate架構

最後是總配置檔案hibernate.cfg.xml的配置(有可視化界面操作的),該配置是用于建立資料庫連接配接的,其代碼如下:

初學hibernate架構 初學hibernate架構
1 <?xml version='1.0' encoding='UTF-8'?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 5 
 6 <hibernate-configuration>
 7 <session-factory>
 8     <property name="myeclipse.connection.profile">Mysql</property>
 9     <property name="connection.url">
10         jdbc:mysql://127.0.0.1:3306/test
11     </property>
12     <property name="connection.username">root</property>
13     <property name="connection.password">admin</property>
14     <property name="connection.driver_class">
15         com.mysql.jdbc.Driver
16     </property>
17     <property name="dialect">
18         org.hibernate.dialect.MySQLDialect
19     </property>
20     <property name="show_sql">true</property>
21     <mapping resource="com/pojo/student.hbm.xml" />
22 </session-factory>
23 </hibernate-configuration>      
初學hibernate架構 初學hibernate架構

到此為止準備工作已經完成了,接下來就是操縱資料庫了。操作資料庫有七個步驟:

  ①讀取配置檔案

  ②建立session工廠

  ③打開session

  ④開始事務:hibernate中增删改一定要用事務,查詢可以不用

  ⑤處理事務,對資料表的增(save)、删(delete)、改(update)

  ⑥送出事務或者復原事務

  ⑦關閉session。

下面是對表student插入資料的一個例子:

初學hibernate架構 初學hibernate架構
1 package com.test;
 2 
 3 
 4 
 5 import java.sql.Date;
 6 
 7 import org.hibernate.Session;
 8 import org.hibernate.SessionFactory;
 9 import org.hibernate.Transaction;
10 import org.hibernate.cfg.Configuration;
11 
12 import com.pojo.Student;
13 
14 public class 插入資料 {
15 
16     /**
17      * @param args
18      */
19     public static void main(String[] args) {
20         //1.讀取配置檔案
21         Configuration cfg = new Configuration().configure();
22         
23         //2.建立session工廠
24         SessionFactory  factory = cfg.buildSessionFactory();
25         
26         //3.打開session
27         Session session = factory.openSession();
28         
29         //4.建立事務:hibernate中增删改一定要用事務,查詢可以不用
30         Transaction tr = session.beginTransaction();
31         
32         try {
33             //5.處理事務
34             Student s = new Student();
35             s.setSname("xinxin");
36             s.setSage(Date.valueOf("1992-10-09"));
37             session.save(s);
38             //6.送出事務
39             tr.commit();
40         } catch (Exception e) {
41             //6.出現問題,事務復原
42             tr.rollback();
43         }
44         //7.關閉會話
45         session.close();
46     }
47 
48 }      
初學hibernate架構 初學hibernate架構

下面是對查詢表student的例子:

初學hibernate架構 初學hibernate架構
1 package com.test;
 2 
 3 import java.util.List;
 4 
 5 import org.hibernate.Query;
 6 import org.hibernate.Session;
 7 import org.hibernate.SessionFactory;
 8 import org.hibernate.cfg.Configuration;
 9 
10 import com.pojo.Student;
11 
12 public class 查詢所有 {
13 
14     /**
15      * @param args
16      */
17     public static void main(String[] args) {
18         //讀取配置檔案
19         Configuration cfg = new Configuration().configure();
20         //建立session工廠
21         SessionFactory factory = cfg.buildSessionFactory();
22         //打開session
23         Session session = factory.openSession();
24         //批量查詢用HQL(表名改類名,字段名改屬性名)
25         Query query = session.createQuery("from Student where sid=?");
26         //這裡給問号指派時是從0開始的
27         query.setInteger(0, 2);
28         List<Student> list = query.list();
29         for (Student student : list) {
30             System.out.println(student.getSname());
31         }
32         session.close();
33     }
34 
35 }      
初學hibernate架構 初學hibernate架構

查詢資料如果是根據主鍵查找一條記錄的時候可以用session的get()方法,查詢多條記錄則必須用HQL(Hibernate Query Language),HQL和SQL語句差不多,隻是将表明改為類名、将字段名改為屬性名。

繼續閱讀