一、概念 Hibernate是一個開源的對象關係映射(ORM)框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程式員可以拋棄在程式中編寫SQL語句,隨心所欲的使用對象編程思維來操縱資料庫。 二、準備工作 在Eclipse中安裝HibernateTools插件:Help -> Install ...
一、概念
Hibernate是一個開源的對象關係映射(ORM)框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程式員可以拋棄在程式中編寫SQL語句,隨心所欲的使用對象編程思維來操縱資料庫。
二、準備工作
在Eclipse中安裝HibernateTools插件:Help -> Install New Software 來進行安裝。New -> Other打開的對話框中如果有Hibernate選項則表明安裝成功。
三、創建工程
1.New 一個 Java Project
2.為Java工程導入jar包:
-
- Hibernate核心jar包
- MySQL的jdbc驅動jar包
- Junit4的jar包
我們在windows->preferences->java->build path-user libraries中將三者添加為三個用戶類庫,方便以後的導入:
右擊Java項目->properties->Java Build Path->Library->add Library->User Library->next->將剛纔建好的用戶類庫全打勾->finish->ok。
3. 創建Hibernate的配置文檔,並編輯:
右擊工程下的src->new->other->Hibernate->Hibernate Configuration File (cfg.xml)->next,next,finish
src下已經生成了配置文件hibernate.cfg.xml,打開
<hibernate-configuration> <session-factory name=""> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> //mysql的jdbc驅動 <property name="connection.url">jdbc:mysql:///hibernate?useUnicode=true&characterEncoding=UTF-8</property> //指明資料庫的url地址 <property name="connection.username">root</property> //mysql用戶名 <property name="connection.password">****</property> //密碼 <property name="dialect">org.hibernate.dialect.MySQLDialect</property> //方言 <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="hbm2ddl.auto">create</property> <mapping resource="Students.hbm.xml" /> //映射文件 </session-factory> </hibernate-configuration>
4. 創建持久化類
假如我們想往資料庫存放一張學生表,包括id,姓名,性別,生日,地址這些欄位。那麼我們可以創建一個Students類,類中包含了學生的這些屬性,我們可以通過“更改Students對象的屬性,再傳遞給資料庫”來間接地操縱資料庫,這樣就避免了使用SQL語句。那麼Students這個類我們就稱為持久化類。
在src下創建一個類,命名為Students。持久化類的設計原則要遵循JavaBean的設計原則:
-
- 公有的類
- 私有的屬性
- 無參的公有的構造方法
- 屬性setter/getter封裝
如下:
public class Students { private int sid; private String sname; private String gender; private Date brithday; private String address; public Students() { } public Students(int sid, String sname, String gender, Date brithday, String address) { this.sid = sid; this.sname = sname; this.gender = gender; this.brithday = brithday; this.address = address; } public int getSid() { return sid; } public void setSid(int sid) { this.sid = sid; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Date getBrithday() { return brithday; } public void setBrithday(Date brithday) { this.brithday = brithday; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "Students [sid=" + sid + ", sname=" + sname + ", gender=" + gender + ", brithday=" + brithday + ", address=" + address + "]"; } }Students Class
5. 創建對象-關係映射文件
右擊src->new->other->Hibernate->Hibernater XML Mapping File (hbm.xml)->next,next->點選要持久化的類->finish
對象-關係映射文件創建完畢,打開可以看到:文件將一個實體類映射稱為資料庫中的一張表。
<hibernate-mapping> <class name="Students" table="STUDENTS"> <id name="sid" type="int"> <column name="SID" /> <generator class="assigned" /> </id> <property name="sname" type="java.lang.String"> <column name="SNAME" /> </property> <property name="gender" type="java.lang.String"> <column name="GENDER" /> </property> <property name="brithday" type="java.util.Date"> <column name="BRITHDAY" /> </property> <property name="address" type="java.lang.String"> <column name="ADDRESS" /> </property> </class> </hibernate-mapping>Students.hbm.xml
映射文件創建好之後要記得在hibernate配置文件中,添加mapping標簽:
<mapping resource="Students.hbm.xml" />
6. 在Mysql中創建一個資料庫,名稱為配置文檔中所配置的資料庫名稱
7. 通過Hibernate API編寫訪問資料庫的代碼,使用Junit進行測試。
三個註解:
-
- @Test :測試方法
- @Before:初始化方法
- @After:釋放資源
右擊工程名->new->source folder源文件夾->folder name命名為test->finish
在test文件夾下新建一個類,命名為StudentsTest:
1 import java.util.Date; 2 import org.hibernate.Session; 3 import org.hibernate.SessionFactory; 4 import org.hibernate.Transaction; 5 import org.hibernate.cfg.Configuration; 6 import org.hibernate.service.ServiceRegistry; 7 import org.hibernate.service.ServiceRegistryBuilder; 8 import org.junit.After; 9 import org.junit.Before; 10 import org.junit.Test; 11 12 //測試類 13 public class StudentsTest { 14 15 private SessionFactory sessionFactory; 16 private Session session; 17 private Transaction transaction; 18 19 @Before 20 public void init() { 21 // 創建配置對象 22 Configuration config = new Configuration().configure(); 23 // 創建服務註冊對象 24 ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()) 25 .buildServiceRegistry(); 26 // 創建會話工廠對象 27 sessionFactory = config.buildSessionFactory(serviceRegistry); 28 // 會話對象 29 session = sessionFactory.openSession(); 30 // 開啟事務 31 transaction = session.beginTransaction(); 32 33 } 34 35 @After 36 public void destroy() { 37 transaction.commit();// 提交事務 38 session.close();// 關閉會話 39 sessionFactory.close();// 關閉會話工廠 40 } 41 42 @Test 43 public void testSaveStudents() { 44 // 生成學生對象 45 Students s = new Students(1, "張三", "男", new Date(), "北京市"); 46 // 保存對象進入資料庫 47 session.save(s); 48 } 49 }
測試類創建好之後,右擊該類下目錄下的testSaveStudents()方法,Run as Junit Test!
之後我們去相應的資料庫里查看,已經有一張students的表生成了: